Commit 44f72e53 authored by Virupax Sadashivpetimath's avatar Virupax Sadashivpetimath Committed by Samuel Ortiz

mfd: Add new resources on ab8500 AB8505 and AB9540

The AB8505 and AB9540 has extended support for micro USB
resistance detection, used for detecting chargers. Let's
register resources for this resource. Let's also split off the
separate codec device for AB9540.
Signed-off-by: default avatarVirupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent df3df646
...@@ -744,6 +744,39 @@ static struct resource __devinitdata ab8500_usb_resources[] = { ...@@ -744,6 +744,39 @@ static struct resource __devinitdata ab8500_usb_resources[] = {
}, },
}; };
static struct resource __devinitdata ab8505_iddet_resources[] = {
{
.name = "KeyDeglitch",
.start = AB8505_INT_KEYDEGLITCH,
.end = AB8505_INT_KEYDEGLITCH,
.flags = IORESOURCE_IRQ,
},
{
.name = "KP",
.start = AB8505_INT_KP,
.end = AB8505_INT_KP,
.flags = IORESOURCE_IRQ,
},
{
.name = "IKP",
.start = AB8505_INT_IKP,
.end = AB8505_INT_IKP,
.flags = IORESOURCE_IRQ,
},
{
.name = "IKR",
.start = AB8505_INT_IKR,
.end = AB8505_INT_IKR,
.flags = IORESOURCE_IRQ,
},
{
.name = "KeyStuck",
.start = AB8505_INT_KEYSTUCK,
.end = AB8505_INT_KEYSTUCK,
.flags = IORESOURCE_IRQ,
},
};
static struct resource __devinitdata ab8500_temp_resources[] = { static struct resource __devinitdata ab8500_temp_resources[] = {
{ {
.name = "AB8500_TEMP_WARM", .name = "AB8500_TEMP_WARM",
...@@ -802,10 +835,6 @@ static struct mfd_cell __devinitdata abx500_common_devs[] = { ...@@ -802,10 +835,6 @@ static struct mfd_cell __devinitdata abx500_common_devs[] = {
.num_resources = ARRAY_SIZE(ab8500_av_acc_detect_resources), .num_resources = ARRAY_SIZE(ab8500_av_acc_detect_resources),
.resources = ab8500_av_acc_detect_resources, .resources = ab8500_av_acc_detect_resources,
}, },
{
.name = "ab8500-codec",
},
{ {
.name = "ab8500-poweron-key", .name = "ab8500-poweron-key",
.num_resources = ARRAY_SIZE(ab8500_poweronkey_db_resources), .num_resources = ARRAY_SIZE(ab8500_poweronkey_db_resources),
...@@ -845,6 +874,9 @@ static struct mfd_cell __devinitdata ab8500_devs[] = { ...@@ -845,6 +874,9 @@ static struct mfd_cell __devinitdata ab8500_devs[] = {
.num_resources = ARRAY_SIZE(ab8500_usb_resources), .num_resources = ARRAY_SIZE(ab8500_usb_resources),
.resources = ab8500_usb_resources, .resources = ab8500_usb_resources,
}, },
{
.name = "ab8500-codec",
},
}; };
static struct mfd_cell __devinitdata ab9540_devs[] = { static struct mfd_cell __devinitdata ab9540_devs[] = {
...@@ -858,6 +890,18 @@ static struct mfd_cell __devinitdata ab9540_devs[] = { ...@@ -858,6 +890,18 @@ static struct mfd_cell __devinitdata ab9540_devs[] = {
.num_resources = ARRAY_SIZE(ab8500_usb_resources), .num_resources = ARRAY_SIZE(ab8500_usb_resources),
.resources = ab8500_usb_resources, .resources = ab8500_usb_resources,
}, },
{
.name = "ab9540-codec",
},
};
/* Device list common to ab9540 and ab8505 */
static struct mfd_cell __devinitdata ab9540_ab8505_devs[] = {
{
.name = "ab-iddet",
.num_resources = ARRAY_SIZE(ab8505_iddet_resources),
.resources = ab8505_iddet_resources,
},
}; };
static ssize_t show_chip_id(struct device *dev, static ssize_t show_chip_id(struct device *dev,
...@@ -1125,8 +1169,14 @@ int __devinit ab8500_init(struct ab8500 *ab8500, enum ab8500_version version) ...@@ -1125,8 +1169,14 @@ int __devinit ab8500_init(struct ab8500 *ab8500, enum ab8500_version version)
ab8500->irq_base); ab8500->irq_base);
else else
ret = mfd_add_devices(ab8500->dev, 0, ab8500_devs, ret = mfd_add_devices(ab8500->dev, 0, ab8500_devs,
ARRAY_SIZE(ab9540_devs), NULL, ARRAY_SIZE(ab8500_devs), NULL,
ab8500->irq_base);
if (is_ab9540(ab8500) || is_ab8505(ab8500))
ret = mfd_add_devices(ab8500->dev, 0, ab9540_ab8505_devs,
ARRAY_SIZE(ab9540_ab8505_devs), NULL,
ab8500->irq_base); ab8500->irq_base);
if (ret) if (ret)
goto out_freeirq; goto out_freeirq;
......
...@@ -194,6 +194,14 @@ enum ab8500_version { ...@@ -194,6 +194,14 @@ enum ab8500_version {
#define AB9540_INT_GPIO52F 123 #define AB9540_INT_GPIO52F 123
#define AB9540_INT_GPIO53F 124 #define AB9540_INT_GPIO53F 124
#define AB9540_INT_GPIO54F 125 /* not 8505 */ #define AB9540_INT_GPIO54F 125 /* not 8505 */
/* ab8500_irq_regoffset[16] -> IT[Source|Latch|Mask]25 */
#define AB8505_INT_KEYSTUCK 128
#define AB8505_INT_IKR 129
#define AB8505_INT_IKP 130
#define AB8505_INT_KP 131
#define AB8505_INT_KEYDEGLITCH 132
#define AB8505_INT_MODPWRSTATUSF 134
#define AB8505_INT_MODPWRSTATUSR 135
/* /*
* AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the * AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the
...@@ -203,8 +211,8 @@ enum ab8500_version { ...@@ -203,8 +211,8 @@ enum ab8500_version {
* which is larger. * which is larger.
*/ */
#define AB8500_NR_IRQS 112 #define AB8500_NR_IRQS 112
#define AB8505_NR_IRQS 128 #define AB8505_NR_IRQS 136
#define AB9540_NR_IRQS 128 #define AB9540_NR_IRQS 136
/* This is set to the roof of any AB8500 chip variant IRQ counts */ /* This is set to the roof of any AB8500 chip variant IRQ counts */
#define AB8500_MAX_NR_IRQS AB9540_NR_IRQS #define AB8500_MAX_NR_IRQS AB9540_NR_IRQS
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment