Lines Matching refs:wm831x

3  * wm831x-core.c  --  Device access for Wolfson WM831x PMICs
21 #include <linux/mfd/wm831x/core.h>
22 #include <linux/mfd/wm831x/pdata.h>
23 #include <linux/mfd/wm831x/irq.h>
24 #include <linux/mfd/wm831x/auxadc.h>
25 #include <linux/mfd/wm831x/otp.h>
26 #include <linux/mfd/wm831x/pmu.h>
27 #include <linux/mfd/wm831x/regulator.h>
92 static int wm831x_reg_locked(struct wm831x *wm831x, unsigned short reg)
94 if (!wm831x->locked)
118 * @wm831x: pointer to local driver data structure
120 void wm831x_reg_lock(struct wm831x *wm831x)
124 ret = wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0);
126 dev_vdbg(wm831x->dev, "Registers locked\n");
128 mutex_lock(&wm831x->io_lock);
129 WARN_ON(wm831x->locked);
130 wm831x->locked = 1;
131 mutex_unlock(&wm831x->io_lock);
133 dev_err(wm831x->dev, "Failed to lock registers: %d\n", ret);
146 * @wm831x: pointer to local driver data structure
148 int wm831x_reg_unlock(struct wm831x *wm831x)
153 ret = wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0x9716);
155 dev_vdbg(wm831x->dev, "Registers unlocked\n");
157 mutex_lock(&wm831x->io_lock);
158 WARN_ON(!wm831x->locked);
159 wm831x->locked = 0;
160 mutex_unlock(&wm831x->io_lock);
348 struct wm831x *wm831x = dev_get_drvdata(dev);
350 if (wm831x_reg_locked(wm831x, reg))
516 * @wm831x: Device to read from.
519 int wm831x_reg_read(struct wm831x *wm831x, unsigned short reg)
524 ret = regmap_read(wm831x->regmap, reg, &val);
536 * @wm831x: Device to read from
541 int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg,
544 return regmap_bulk_read(wm831x->regmap, reg, buf, count);
548 static int wm831x_write(struct wm831x *wm831x, unsigned short reg,
558 if (wm831x_reg_locked(wm831x, reg))
561 dev_vdbg(wm831x->dev, "Write %04x to R%d(0x%x)\n",
563 ret = regmap_write(wm831x->regmap, reg + i, buf[i]);
574 * @wm831x: Device to write to.
578 int wm831x_reg_write(struct wm831x *wm831x, unsigned short reg,
583 mutex_lock(&wm831x->io_lock);
585 ret = wm831x_write(wm831x, reg, 2, &val);
587 mutex_unlock(&wm831x->io_lock);
596 * @wm831x: Device to write to.
601 int wm831x_set_bits(struct wm831x *wm831x, unsigned short reg,
606 mutex_lock(&wm831x->io_lock);
608 if (!wm831x_reg_locked(wm831x, reg))
609 ret = regmap_update_bits(wm831x->regmap, reg, mask, val);
613 mutex_unlock(&wm831x->io_lock);
1018 .name = "wm831x-backup",
1021 .name = "wm831x-buckv",
1027 .name = "wm831x-buckv",
1033 .name = "wm831x-buckp",
1039 .name = "wm831x-boostp",
1045 .name = "wm831x-clk",
1048 .name = "wm831x-epe",
1052 .name = "wm831x-epe",
1056 .name = "wm831x-gpio",
1061 .name = "wm831x-hwmon",
1064 .name = "wm831x-isink",
1070 .name = "wm831x-isink",
1076 .name = "wm831x-ldo",
1082 .name = "wm831x-ldo",
1088 .name = "wm831x-ldo",
1094 .name = "wm831x-ldo",
1100 .name = "wm831x-ldo",
1106 .name = "wm831x-ldo",
1112 .name = "wm831x-aldo",
1118 .name = "wm831x-aldo",
1124 .name = "wm831x-aldo",
1130 .name = "wm831x-aldo",
1136 .name = "wm831x-alive-ldo",
1142 .name = "wm831x-on",
1147 .name = "wm831x-power",
1152 .name = "wm831x-status",
1158 .name = "wm831x-status",
1164 .name = "wm831x-watchdog",
1172 .name = "wm831x-backup",
1175 .name = "wm831x-buckv",
1181 .name = "wm831x-buckv",
1187 .name = "wm831x-buckp",
1193 .name = "wm831x-boostp",
1199 .name = "wm831x-clk",
1202 .name = "wm831x-epe",
1206 .name = "wm831x-epe",
1210 .name = "wm831x-gpio",
1215 .name = "wm831x-hwmon",
1218 .name = "wm831x-isink",
1224 .name = "wm831x-isink",
1230 .name = "wm831x-ldo",
1236 .name = "wm831x-ldo",
1242 .name = "wm831x-ldo",
1248 .name = "wm831x-ldo",
1254 .name = "wm831x-ldo",
1260 .name = "wm831x-aldo",
1266 .name = "wm831x-alive-ldo",
1272 .name = "wm831x-on",
1277 .name = "wm831x-power",
1282 .name = "wm831x-status",
1288 .name = "wm831x-status",
1294 .name = "wm831x-watchdog",
1302 .name = "wm831x-backup",
1305 .name = "wm831x-buckv",
1311 .name = "wm831x-buckv",
1317 .name = "wm831x-buckp",
1323 .name = "wm831x-boostp",
1329 .name = "wm831x-clk",
1332 .name = "wm831x-epe",
1336 .name = "wm831x-epe",
1340 .name = "wm831x-gpio",
1345 .name = "wm831x-hwmon",
1348 .name = "wm831x-isink",
1354 .name = "wm831x-isink",
1360 .name = "wm831x-ldo",
1366 .name = "wm831x-ldo",
1372 .name = "wm831x-ldo",
1378 .name = "wm831x-ldo",
1384 .name = "wm831x-ldo",
1390 .name = "wm831x-ldo",
1396 .name = "wm831x-aldo",
1402 .name = "wm831x-aldo",
1408 .name = "wm831x-aldo",
1414 .name = "wm831x-aldo",
1420 .name = "wm831x-alive-ldo",
1426 .name = "wm831x-on",
1431 .name = "wm831x-power",
1436 .name = "wm831x-status",
1442 .name = "wm831x-status",
1448 .name = "wm831x-watchdog",
1456 .name = "wm831x-backup",
1459 .name = "wm831x-buckv",
1465 .name = "wm831x-buckv",
1471 .name = "wm831x-buckp",
1477 .name = "wm831x-buckp",
1483 .name = "wm831x-clk",
1486 .name = "wm831x-gpio",
1491 .name = "wm831x-hwmon",
1494 .name = "wm831x-ldo",
1500 .name = "wm831x-ldo",
1506 .name = "wm831x-ldo",
1512 .name = "wm831x-ldo",
1518 .name = "wm831x-ldo",
1524 .name = "wm831x-ldo",
1530 .name = "wm831x-aldo",
1536 .name = "wm831x-aldo",
1542 .name = "wm831x-aldo",
1548 .name = "wm831x-aldo",
1554 .name = "wm831x-alive-ldo",
1560 .name = "wm831x-on",
1565 .name = "wm831x-status",
1571 .name = "wm831x-status",
1577 .name = "wm831x-watchdog",
1585 .name = "wm831x-touch",
1593 .name = "wm831x-rtc",
1601 .name = "wm831x-backlight",
1633 int wm831x_device_init(struct wm831x *wm831x, int irq)
1635 struct wm831x_pdata *pdata = &wm831x->pdata;
1640 mutex_init(&wm831x->io_lock);
1641 mutex_init(&wm831x->key_lock);
1642 dev_set_drvdata(wm831x->dev, wm831x);
1644 wm831x->soft_shutdown = pdata->soft_shutdown;
1646 ret = wm831x_reg_read(wm831x, WM831X_PARENT_ID);
1648 dev_err(wm831x->dev, "Failed to read parent ID: %d\n", ret);
1656 dev_err(wm831x->dev, "Device is not a WM831x: ID %x\n", ret);
1661 ret = wm831x_reg_read(wm831x, WM831X_REVISION);
1663 dev_err(wm831x->dev, "Failed to read revision: %d\n", ret);
1668 ret = wm831x_reg_read(wm831x, WM831X_RESET_ID);
1670 dev_err(wm831x->dev, "Failed to read device ID: %d\n", ret);
1678 dev_info(wm831x->dev, "Device is an engineering sample\n");
1679 ret = wm831x->type;
1685 wm831x->num_gpio = 16;
1686 wm831x->charger_irq_wake = 1;
1688 wm831x->has_gpio_ena = 1;
1689 wm831x->has_cs_sts = 1;
1692 dev_info(wm831x->dev, "WM8310 revision %c\n", 'A' + rev);
1697 wm831x->num_gpio = 16;
1698 wm831x->charger_irq_wake = 1;
1700 wm831x->has_gpio_ena = 1;
1701 wm831x->has_cs_sts = 1;
1704 dev_info(wm831x->dev, "WM8311 revision %c\n", 'A' + rev);
1709 wm831x->num_gpio = 16;
1710 wm831x->charger_irq_wake = 1;
1712 wm831x->has_gpio_ena = 1;
1713 wm831x->has_cs_sts = 1;
1716 dev_info(wm831x->dev, "WM8312 revision %c\n", 'A' + rev);
1721 wm831x->num_gpio = 12;
1722 dev_info(wm831x->dev, "WM8320 revision %c\n", 'A' + rev);
1727 wm831x->num_gpio = 12;
1728 dev_info(wm831x->dev, "WM8321 revision %c\n", 'A' + rev);
1733 wm831x->num_gpio = 12;
1734 dev_info(wm831x->dev, "WM8325 revision %c\n", 'A' + rev);
1739 wm831x->num_gpio = 12;
1740 dev_info(wm831x->dev, "WM8326 revision %c\n", 'A' + rev);
1744 dev_err(wm831x->dev, "Unknown WM831x device %04x\n", ret);
1752 if (parent != wm831x->type)
1753 dev_warn(wm831x->dev, "Device was registered as a WM%x\n",
1754 wm831x->type);
1757 ret = wm831x_reg_read(wm831x, WM831X_SECURITY_KEY);
1759 dev_err(wm831x->dev, "Failed to read security key: %d\n", ret);
1763 dev_warn(wm831x->dev, "Security key had non-zero value %x\n",
1765 wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0);
1767 wm831x->locked = 1;
1770 ret = pdata->pre_init(wm831x);
1772 dev_err(wm831x->dev, "pre_init() failed: %d\n", ret);
1781 wm831x_reg_write(wm831x,
1792 ret = wm831x_irq_init(wm831x, irq);
1796 wm831x_auxadc_init(wm831x);
1801 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1807 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1811 mfd_add_devices(wm831x->dev, wm831x_num,
1817 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1821 mfd_add_devices(wm831x->dev, wm831x_num,
1830 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1841 dev_err(wm831x->dev, "Failed to add children\n");
1848 ret = wm831x_reg_read(wm831x, WM831X_CLOCK_CONTROL_2);
1850 dev_err(wm831x->dev, "Failed to read clock status: %d\n", ret);
1855 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1859 dev_err(wm831x->dev, "Failed to add RTC: %d\n", ret);
1863 dev_info(wm831x->dev, "32.768kHz clock disabled, no RTC\n");
1868 ret = mfd_add_devices(wm831x->dev, wm831x_num, backlight_devs,
1872 dev_err(wm831x->dev, "Failed to add backlight: %d\n",
1876 wm831x_otp_init(wm831x);
1879 ret = pdata->post_init(wm831x);
1881 dev_err(wm831x->dev, "post_init() failed: %d\n", ret);
1889 wm831x_irq_exit(wm831x);
1891 mfd_remove_devices(wm831x->dev);
1895 int wm831x_device_suspend(struct wm831x *wm831x)
1904 if (wm831x->charger_irq_wake) {
1905 reg = wm831x_reg_read(wm831x, WM831X_INTERRUPT_STATUS_2_MASK);
1916 reg = wm831x_reg_read(wm831x,
1920 dev_info(wm831x->dev,
1923 wm831x_reg_write(wm831x, WM831X_INTERRUPT_STATUS_2,
1931 void wm831x_device_shutdown(struct wm831x *wm831x)
1933 if (wm831x->soft_shutdown) {
1934 dev_info(wm831x->dev, "Initiating shutdown...\n");
1935 wm831x_set_bits(wm831x, WM831X_POWER_STATE, WM831X_CHIP_ON, 0);