• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/mfd/

Lines Matching refs:wm8994

2  * wm8994-core.c  --  Device access for Wolfson WM8994
24 #include <linux/mfd/wm8994/core.h>
25 #include <linux/mfd/wm8994/pdata.h>
26 #include <linux/mfd/wm8994/registers.h>
28 static int wm8994_read(struct wm8994 *wm8994, unsigned short reg,
37 ret = wm8994->read_dev(wm8994, reg, bytes, dest);
44 dev_vdbg(wm8994->dev, "Read %04x from R%d(0x%x)\n",
54 * @wm8994: Device to read from.
57 int wm8994_reg_read(struct wm8994 *wm8994, unsigned short reg)
62 mutex_lock(&wm8994->io_lock);
64 ret = wm8994_read(wm8994, reg, 2, &val);
66 mutex_unlock(&wm8994->io_lock);
78 * @wm8994: Device to read from
83 int wm8994_bulk_read(struct wm8994 *wm8994, unsigned short reg,
88 mutex_lock(&wm8994->io_lock);
90 ret = wm8994_read(wm8994, reg, count * 2, buf);
92 mutex_unlock(&wm8994->io_lock);
98 static int wm8994_write(struct wm8994 *wm8994, unsigned short reg,
108 dev_vdbg(wm8994->dev, "Write %04x to R%d(0x%x)\n",
114 return wm8994->write_dev(wm8994, reg, bytes, src);
120 * @wm8994: Device to write to.
124 int wm8994_reg_write(struct wm8994 *wm8994, unsigned short reg,
129 mutex_lock(&wm8994->io_lock);
131 ret = wm8994_write(wm8994, reg, 2, &val);
133 mutex_unlock(&wm8994->io_lock);
142 * @wm8994: Device to write to.
147 int wm8994_set_bits(struct wm8994 *wm8994, unsigned short reg,
153 mutex_lock(&wm8994->io_lock);
155 ret = wm8994_read(wm8994, reg, 2, &r);
162 ret = wm8994_write(wm8994, reg, 2, &r);
165 mutex_unlock(&wm8994->io_lock);
172 { .name = "wm8994-ldo", .id = 1 },
173 { .name = "wm8994-ldo", .id = 2 },
194 .name = "wm8994-codec",
200 .name = "wm8994-gpio",
224 struct wm8994 *wm8994 = dev_get_drvdata(dev);
231 ret = wm8994_read(wm8994, WM8994_GPIO_1, WM8994_NUM_GPIO_REGS * 2,
232 &wm8994->gpio_regs);
237 ret = wm8994_read(wm8994, WM8994_LDO_1, WM8994_NUM_LDO_REGS * 2,
238 &wm8994->ldo_regs);
243 wm8994->supplies);
254 struct wm8994 *wm8994 = dev_get_drvdata(dev);
258 wm8994->supplies);
264 ret = wm8994_write(wm8994, WM8994_INTERRUPT_STATUS_1_MASK,
265 WM8994_NUM_IRQ_REGS * 2, &wm8994->irq_masks_cur);
269 ret = wm8994_write(wm8994, WM8994_LDO_1, WM8994_NUM_LDO_REGS * 2,
270 &wm8994->ldo_regs);
274 ret = wm8994_write(wm8994, WM8994_GPIO_1, WM8994_NUM_GPIO_REGS * 2,
275 &wm8994->gpio_regs);
308 static int wm8994_device_init(struct wm8994 *wm8994, unsigned long id, int irq)
310 struct wm8994_pdata *pdata = wm8994->dev->platform_data;
313 mutex_init(&wm8994->io_lock);
314 dev_set_drvdata(wm8994->dev, wm8994);
317 ret = mfd_add_devices(wm8994->dev, -1,
322 dev_err(wm8994->dev, "Failed to add children: %d\n", ret);
326 wm8994->supplies = kzalloc(sizeof(struct regulator_bulk_data) *
329 if (!wm8994->supplies) {
335 wm8994->supplies[i].supply = wm8994_main_supplies[i];
337 ret = regulator_bulk_get(wm8994->dev, ARRAY_SIZE(wm8994_main_supplies),
338 wm8994->supplies);
340 dev_err(wm8994->dev, "Failed to get supplies: %d\n", ret);
345 wm8994->supplies);
347 dev_err(wm8994->dev, "Failed to enable supplies: %d\n", ret);
351 ret = wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET);
353 dev_err(wm8994->dev, "Failed to read ID register\n");
357 dev_err(wm8994->dev, "Device is not a WM8994, ID is %x\n",
363 ret = wm8994_reg_read(wm8994, WM8994_CHIP_REVISION);
365 dev_err(wm8994->dev, "Failed to read revision register: %d\n",
373 dev_warn(wm8994->dev, "revision %c not fully supported\n",
377 dev_info(wm8994->dev, "revision %c\n", 'A' + ret);
383 wm8994->irq_base = pdata->irq_base;
384 wm8994->gpio_base = pdata->gpio_base;
389 wm8994_set_bits(wm8994, WM8994_GPIO_1 + i,
404 wm8994_set_bits(wm8994, WM8994_LDO_1 + i,
407 wm8994_set_bits(wm8994, WM8994_LDO_1 + i,
411 wm8994_irq_init(wm8994);
413 ret = mfd_add_devices(wm8994->dev, -1,
417 dev_err(wm8994->dev, "Failed to add children: %d\n", ret);
424 wm8994_irq_exit(wm8994);
427 wm8994->supplies);
429 regulator_bulk_free(ARRAY_SIZE(wm8994_main_supplies), wm8994->supplies);
431 kfree(wm8994->supplies);
433 mfd_remove_devices(wm8994->dev);
434 kfree(wm8994);
438 static void wm8994_device_exit(struct wm8994 *wm8994)
440 mfd_remove_devices(wm8994->dev);
441 wm8994_irq_exit(wm8994);
443 wm8994->supplies);
444 regulator_bulk_free(ARRAY_SIZE(wm8994_main_supplies), wm8994->supplies);
445 kfree(wm8994->supplies);
446 kfree(wm8994);
449 static int wm8994_i2c_read_device(struct wm8994 *wm8994, unsigned short reg,
452 struct i2c_client *i2c = wm8994->control_data;
474 static int wm8994_i2c_write_device(struct wm8994 *wm8994, unsigned short reg,
477 struct i2c_client *i2c = wm8994->control_data;
497 struct wm8994 *wm8994;
499 wm8994 = kzalloc(sizeof(struct wm8994), GFP_KERNEL);
500 if (wm8994 == NULL)
503 i2c_set_clientdata(i2c, wm8994);
504 wm8994->dev = &i2c->dev;
505 wm8994->control_data = i2c;
506 wm8994->read_dev = wm8994_i2c_read_device;
507 wm8994->write_dev = wm8994_i2c_write_device;
508 wm8994->irq = i2c->irq;
510 return wm8994_device_init(wm8994, id->driver_data, i2c->irq);
515 struct wm8994 *wm8994 = i2c_get_clientdata(i2c);
517 wm8994_device_exit(wm8994);
538 { "wm8994", 0 },
545 .name = "wm8994",
561 pr_err("Failed to register wm8994 I2C driver: %d\n", ret);