Merge branch 'for-mfd-next' of git://git.linaro.org/people/ljones/linux-3.0-ux500
This commit is contained in:
commit
c5fa44d134
7 changed files with 77 additions and 46 deletions
|
@ -1155,7 +1155,7 @@ static int pm860x_probe(struct i2c_client *client,
|
|||
return -ENOMEM;
|
||||
|
||||
chip->id = verify_addr(client);
|
||||
chip->regmap = regmap_init_i2c(client, &pm860x_regmap_config);
|
||||
chip->regmap = devm_regmap_init_i2c(client, &pm860x_regmap_config);
|
||||
if (IS_ERR(chip->regmap)) {
|
||||
ret = PTR_ERR(chip->regmap);
|
||||
dev_err(&client->dev, "Failed to allocate register map: %d\n",
|
||||
|
@ -1203,7 +1203,6 @@ static int pm860x_remove(struct i2c_client *client)
|
|||
regmap_exit(chip->regmap_companion);
|
||||
i2c_unregister_device(chip->companion);
|
||||
}
|
||||
regmap_exit(chip->regmap);
|
||||
kfree(chip);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -312,8 +312,9 @@ static ssize_t aat2870_reg_write_file(struct file *file,
|
|||
while (*start == ' ')
|
||||
start++;
|
||||
|
||||
if (strict_strtoul(start, 16, &val))
|
||||
return -EINVAL;
|
||||
ret = kstrtoul(start, 16, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = aat2870->write(aat2870, (u8)addr, (u8)val);
|
||||
if (ret)
|
||||
|
|
|
@ -491,7 +491,7 @@ static ssize_t ab3100_get_set_reg(struct file *file,
|
|||
char buf[32];
|
||||
ssize_t buf_size;
|
||||
int regp;
|
||||
unsigned long user_reg;
|
||||
u8 user_reg;
|
||||
int err;
|
||||
int i = 0;
|
||||
|
||||
|
@ -514,34 +514,29 @@ static ssize_t ab3100_get_set_reg(struct file *file,
|
|||
/*
|
||||
* Advance pointer to end of string then terminate
|
||||
* the register string. This is needed to satisfy
|
||||
* the strict_strtoul() function.
|
||||
* the kstrtou8() function.
|
||||
*/
|
||||
while ((i < buf_size) && (buf[i] != ' '))
|
||||
i++;
|
||||
buf[i] = '\0';
|
||||
|
||||
err = strict_strtoul(&buf[regp], 16, &user_reg);
|
||||
err = kstrtou8(&buf[regp], 16, &user_reg);
|
||||
if (err)
|
||||
return err;
|
||||
if (user_reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
/* Either we read or we write a register here */
|
||||
if (!priv->mode) {
|
||||
/* Reading */
|
||||
u8 reg = (u8) user_reg;
|
||||
u8 regvalue;
|
||||
|
||||
ab3100_get_register_interruptible(ab3100, reg, ®value);
|
||||
ab3100_get_register_interruptible(ab3100, user_reg, ®value);
|
||||
|
||||
dev_info(ab3100->dev,
|
||||
"debug read AB3100 reg[0x%02x]: 0x%02x\n",
|
||||
reg, regvalue);
|
||||
user_reg, regvalue);
|
||||
} else {
|
||||
int valp;
|
||||
unsigned long user_value;
|
||||
u8 reg = (u8) user_reg;
|
||||
u8 value;
|
||||
u8 user_value;
|
||||
u8 regvalue;
|
||||
|
||||
/*
|
||||
|
@ -557,20 +552,17 @@ static ssize_t ab3100_get_set_reg(struct file *file,
|
|||
i++;
|
||||
buf[i] = '\0';
|
||||
|
||||
err = strict_strtoul(&buf[valp], 16, &user_value);
|
||||
err = kstrtou8(&buf[valp], 16, &user_value);
|
||||
if (err)
|
||||
return err;
|
||||
if (user_reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
value = (u8) user_value;
|
||||
ab3100_set_register_interruptible(ab3100, reg, value);
|
||||
ab3100_get_register_interruptible(ab3100, reg, ®value);
|
||||
ab3100_set_register_interruptible(ab3100, user_reg, user_value);
|
||||
ab3100_get_register_interruptible(ab3100, user_reg, ®value);
|
||||
|
||||
dev_info(ab3100->dev,
|
||||
"debug write reg[0x%02x] with 0x%02x, "
|
||||
"after readback: 0x%02x\n",
|
||||
reg, value, regvalue);
|
||||
user_reg, user_value, regvalue);
|
||||
}
|
||||
return buf_size;
|
||||
}
|
||||
|
|
|
@ -650,6 +650,21 @@ static struct resource ab8500_rtc_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct resource ab8540_rtc_resources[] = {
|
||||
{
|
||||
.name = "1S",
|
||||
.start = AB8540_INT_RTC_1S,
|
||||
.end = AB8540_INT_RTC_1S,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
{
|
||||
.name = "ALARM",
|
||||
.start = AB8500_INT_RTC_ALARM,
|
||||
.end = AB8500_INT_RTC_ALARM,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource ab8500_poweronkey_db_resources[] = {
|
||||
{
|
||||
.name = "ONKEY_DBF",
|
||||
|
@ -1050,6 +1065,10 @@ static struct mfd_cell ab8500_devs[] = {
|
|||
.name = "ab8500-sysctrl",
|
||||
.of_compatible = "stericsson,ab8500-sysctrl",
|
||||
},
|
||||
{
|
||||
.name = "ab8500-ext-regulator",
|
||||
.of_compatible = "stericsson,ab8500-ext-regulator",
|
||||
},
|
||||
{
|
||||
.name = "ab8500-regulator",
|
||||
.of_compatible = "stericsson,ab8500-regulator",
|
||||
|
@ -1098,10 +1117,6 @@ static struct mfd_cell ab8500_devs[] = {
|
|||
.of_compatible = "stericsson,ab8500-pwm",
|
||||
.id = 3,
|
||||
},
|
||||
{
|
||||
.name = "ab8500-leds",
|
||||
.of_compatible = "stericsson,ab8500-leds",
|
||||
},
|
||||
{
|
||||
.name = "ab8500-denc",
|
||||
.of_compatible = "stericsson,ab8500-denc",
|
||||
|
@ -1124,6 +1139,7 @@ static struct mfd_cell ab8500_devs[] = {
|
|||
},
|
||||
{
|
||||
.name = "ab8500-codec",
|
||||
.of_compatible = "stericsson,ab8500-codec",
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -1138,6 +1154,9 @@ static struct mfd_cell ab9540_devs[] = {
|
|||
{
|
||||
.name = "ab8500-sysctrl",
|
||||
},
|
||||
{
|
||||
.name = "ab8500-ext-regulator",
|
||||
},
|
||||
{
|
||||
.name = "ab8500-regulator",
|
||||
},
|
||||
|
@ -1170,9 +1189,6 @@ static struct mfd_cell ab9540_devs[] = {
|
|||
.name = "ab8500-pwm",
|
||||
.id = 1,
|
||||
},
|
||||
{
|
||||
.name = "ab8500-leds",
|
||||
},
|
||||
{
|
||||
.name = "abx500-temp",
|
||||
.num_resources = ARRAY_SIZE(ab8500_temp_resources),
|
||||
|
@ -1241,9 +1257,6 @@ static struct mfd_cell ab8505_devs[] = {
|
|||
.name = "ab8500-pwm",
|
||||
.id = 1,
|
||||
},
|
||||
{
|
||||
.name = "ab8500-leds",
|
||||
},
|
||||
{
|
||||
.name = "pinctrl-ab8505",
|
||||
},
|
||||
|
@ -1273,6 +1286,9 @@ static struct mfd_cell ab8540_devs[] = {
|
|||
{
|
||||
.name = "ab8500-sysctrl",
|
||||
},
|
||||
{
|
||||
.name = "ab8500-ext-regulator",
|
||||
},
|
||||
{
|
||||
.name = "ab8500-regulator",
|
||||
},
|
||||
|
@ -1286,11 +1302,6 @@ static struct mfd_cell ab8540_devs[] = {
|
|||
.num_resources = ARRAY_SIZE(ab8505_gpadc_resources),
|
||||
.resources = ab8505_gpadc_resources,
|
||||
},
|
||||
{
|
||||
.name = "ab8500-rtc",
|
||||
.num_resources = ARRAY_SIZE(ab8500_rtc_resources),
|
||||
.resources = ab8500_rtc_resources,
|
||||
},
|
||||
{
|
||||
.name = "ab8500-acc-det",
|
||||
.num_resources = ARRAY_SIZE(ab8500_av_acc_detect_resources),
|
||||
|
@ -1305,9 +1316,6 @@ static struct mfd_cell ab8540_devs[] = {
|
|||
.name = "ab8500-pwm",
|
||||
.id = 1,
|
||||
},
|
||||
{
|
||||
.name = "ab8500-leds",
|
||||
},
|
||||
{
|
||||
.name = "abx500-temp",
|
||||
.num_resources = ARRAY_SIZE(ab8500_temp_resources),
|
||||
|
@ -1331,6 +1339,24 @@ static struct mfd_cell ab8540_devs[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct mfd_cell ab8540_cut1_devs[] = {
|
||||
{
|
||||
.name = "ab8500-rtc",
|
||||
.of_compatible = "stericsson,ab8500-rtc",
|
||||
.num_resources = ARRAY_SIZE(ab8500_rtc_resources),
|
||||
.resources = ab8500_rtc_resources,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mfd_cell ab8540_cut2_devs[] = {
|
||||
{
|
||||
.name = "ab8540-rtc",
|
||||
.of_compatible = "stericsson,ab8540-rtc",
|
||||
.num_resources = ARRAY_SIZE(ab8540_rtc_resources),
|
||||
.resources = ab8540_rtc_resources,
|
||||
},
|
||||
};
|
||||
|
||||
static ssize_t show_chip_id(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
|
@ -1734,11 +1760,22 @@ static int ab8500_probe(struct platform_device *pdev)
|
|||
ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs,
|
||||
ARRAY_SIZE(ab9540_devs), NULL,
|
||||
ab8500->irq_base, ab8500->domain);
|
||||
else if (is_ab8540(ab8500))
|
||||
else if (is_ab8540(ab8500)) {
|
||||
ret = mfd_add_devices(ab8500->dev, 0, ab8540_devs,
|
||||
ARRAY_SIZE(ab8540_devs), NULL,
|
||||
ab8500->irq_base, ab8500->domain);
|
||||
else if (is_ab8505(ab8500))
|
||||
ab8500->irq_base, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (is_ab8540_1p2_or_earlier(ab8500))
|
||||
ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut1_devs,
|
||||
ARRAY_SIZE(ab8540_cut1_devs), NULL,
|
||||
ab8500->irq_base, NULL);
|
||||
else /* ab8540 >= cut2 */
|
||||
ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut2_devs,
|
||||
ARRAY_SIZE(ab8540_cut2_devs), NULL,
|
||||
ab8500->irq_base, NULL);
|
||||
} else if (is_ab8505(ab8500))
|
||||
ret = mfd_add_devices(ab8500->dev, 0, ab8505_devs,
|
||||
ARRAY_SIZE(ab8505_devs), NULL,
|
||||
ab8500->irq_base, ab8500->domain);
|
||||
|
|
|
@ -2757,7 +2757,7 @@ static ssize_t show_irq(struct device *dev,
|
|||
unsigned int irq_index;
|
||||
int err;
|
||||
|
||||
err = strict_strtoul(attr->attr.name, 0, &name);
|
||||
err = kstrtoul(attr->attr.name, 0, &name);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
#define BITS(_start, _end) ((BIT(_end) - BIT(_start)) + BIT(_end))
|
||||
|
||||
#define PRCM_ACLK_MGT (0x004)
|
||||
#define PRCM_SVACLK_MGT (0x008)
|
||||
#define PRCM_SIACLK_MGT (0x00C)
|
||||
#define PRCM_SVAMMCSPCLK_MGT (0x008)
|
||||
#define PRCM_SIAMMDSPCLK_MGT (0x00C)
|
||||
#define PRCM_SGACLK_MGT (0x014)
|
||||
#define PRCM_UARTCLK_MGT (0x018)
|
||||
#define PRCM_MSP02CLK_MGT (0x01C)
|
||||
|
|
|
@ -291,6 +291,8 @@ enum ab8500_version {
|
|||
#define AB8540_INT_FSYNC2R 213
|
||||
#define AB8540_INT_BITCLK2F 214
|
||||
#define AB8540_INT_BITCLK2R 215
|
||||
/* ab8540_irq_regoffset[27] -> IT[Source|Latch|Mask]33 */
|
||||
#define AB8540_INT_RTC_1S 216
|
||||
|
||||
/*
|
||||
* AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the
|
||||
|
|
Loading…
Reference in a new issue