mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
mfd: Add support for WM8320 PMICs
The WM8320 is an integrated power management subsystem providing voltage regulators, RTC, watchdog and other functionality. The WM8320 is derived from the WM831x and therefore shares most of the driver code with the WM831x. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
@@ -93,6 +93,7 @@ enum wm831x_parent {
|
||||
WM8310 = 0x8310,
|
||||
WM8311 = 0x8311,
|
||||
WM8312 = 0x8312,
|
||||
WM8320 = 0x8320,
|
||||
};
|
||||
|
||||
static int wm831x_reg_locked(struct wm831x *wm831x, unsigned short reg)
|
||||
@@ -478,6 +479,20 @@ static struct resource wm831x_dcdc4_resources[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource wm8320_dcdc4_buck_resources[] = {
|
||||
{
|
||||
.start = WM831X_DC4_CONTROL,
|
||||
.end = WM832X_DC4_SLEEP_CONTROL,
|
||||
.flags = IORESOURCE_IO,
|
||||
},
|
||||
{
|
||||
.name = "UV",
|
||||
.start = WM831X_IRQ_UV_DC4,
|
||||
.end = WM831X_IRQ_UV_DC4,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource wm831x_gpio_resources[] = {
|
||||
{
|
||||
.start = WM831X_IRQ_GPIO_1,
|
||||
@@ -1237,6 +1252,137 @@ static struct mfd_cell wm8312_devs[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct mfd_cell wm8320_devs[] = {
|
||||
{
|
||||
.name = "wm831x-backup",
|
||||
},
|
||||
{
|
||||
.name = "wm831x-buckv",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(wm831x_dcdc1_resources),
|
||||
.resources = wm831x_dcdc1_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-buckv",
|
||||
.id = 2,
|
||||
.num_resources = ARRAY_SIZE(wm831x_dcdc2_resources),
|
||||
.resources = wm831x_dcdc2_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-buckp",
|
||||
.id = 3,
|
||||
.num_resources = ARRAY_SIZE(wm831x_dcdc3_resources),
|
||||
.resources = wm831x_dcdc3_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-buckp",
|
||||
.id = 4,
|
||||
.num_resources = ARRAY_SIZE(wm8320_dcdc4_buck_resources),
|
||||
.resources = wm8320_dcdc4_buck_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-gpio",
|
||||
.num_resources = ARRAY_SIZE(wm831x_gpio_resources),
|
||||
.resources = wm831x_gpio_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-hwmon",
|
||||
},
|
||||
{
|
||||
.name = "wm831x-ldo",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo1_resources),
|
||||
.resources = wm831x_ldo1_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-ldo",
|
||||
.id = 2,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo2_resources),
|
||||
.resources = wm831x_ldo2_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-ldo",
|
||||
.id = 3,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo3_resources),
|
||||
.resources = wm831x_ldo3_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-ldo",
|
||||
.id = 4,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo4_resources),
|
||||
.resources = wm831x_ldo4_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-ldo",
|
||||
.id = 5,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo5_resources),
|
||||
.resources = wm831x_ldo5_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-ldo",
|
||||
.id = 6,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo6_resources),
|
||||
.resources = wm831x_ldo6_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-aldo",
|
||||
.id = 7,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo7_resources),
|
||||
.resources = wm831x_ldo7_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-aldo",
|
||||
.id = 8,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo8_resources),
|
||||
.resources = wm831x_ldo8_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-aldo",
|
||||
.id = 9,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo9_resources),
|
||||
.resources = wm831x_ldo9_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-aldo",
|
||||
.id = 10,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo10_resources),
|
||||
.resources = wm831x_ldo10_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-alive-ldo",
|
||||
.id = 11,
|
||||
.num_resources = ARRAY_SIZE(wm831x_ldo11_resources),
|
||||
.resources = wm831x_ldo11_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-on",
|
||||
.num_resources = ARRAY_SIZE(wm831x_on_resources),
|
||||
.resources = wm831x_on_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-rtc",
|
||||
.num_resources = ARRAY_SIZE(wm831x_rtc_resources),
|
||||
.resources = wm831x_rtc_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-status",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(wm831x_status1_resources),
|
||||
.resources = wm831x_status1_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-status",
|
||||
.id = 2,
|
||||
.num_resources = ARRAY_SIZE(wm831x_status2_resources),
|
||||
.resources = wm831x_status2_resources,
|
||||
},
|
||||
{
|
||||
.name = "wm831x-watchdog",
|
||||
.num_resources = ARRAY_SIZE(wm831x_wdt_resources),
|
||||
.resources = wm831x_wdt_resources,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mfd_cell backlight_devs[] = {
|
||||
{
|
||||
.name = "wm831x-backlight",
|
||||
@@ -1309,6 +1455,12 @@ static int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq)
|
||||
dev_info(wm831x->dev, "WM8312 revision %c\n", 'A' + rev);
|
||||
break;
|
||||
|
||||
case WM8320:
|
||||
parent = WM8320;
|
||||
wm831x->num_gpio = 12;
|
||||
dev_info(wm831x->dev, "WM8320 revision %c\n", 'A' + rev);
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(wm831x->dev, "Unknown WM831x device %04x\n", ret);
|
||||
ret = -EINVAL;
|
||||
@@ -1367,6 +1519,12 @@ static int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq)
|
||||
NULL, 0);
|
||||
break;
|
||||
|
||||
case WM8320:
|
||||
ret = mfd_add_devices(wm831x->dev, -1,
|
||||
wm8320_devs, ARRAY_SIZE(wm8320_devs),
|
||||
NULL, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* If this happens the bus probe function is buggy */
|
||||
BUG();
|
||||
@@ -1492,6 +1650,7 @@ static const struct i2c_device_id wm831x_i2c_id[] = {
|
||||
{ "wm8310", WM8310 },
|
||||
{ "wm8311", WM8311 },
|
||||
{ "wm8312", WM8312 },
|
||||
{ "wm8320", WM8320 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, wm831x_i2c_id);
|
||||
|
||||
Reference in New Issue
Block a user