Lines Matching refs:wm831x
94 static int wm831x_reg_locked(struct wm831x *wm831x, unsigned short reg) in wm831x_reg_locked() argument
96 if (!wm831x->locked) in wm831x_reg_locked()
120 void wm831x_reg_lock(struct wm831x *wm831x) in wm831x_reg_lock() argument
124 ret = wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0); in wm831x_reg_lock()
126 dev_vdbg(wm831x->dev, "Registers locked\n"); in wm831x_reg_lock()
128 mutex_lock(&wm831x->io_lock); in wm831x_reg_lock()
129 WARN_ON(wm831x->locked); in wm831x_reg_lock()
130 wm831x->locked = 1; in wm831x_reg_lock()
131 mutex_unlock(&wm831x->io_lock); in wm831x_reg_lock()
133 dev_err(wm831x->dev, "Failed to lock registers: %d\n", ret); in wm831x_reg_lock()
146 int wm831x_reg_unlock(struct wm831x *wm831x) in wm831x_reg_unlock() argument
151 ret = wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0x9716); in wm831x_reg_unlock()
153 dev_vdbg(wm831x->dev, "Registers unlocked\n"); in wm831x_reg_unlock()
155 mutex_lock(&wm831x->io_lock); in wm831x_reg_unlock()
156 WARN_ON(!wm831x->locked); in wm831x_reg_unlock()
157 wm831x->locked = 0; in wm831x_reg_unlock()
158 mutex_unlock(&wm831x->io_lock); in wm831x_reg_unlock()
346 struct wm831x *wm831x = dev_get_drvdata(dev); in wm831x_reg_writeable() local
348 if (wm831x_reg_locked(wm831x, reg)) in wm831x_reg_writeable()
517 int wm831x_reg_read(struct wm831x *wm831x, unsigned short reg) in wm831x_reg_read() argument
522 ret = regmap_read(wm831x->regmap, reg, &val); in wm831x_reg_read()
539 int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg, in wm831x_bulk_read() argument
542 return regmap_bulk_read(wm831x->regmap, reg, buf, count); in wm831x_bulk_read()
546 static int wm831x_write(struct wm831x *wm831x, unsigned short reg, in wm831x_write() argument
556 if (wm831x_reg_locked(wm831x, reg)) in wm831x_write()
559 dev_vdbg(wm831x->dev, "Write %04x to R%d(0x%x)\n", in wm831x_write()
561 ret = regmap_write(wm831x->regmap, reg + i, buf[i]); in wm831x_write()
576 int wm831x_reg_write(struct wm831x *wm831x, unsigned short reg, in wm831x_reg_write() argument
581 mutex_lock(&wm831x->io_lock); in wm831x_reg_write()
583 ret = wm831x_write(wm831x, reg, 2, &val); in wm831x_reg_write()
585 mutex_unlock(&wm831x->io_lock); in wm831x_reg_write()
599 int wm831x_set_bits(struct wm831x *wm831x, unsigned short reg, in wm831x_set_bits() argument
604 mutex_lock(&wm831x->io_lock); in wm831x_set_bits()
606 if (!wm831x_reg_locked(wm831x, reg)) in wm831x_set_bits()
607 ret = regmap_update_bits(wm831x->regmap, reg, mask, val); in wm831x_set_bits()
611 mutex_unlock(&wm831x->io_lock); in wm831x_set_bits()
1619 int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq) in wm831x_device_init() argument
1621 struct wm831x_pdata *pdata = dev_get_platdata(wm831x->dev); in wm831x_device_init()
1626 mutex_init(&wm831x->io_lock); in wm831x_device_init()
1627 mutex_init(&wm831x->key_lock); in wm831x_device_init()
1628 dev_set_drvdata(wm831x->dev, wm831x); in wm831x_device_init()
1631 wm831x->soft_shutdown = pdata->soft_shutdown; in wm831x_device_init()
1633 ret = wm831x_reg_read(wm831x, WM831X_PARENT_ID); in wm831x_device_init()
1635 dev_err(wm831x->dev, "Failed to read parent ID: %d\n", ret); in wm831x_device_init()
1643 dev_err(wm831x->dev, "Device is not a WM831x: ID %x\n", ret); in wm831x_device_init()
1648 ret = wm831x_reg_read(wm831x, WM831X_REVISION); in wm831x_device_init()
1650 dev_err(wm831x->dev, "Failed to read revision: %d\n", ret); in wm831x_device_init()
1655 ret = wm831x_reg_read(wm831x, WM831X_RESET_ID); in wm831x_device_init()
1657 dev_err(wm831x->dev, "Failed to read device ID: %d\n", ret); in wm831x_device_init()
1665 dev_info(wm831x->dev, "Device is an engineering sample\n"); in wm831x_device_init()
1672 wm831x->num_gpio = 16; in wm831x_device_init()
1673 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1675 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1676 wm831x->has_cs_sts = 1; in wm831x_device_init()
1679 dev_info(wm831x->dev, "WM8310 revision %c\n", 'A' + rev); in wm831x_device_init()
1684 wm831x->num_gpio = 16; in wm831x_device_init()
1685 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1687 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1688 wm831x->has_cs_sts = 1; in wm831x_device_init()
1691 dev_info(wm831x->dev, "WM8311 revision %c\n", 'A' + rev); in wm831x_device_init()
1696 wm831x->num_gpio = 16; in wm831x_device_init()
1697 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1699 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1700 wm831x->has_cs_sts = 1; in wm831x_device_init()
1703 dev_info(wm831x->dev, "WM8312 revision %c\n", 'A' + rev); in wm831x_device_init()
1708 wm831x->num_gpio = 12; in wm831x_device_init()
1709 dev_info(wm831x->dev, "WM8320 revision %c\n", 'A' + rev); in wm831x_device_init()
1714 wm831x->num_gpio = 12; in wm831x_device_init()
1715 dev_info(wm831x->dev, "WM8321 revision %c\n", 'A' + rev); in wm831x_device_init()
1720 wm831x->num_gpio = 12; in wm831x_device_init()
1721 dev_info(wm831x->dev, "WM8325 revision %c\n", 'A' + rev); in wm831x_device_init()
1726 wm831x->num_gpio = 12; in wm831x_device_init()
1727 dev_info(wm831x->dev, "WM8326 revision %c\n", 'A' + rev); in wm831x_device_init()
1731 dev_err(wm831x->dev, "Unknown WM831x device %04x\n", ret); in wm831x_device_init()
1740 dev_warn(wm831x->dev, "Device was registered as a WM%lx\n", in wm831x_device_init()
1744 ret = wm831x_reg_read(wm831x, WM831X_SECURITY_KEY); in wm831x_device_init()
1746 dev_err(wm831x->dev, "Failed to read security key: %d\n", ret); in wm831x_device_init()
1750 dev_warn(wm831x->dev, "Security key had non-zero value %x\n", in wm831x_device_init()
1752 wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0); in wm831x_device_init()
1754 wm831x->locked = 1; in wm831x_device_init()
1757 ret = pdata->pre_init(wm831x); in wm831x_device_init()
1759 dev_err(wm831x->dev, "pre_init() failed: %d\n", ret); in wm831x_device_init()
1769 wm831x_reg_write(wm831x, in wm831x_device_init()
1781 ret = wm831x_irq_init(wm831x, irq); in wm831x_device_init()
1785 wm831x_auxadc_init(wm831x); in wm831x_device_init()
1790 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1796 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1800 mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1806 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1810 mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1819 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1830 dev_err(wm831x->dev, "Failed to add children\n"); in wm831x_device_init()
1837 ret = wm831x_reg_read(wm831x, WM831X_CLOCK_CONTROL_2); in wm831x_device_init()
1839 dev_err(wm831x->dev, "Failed to read clock status: %d\n", ret); in wm831x_device_init()
1844 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1848 dev_err(wm831x->dev, "Failed to add RTC: %d\n", ret); in wm831x_device_init()
1852 dev_info(wm831x->dev, "32.768kHz clock disabled, no RTC\n"); in wm831x_device_init()
1857 ret = mfd_add_devices(wm831x->dev, wm831x_num, backlight_devs, in wm831x_device_init()
1861 dev_err(wm831x->dev, "Failed to add backlight: %d\n", in wm831x_device_init()
1865 wm831x_otp_init(wm831x); in wm831x_device_init()
1868 ret = pdata->post_init(wm831x); in wm831x_device_init()
1870 dev_err(wm831x->dev, "post_init() failed: %d\n", ret); in wm831x_device_init()
1878 wm831x_irq_exit(wm831x); in wm831x_device_init()
1880 mfd_remove_devices(wm831x->dev); in wm831x_device_init()
1884 void wm831x_device_exit(struct wm831x *wm831x) in wm831x_device_exit() argument
1886 wm831x_otp_exit(wm831x); in wm831x_device_exit()
1887 mfd_remove_devices(wm831x->dev); in wm831x_device_exit()
1888 free_irq(wm831x_irq(wm831x, WM831X_IRQ_AUXADC_DATA), wm831x); in wm831x_device_exit()
1889 wm831x_irq_exit(wm831x); in wm831x_device_exit()
1892 int wm831x_device_suspend(struct wm831x *wm831x) in wm831x_device_suspend() argument
1901 if (wm831x->charger_irq_wake) { in wm831x_device_suspend()
1902 reg = wm831x_reg_read(wm831x, WM831X_INTERRUPT_STATUS_2_MASK); in wm831x_device_suspend()
1913 reg = wm831x_reg_read(wm831x, in wm831x_device_suspend()
1917 dev_info(wm831x->dev, in wm831x_device_suspend()
1920 wm831x_reg_write(wm831x, WM831X_INTERRUPT_STATUS_2, in wm831x_device_suspend()
1928 void wm831x_device_shutdown(struct wm831x *wm831x) in wm831x_device_shutdown() argument
1930 if (wm831x->soft_shutdown) { in wm831x_device_shutdown()
1931 dev_info(wm831x->dev, "Initiating shutdown...\n"); in wm831x_device_shutdown()
1932 wm831x_set_bits(wm831x, WM831X_POWER_STATE, WM831X_CHIP_ON, 0); in wm831x_device_shutdown()