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()
1629 wm831x->soft_shutdown = pdata->soft_shutdown; in wm831x_device_init()
1631 ret = wm831x_reg_read(wm831x, WM831X_PARENT_ID); in wm831x_device_init()
1633 dev_err(wm831x->dev, "Failed to read parent ID: %d\n", ret); in wm831x_device_init()
1641 dev_err(wm831x->dev, "Device is not a WM831x: ID %x\n", ret); in wm831x_device_init()
1646 ret = wm831x_reg_read(wm831x, WM831X_REVISION); in wm831x_device_init()
1648 dev_err(wm831x->dev, "Failed to read revision: %d\n", ret); in wm831x_device_init()
1653 ret = wm831x_reg_read(wm831x, WM831X_RESET_ID); in wm831x_device_init()
1655 dev_err(wm831x->dev, "Failed to read device ID: %d\n", ret); in wm831x_device_init()
1663 dev_info(wm831x->dev, "Device is an engineering sample\n"); in wm831x_device_init()
1670 wm831x->num_gpio = 16; in wm831x_device_init()
1671 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1673 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1674 wm831x->has_cs_sts = 1; in wm831x_device_init()
1677 dev_info(wm831x->dev, "WM8310 revision %c\n", 'A' + rev); in wm831x_device_init()
1682 wm831x->num_gpio = 16; in wm831x_device_init()
1683 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1685 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1686 wm831x->has_cs_sts = 1; in wm831x_device_init()
1689 dev_info(wm831x->dev, "WM8311 revision %c\n", 'A' + rev); in wm831x_device_init()
1694 wm831x->num_gpio = 16; in wm831x_device_init()
1695 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1697 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1698 wm831x->has_cs_sts = 1; in wm831x_device_init()
1701 dev_info(wm831x->dev, "WM8312 revision %c\n", 'A' + rev); in wm831x_device_init()
1706 wm831x->num_gpio = 12; in wm831x_device_init()
1707 dev_info(wm831x->dev, "WM8320 revision %c\n", 'A' + rev); in wm831x_device_init()
1712 wm831x->num_gpio = 12; in wm831x_device_init()
1713 dev_info(wm831x->dev, "WM8321 revision %c\n", 'A' + rev); in wm831x_device_init()
1718 wm831x->num_gpio = 12; in wm831x_device_init()
1719 dev_info(wm831x->dev, "WM8325 revision %c\n", 'A' + rev); in wm831x_device_init()
1724 wm831x->num_gpio = 12; in wm831x_device_init()
1725 dev_info(wm831x->dev, "WM8326 revision %c\n", 'A' + rev); in wm831x_device_init()
1729 dev_err(wm831x->dev, "Unknown WM831x device %04x\n", ret); in wm831x_device_init()
1738 dev_warn(wm831x->dev, "Device was registered as a WM%lx\n", in wm831x_device_init()
1742 ret = wm831x_reg_read(wm831x, WM831X_SECURITY_KEY); in wm831x_device_init()
1744 dev_err(wm831x->dev, "Failed to read security key: %d\n", ret); in wm831x_device_init()
1748 dev_warn(wm831x->dev, "Security key had non-zero value %x\n", in wm831x_device_init()
1750 wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0); in wm831x_device_init()
1752 wm831x->locked = 1; in wm831x_device_init()
1755 ret = pdata->pre_init(wm831x); in wm831x_device_init()
1757 dev_err(wm831x->dev, "pre_init() failed: %d\n", ret); in wm831x_device_init()
1767 wm831x_reg_write(wm831x, in wm831x_device_init()
1779 ret = wm831x_irq_init(wm831x, irq); in wm831x_device_init()
1783 wm831x_auxadc_init(wm831x); in wm831x_device_init()
1788 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1794 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1798 mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1804 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1808 mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1817 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1828 dev_err(wm831x->dev, "Failed to add children\n"); in wm831x_device_init()
1835 ret = wm831x_reg_read(wm831x, WM831X_CLOCK_CONTROL_2); in wm831x_device_init()
1837 dev_err(wm831x->dev, "Failed to read clock status: %d\n", ret); in wm831x_device_init()
1842 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1846 dev_err(wm831x->dev, "Failed to add RTC: %d\n", ret); in wm831x_device_init()
1850 dev_info(wm831x->dev, "32.768kHz clock disabled, no RTC\n"); in wm831x_device_init()
1855 ret = mfd_add_devices(wm831x->dev, wm831x_num, backlight_devs, in wm831x_device_init()
1859 dev_err(wm831x->dev, "Failed to add backlight: %d\n", in wm831x_device_init()
1863 wm831x_otp_init(wm831x); in wm831x_device_init()
1866 ret = pdata->post_init(wm831x); in wm831x_device_init()
1868 dev_err(wm831x->dev, "post_init() failed: %d\n", ret); in wm831x_device_init()
1876 wm831x_irq_exit(wm831x); in wm831x_device_init()
1878 mfd_remove_devices(wm831x->dev); in wm831x_device_init()
1882 void wm831x_device_exit(struct wm831x *wm831x) in wm831x_device_exit() argument
1884 wm831x_otp_exit(wm831x); in wm831x_device_exit()
1885 mfd_remove_devices(wm831x->dev); in wm831x_device_exit()
1886 free_irq(wm831x_irq(wm831x, WM831X_IRQ_AUXADC_DATA), wm831x); in wm831x_device_exit()
1887 wm831x_irq_exit(wm831x); in wm831x_device_exit()
1890 int wm831x_device_suspend(struct wm831x *wm831x) in wm831x_device_suspend() argument
1899 if (wm831x->charger_irq_wake) { in wm831x_device_suspend()
1900 reg = wm831x_reg_read(wm831x, WM831X_INTERRUPT_STATUS_2_MASK); in wm831x_device_suspend()
1911 reg = wm831x_reg_read(wm831x, in wm831x_device_suspend()
1915 dev_info(wm831x->dev, in wm831x_device_suspend()
1918 wm831x_reg_write(wm831x, WM831X_INTERRUPT_STATUS_2, in wm831x_device_suspend()
1926 void wm831x_device_shutdown(struct wm831x *wm831x) in wm831x_device_shutdown() argument
1928 if (wm831x->soft_shutdown) { in wm831x_device_shutdown()
1929 dev_info(wm831x->dev, "Initiating shutdown...\n"); in wm831x_device_shutdown()
1930 wm831x_set_bits(wm831x, WM831X_POWER_STATE, WM831X_CHIP_ON, 0); in wm831x_device_shutdown()