Lines Matching refs:wm831x

3  * wm831x-core.c  --  Device access for Wolfson WM831x PMICs
20 #include <linux/mfd/wm831x/core.h>
21 #include <linux/mfd/wm831x/pdata.h>
22 #include <linux/mfd/wm831x/irq.h>
23 #include <linux/mfd/wm831x/auxadc.h>
24 #include <linux/mfd/wm831x/otp.h>
25 #include <linux/mfd/wm831x/pmu.h>
26 #include <linux/mfd/wm831x/regulator.h>
91 static int wm831x_reg_locked(struct wm831x *wm831x, unsigned short reg)
93 if (!wm831x->locked)
117 * @wm831x: pointer to local driver data structure
119 void wm831x_reg_lock(struct wm831x *wm831x)
123 ret = wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0);
125 dev_vdbg(wm831x->dev, "Registers locked\n");
127 mutex_lock(&wm831x->io_lock);
128 WARN_ON(wm831x->locked);
129 wm831x->locked = 1;
130 mutex_unlock(&wm831x->io_lock);
132 dev_err(wm831x->dev, "Failed to lock registers: %d\n", ret);
145 * @wm831x: pointer to local driver data structure
147 int wm831x_reg_unlock(struct wm831x *wm831x)
152 ret = wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0x9716);
154 dev_vdbg(wm831x->dev, "Registers unlocked\n");
156 mutex_lock(&wm831x->io_lock);
157 WARN_ON(!wm831x->locked);
158 wm831x->locked = 0;
159 mutex_unlock(&wm831x->io_lock);
347 struct wm831x *wm831x = dev_get_drvdata(dev);
349 if (wm831x_reg_locked(wm831x, reg))
515 * @wm831x: Device to read from.
518 int wm831x_reg_read(struct wm831x *wm831x, unsigned short reg)
523 ret = regmap_read(wm831x->regmap, reg, &val);
535 * @wm831x: Device to read from
540 int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg,
543 return regmap_bulk_read(wm831x->regmap, reg, buf, count);
547 static int wm831x_write(struct wm831x *wm831x, unsigned short reg,
557 if (wm831x_reg_locked(wm831x, reg))
560 dev_vdbg(wm831x->dev, "Write %04x to R%d(0x%x)\n",
562 ret = regmap_write(wm831x->regmap, reg + i, buf[i]);
573 * @wm831x: Device to write to.
577 int wm831x_reg_write(struct wm831x *wm831x, unsigned short reg,
582 mutex_lock(&wm831x->io_lock);
584 ret = wm831x_write(wm831x, reg, 2, &val);
586 mutex_unlock(&wm831x->io_lock);
595 * @wm831x: Device to write to.
600 int wm831x_set_bits(struct wm831x *wm831x, unsigned short reg,
605 mutex_lock(&wm831x->io_lock);
607 if (!wm831x_reg_locked(wm831x, reg))
608 ret = regmap_update_bits(wm831x->regmap, reg, mask, val);
612 mutex_unlock(&wm831x->io_lock);
841 .name = "wm831x-backup",
844 .name = "wm831x-buckv",
850 .name = "wm831x-buckv",
856 .name = "wm831x-buckp",
862 .name = "wm831x-boostp",
868 .name = "wm831x-clk",
871 .name = "wm831x-epe",
875 .name = "wm831x-epe",
879 .name = "wm831x-gpio",
884 .name = "wm831x-hwmon",
887 .name = "wm831x-isink",
893 .name = "wm831x-isink",
899 .name = "wm831x-ldo",
905 .name = "wm831x-ldo",
911 .name = "wm831x-ldo",
917 .name = "wm831x-ldo",
923 .name = "wm831x-ldo",
929 .name = "wm831x-ldo",
935 .name = "wm831x-aldo",
941 .name = "wm831x-aldo",
947 .name = "wm831x-aldo",
953 .name = "wm831x-aldo",
959 .name = "wm831x-alive-ldo",
965 .name = "wm831x-on",
970 .name = "wm831x-power",
975 .name = "wm831x-status",
981 .name = "wm831x-status",
987 .name = "wm831x-watchdog",
995 .name = "wm831x-backup",
998 .name = "wm831x-buckv",
1004 .name = "wm831x-buckv",
1010 .name = "wm831x-buckp",
1016 .name = "wm831x-boostp",
1022 .name = "wm831x-clk",
1025 .name = "wm831x-epe",
1029 .name = "wm831x-epe",
1033 .name = "wm831x-gpio",
1038 .name = "wm831x-hwmon",
1041 .name = "wm831x-isink",
1047 .name = "wm831x-isink",
1053 .name = "wm831x-ldo",
1059 .name = "wm831x-ldo",
1065 .name = "wm831x-ldo",
1071 .name = "wm831x-ldo",
1077 .name = "wm831x-ldo",
1083 .name = "wm831x-aldo",
1089 .name = "wm831x-alive-ldo",
1095 .name = "wm831x-on",
1100 .name = "wm831x-power",
1105 .name = "wm831x-status",
1111 .name = "wm831x-status",
1117 .name = "wm831x-watchdog",
1125 .name = "wm831x-backup",
1128 .name = "wm831x-buckv",
1134 .name = "wm831x-buckv",
1140 .name = "wm831x-buckp",
1146 .name = "wm831x-boostp",
1152 .name = "wm831x-clk",
1155 .name = "wm831x-epe",
1159 .name = "wm831x-epe",
1163 .name = "wm831x-gpio",
1168 .name = "wm831x-hwmon",
1171 .name = "wm831x-isink",
1177 .name = "wm831x-isink",
1183 .name = "wm831x-ldo",
1189 .name = "wm831x-ldo",
1195 .name = "wm831x-ldo",
1201 .name = "wm831x-ldo",
1207 .name = "wm831x-ldo",
1213 .name = "wm831x-ldo",
1219 .name = "wm831x-aldo",
1225 .name = "wm831x-aldo",
1231 .name = "wm831x-aldo",
1237 .name = "wm831x-aldo",
1243 .name = "wm831x-alive-ldo",
1249 .name = "wm831x-on",
1254 .name = "wm831x-power",
1259 .name = "wm831x-status",
1265 .name = "wm831x-status",
1271 .name = "wm831x-watchdog",
1279 .name = "wm831x-backup",
1282 .name = "wm831x-buckv",
1288 .name = "wm831x-buckv",
1294 .name = "wm831x-buckp",
1300 .name = "wm831x-buckp",
1306 .name = "wm831x-clk",
1309 .name = "wm831x-gpio",
1314 .name = "wm831x-hwmon",
1317 .name = "wm831x-ldo",
1323 .name = "wm831x-ldo",
1329 .name = "wm831x-ldo",
1335 .name = "wm831x-ldo",
1341 .name = "wm831x-ldo",
1347 .name = "wm831x-ldo",
1353 .name = "wm831x-aldo",
1359 .name = "wm831x-aldo",
1365 .name = "wm831x-aldo",
1371 .name = "wm831x-aldo",
1377 .name = "wm831x-alive-ldo",
1383 .name = "wm831x-on",
1388 .name = "wm831x-status",
1394 .name = "wm831x-status",
1400 .name = "wm831x-watchdog",
1408 .name = "wm831x-touch",
1416 .name = "wm831x-rtc",
1424 .name = "wm831x-backlight",
1456 int wm831x_device_init(struct wm831x *wm831x, int irq)
1458 struct wm831x_pdata *pdata = &wm831x->pdata;
1463 mutex_init(&wm831x->io_lock);
1464 mutex_init(&wm831x->key_lock);
1465 dev_set_drvdata(wm831x->dev, wm831x);
1467 wm831x->soft_shutdown = pdata->soft_shutdown;
1469 ret = wm831x_reg_read(wm831x, WM831X_PARENT_ID);
1471 dev_err(wm831x->dev, "Failed to read parent ID: %d\n", ret);
1479 dev_err(wm831x->dev, "Device is not a WM831x: ID %x\n", ret);
1484 ret = wm831x_reg_read(wm831x, WM831X_REVISION);
1486 dev_err(wm831x->dev, "Failed to read revision: %d\n", ret);
1491 ret = wm831x_reg_read(wm831x, WM831X_RESET_ID);
1493 dev_err(wm831x->dev, "Failed to read device ID: %d\n", ret);
1501 dev_info(wm831x->dev, "Device is an engineering sample\n");
1502 ret = wm831x->type;
1508 wm831x->num_gpio = 16;
1509 wm831x->charger_irq_wake = 1;
1511 wm831x->has_gpio_ena = 1;
1512 wm831x->has_cs_sts = 1;
1515 dev_info(wm831x->dev, "WM8310 revision %c\n", 'A' + rev);
1520 wm831x->num_gpio = 16;
1521 wm831x->charger_irq_wake = 1;
1523 wm831x->has_gpio_ena = 1;
1524 wm831x->has_cs_sts = 1;
1527 dev_info(wm831x->dev, "WM8311 revision %c\n", 'A' + rev);
1532 wm831x->num_gpio = 16;
1533 wm831x->charger_irq_wake = 1;
1535 wm831x->has_gpio_ena = 1;
1536 wm831x->has_cs_sts = 1;
1539 dev_info(wm831x->dev, "WM8312 revision %c\n", 'A' + rev);
1544 wm831x->num_gpio = 12;
1545 dev_info(wm831x->dev, "WM8320 revision %c\n", 'A' + rev);
1550 wm831x->num_gpio = 12;
1551 dev_info(wm831x->dev, "WM8321 revision %c\n", 'A' + rev);
1556 wm831x->num_gpio = 12;
1557 dev_info(wm831x->dev, "WM8325 revision %c\n", 'A' + rev);
1562 wm831x->num_gpio = 12;
1563 dev_info(wm831x->dev, "WM8326 revision %c\n", 'A' + rev);
1567 dev_err(wm831x->dev, "Unknown WM831x device %04x\n", ret);
1575 if (parent != wm831x->type)
1576 dev_warn(wm831x->dev, "Device was registered as a WM%x\n",
1577 wm831x->type);
1580 ret = wm831x_reg_read(wm831x, WM831X_SECURITY_KEY);
1582 dev_err(wm831x->dev, "Failed to read security key: %d\n", ret);
1586 dev_warn(wm831x->dev, "Security key had non-zero value %x\n",
1588 wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0);
1590 wm831x->locked = 1;
1593 ret = pdata->pre_init(wm831x);
1595 dev_err(wm831x->dev, "pre_init() failed: %d\n", ret);
1604 wm831x_reg_write(wm831x,
1615 ret = wm831x_irq_init(wm831x, irq);
1619 wm831x_auxadc_init(wm831x);
1624 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1630 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1634 mfd_add_devices(wm831x->dev, wm831x_num,
1640 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1644 mfd_add_devices(wm831x->dev, wm831x_num,
1653 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1664 dev_err(wm831x->dev, "Failed to add children\n");
1671 ret = wm831x_reg_read(wm831x, WM831X_CLOCK_CONTROL_2);
1673 dev_err(wm831x->dev, "Failed to read clock status: %d\n", ret);
1678 ret = mfd_add_devices(wm831x->dev, wm831x_num,
1682 dev_err(wm831x->dev, "Failed to add RTC: %d\n", ret);
1686 dev_info(wm831x->dev, "32.768kHz clock disabled, no RTC\n");
1691 ret = mfd_add_devices(wm831x->dev, wm831x_num, backlight_devs,
1695 dev_err(wm831x->dev, "Failed to add backlight: %d\n",
1699 wm831x_otp_init(wm831x);
1702 ret = pdata->post_init(wm831x);
1704 dev_err(wm831x->dev, "post_init() failed: %d\n", ret);
1712 wm831x_irq_exit(wm831x);
1714 mfd_remove_devices(wm831x->dev);
1718 int wm831x_device_suspend(struct wm831x *wm831x)
1727 if (wm831x->charger_irq_wake) {
1728 reg = wm831x_reg_read(wm831x, WM831X_INTERRUPT_STATUS_2_MASK);
1739 reg = wm831x_reg_read(wm831x,
1743 dev_info(wm831x->dev,
1746 wm831x_reg_write(wm831x, WM831X_INTERRUPT_STATUS_2,
1754 void wm831x_device_shutdown(struct wm831x *wm831x)
1756 if (wm831x->soft_shutdown) {
1757 dev_info(wm831x->dev, "Initiating shutdown...\n");
1758 wm831x_set_bits(wm831x, WM831X_POWER_STATE, WM831X_CHIP_ON, 0);