Lines Matching refs:wm831x
92 static int wm831x_reg_locked(struct wm831x *wm831x, unsigned short reg) in wm831x_reg_locked() argument
94 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()
148 int wm831x_reg_unlock(struct wm831x *wm831x) in wm831x_reg_unlock() argument
153 ret = wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0x9716); in wm831x_reg_unlock()
155 dev_vdbg(wm831x->dev, "Registers unlocked\n"); in wm831x_reg_unlock()
157 mutex_lock(&wm831x->io_lock); in wm831x_reg_unlock()
158 WARN_ON(!wm831x->locked); in wm831x_reg_unlock()
159 wm831x->locked = 0; in wm831x_reg_unlock()
160 mutex_unlock(&wm831x->io_lock); in wm831x_reg_unlock()
348 struct wm831x *wm831x = dev_get_drvdata(dev); in wm831x_reg_writeable() local
350 if (wm831x_reg_locked(wm831x, reg)) in wm831x_reg_writeable()
519 int wm831x_reg_read(struct wm831x *wm831x, unsigned short reg) in wm831x_reg_read() argument
524 ret = regmap_read(wm831x->regmap, reg, &val); in wm831x_reg_read()
541 int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg, in wm831x_bulk_read() argument
544 return regmap_bulk_read(wm831x->regmap, reg, buf, count); in wm831x_bulk_read()
548 static int wm831x_write(struct wm831x *wm831x, unsigned short reg, in wm831x_write() argument
558 if (wm831x_reg_locked(wm831x, reg)) in wm831x_write()
561 dev_vdbg(wm831x->dev, "Write %04x to R%d(0x%x)\n", in wm831x_write()
563 ret = regmap_write(wm831x->regmap, reg + i, buf[i]); in wm831x_write()
578 int wm831x_reg_write(struct wm831x *wm831x, unsigned short reg, in wm831x_reg_write() argument
583 mutex_lock(&wm831x->io_lock); in wm831x_reg_write()
585 ret = wm831x_write(wm831x, reg, 2, &val); in wm831x_reg_write()
587 mutex_unlock(&wm831x->io_lock); in wm831x_reg_write()
601 int wm831x_set_bits(struct wm831x *wm831x, unsigned short reg, in wm831x_set_bits() argument
606 mutex_lock(&wm831x->io_lock); in wm831x_set_bits()
608 if (!wm831x_reg_locked(wm831x, reg)) in wm831x_set_bits()
609 ret = regmap_update_bits(wm831x->regmap, reg, mask, val); in wm831x_set_bits()
613 mutex_unlock(&wm831x->io_lock); in wm831x_set_bits()
1633 int wm831x_device_init(struct wm831x *wm831x, int irq) in wm831x_device_init() argument
1635 struct wm831x_pdata *pdata = &wm831x->pdata; in wm831x_device_init()
1640 mutex_init(&wm831x->io_lock); in wm831x_device_init()
1641 mutex_init(&wm831x->key_lock); in wm831x_device_init()
1642 dev_set_drvdata(wm831x->dev, wm831x); in wm831x_device_init()
1644 wm831x->soft_shutdown = pdata->soft_shutdown; in wm831x_device_init()
1646 ret = wm831x_reg_read(wm831x, WM831X_PARENT_ID); in wm831x_device_init()
1648 dev_err(wm831x->dev, "Failed to read parent ID: %d\n", ret); in wm831x_device_init()
1656 dev_err(wm831x->dev, "Device is not a WM831x: ID %x\n", ret); in wm831x_device_init()
1661 ret = wm831x_reg_read(wm831x, WM831X_REVISION); in wm831x_device_init()
1663 dev_err(wm831x->dev, "Failed to read revision: %d\n", ret); in wm831x_device_init()
1668 ret = wm831x_reg_read(wm831x, WM831X_RESET_ID); in wm831x_device_init()
1670 dev_err(wm831x->dev, "Failed to read device ID: %d\n", ret); in wm831x_device_init()
1678 dev_info(wm831x->dev, "Device is an engineering sample\n"); in wm831x_device_init()
1679 ret = wm831x->type; in wm831x_device_init()
1685 wm831x->num_gpio = 16; in wm831x_device_init()
1686 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1688 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1689 wm831x->has_cs_sts = 1; in wm831x_device_init()
1692 dev_info(wm831x->dev, "WM8310 revision %c\n", 'A' + rev); in wm831x_device_init()
1697 wm831x->num_gpio = 16; in wm831x_device_init()
1698 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1700 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1701 wm831x->has_cs_sts = 1; in wm831x_device_init()
1704 dev_info(wm831x->dev, "WM8311 revision %c\n", 'A' + rev); in wm831x_device_init()
1709 wm831x->num_gpio = 16; in wm831x_device_init()
1710 wm831x->charger_irq_wake = 1; in wm831x_device_init()
1712 wm831x->has_gpio_ena = 1; in wm831x_device_init()
1713 wm831x->has_cs_sts = 1; in wm831x_device_init()
1716 dev_info(wm831x->dev, "WM8312 revision %c\n", 'A' + rev); in wm831x_device_init()
1721 wm831x->num_gpio = 12; in wm831x_device_init()
1722 dev_info(wm831x->dev, "WM8320 revision %c\n", 'A' + rev); in wm831x_device_init()
1727 wm831x->num_gpio = 12; in wm831x_device_init()
1728 dev_info(wm831x->dev, "WM8321 revision %c\n", 'A' + rev); in wm831x_device_init()
1733 wm831x->num_gpio = 12; in wm831x_device_init()
1734 dev_info(wm831x->dev, "WM8325 revision %c\n", 'A' + rev); in wm831x_device_init()
1739 wm831x->num_gpio = 12; in wm831x_device_init()
1740 dev_info(wm831x->dev, "WM8326 revision %c\n", 'A' + rev); in wm831x_device_init()
1744 dev_err(wm831x->dev, "Unknown WM831x device %04x\n", ret); in wm831x_device_init()
1752 if (parent != wm831x->type) in wm831x_device_init()
1753 dev_warn(wm831x->dev, "Device was registered as a WM%x\n", in wm831x_device_init()
1754 wm831x->type); in wm831x_device_init()
1757 ret = wm831x_reg_read(wm831x, WM831X_SECURITY_KEY); in wm831x_device_init()
1759 dev_err(wm831x->dev, "Failed to read security key: %d\n", ret); in wm831x_device_init()
1763 dev_warn(wm831x->dev, "Security key had non-zero value %x\n", in wm831x_device_init()
1765 wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0); in wm831x_device_init()
1767 wm831x->locked = 1; in wm831x_device_init()
1770 ret = pdata->pre_init(wm831x); in wm831x_device_init()
1772 dev_err(wm831x->dev, "pre_init() failed: %d\n", ret); in wm831x_device_init()
1781 wm831x_reg_write(wm831x, in wm831x_device_init()
1792 ret = wm831x_irq_init(wm831x, irq); in wm831x_device_init()
1796 wm831x_auxadc_init(wm831x); in wm831x_device_init()
1801 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1807 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1811 mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1817 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1821 mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1830 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1841 dev_err(wm831x->dev, "Failed to add children\n"); in wm831x_device_init()
1848 ret = wm831x_reg_read(wm831x, WM831X_CLOCK_CONTROL_2); in wm831x_device_init()
1850 dev_err(wm831x->dev, "Failed to read clock status: %d\n", ret); in wm831x_device_init()
1855 ret = mfd_add_devices(wm831x->dev, wm831x_num, in wm831x_device_init()
1859 dev_err(wm831x->dev, "Failed to add RTC: %d\n", ret); in wm831x_device_init()
1863 dev_info(wm831x->dev, "32.768kHz clock disabled, no RTC\n"); in wm831x_device_init()
1868 ret = mfd_add_devices(wm831x->dev, wm831x_num, backlight_devs, in wm831x_device_init()
1872 dev_err(wm831x->dev, "Failed to add backlight: %d\n", in wm831x_device_init()
1876 wm831x_otp_init(wm831x); in wm831x_device_init()
1879 ret = pdata->post_init(wm831x); in wm831x_device_init()
1881 dev_err(wm831x->dev, "post_init() failed: %d\n", ret); in wm831x_device_init()
1889 wm831x_irq_exit(wm831x); in wm831x_device_init()
1891 mfd_remove_devices(wm831x->dev); in wm831x_device_init()
1895 int wm831x_device_suspend(struct wm831x *wm831x) in wm831x_device_suspend() argument
1904 if (wm831x->charger_irq_wake) { in wm831x_device_suspend()
1905 reg = wm831x_reg_read(wm831x, WM831X_INTERRUPT_STATUS_2_MASK); in wm831x_device_suspend()
1916 reg = wm831x_reg_read(wm831x, in wm831x_device_suspend()
1920 dev_info(wm831x->dev, in wm831x_device_suspend()
1923 wm831x_reg_write(wm831x, WM831X_INTERRUPT_STATUS_2, in wm831x_device_suspend()
1931 void wm831x_device_shutdown(struct wm831x *wm831x) in wm831x_device_shutdown() argument
1933 if (wm831x->soft_shutdown) { in wm831x_device_shutdown()
1934 dev_info(wm831x->dev, "Initiating shutdown...\n"); in wm831x_device_shutdown()
1935 wm831x_set_bits(wm831x, WM831X_POWER_STATE, WM831X_CHIP_ON, 0); in wm831x_device_shutdown()