Commit a5939eef authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6

MFD fixes from Samuel Ortiz:
 "This is the pull request for the MFD fixes for 3.3.  We have a few
  NULL pointer dereferences fixes, an ACPI conflict check fix, and a
  couple of wm8994 fixes."

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6:
  mfd: Correct readability of WM8994 DC servo 4E register
  mfd: Initialize tps65912 irq platform data properly
  mfd: Fix ACPI conflict check
  mfd: Fix ab8500 error path bug
  mfd: Test for jack detection when deciding if wm8994 should suspend
  mfd: Initialize tps65910 irq platform data properly
  mfd: Fix possible s5m null pointer dereference
  mfd: wm8350 variable dereferenced before check
parents 5483f18e ac5ff1b3
...@@ -956,11 +956,12 @@ int __devinit ab8500_init(struct ab8500 *ab8500) ...@@ -956,11 +956,12 @@ int __devinit ab8500_init(struct ab8500 *ab8500)
return ret; return ret;
out_freeirq: out_freeirq:
if (ab8500->irq_base) { if (ab8500->irq_base)
free_irq(ab8500->irq, ab8500); free_irq(ab8500->irq, ab8500);
out_removeirq: out_removeirq:
if (ab8500->irq_base)
ab8500_irq_remove(ab8500); ab8500_irq_remove(ab8500);
}
return ret; return ret;
} }
......
...@@ -123,7 +123,7 @@ static int mfd_add_device(struct device *parent, int id, ...@@ -123,7 +123,7 @@ static int mfd_add_device(struct device *parent, int id,
} }
if (!cell->ignore_resource_conflicts) { if (!cell->ignore_resource_conflicts) {
ret = acpi_check_resource_conflict(res); ret = acpi_check_resource_conflict(&res[r]);
if (ret) if (ret)
goto fail_res; goto fail_res;
} }
......
...@@ -105,7 +105,7 @@ static int s5m87xx_i2c_probe(struct i2c_client *i2c, ...@@ -105,7 +105,7 @@ static int s5m87xx_i2c_probe(struct i2c_client *i2c,
s5m87xx->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR); s5m87xx->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR);
i2c_set_clientdata(s5m87xx->rtc, s5m87xx); i2c_set_clientdata(s5m87xx->rtc, s5m87xx);
if (pdata->cfg_pmic_irq) if (pdata && pdata->cfg_pmic_irq)
pdata->cfg_pmic_irq(); pdata->cfg_pmic_irq();
s5m_irq_init(s5m87xx); s5m_irq_init(s5m87xx);
......
...@@ -168,7 +168,7 @@ static int tps65910_i2c_probe(struct i2c_client *i2c, ...@@ -168,7 +168,7 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
goto err; goto err;
init_data->irq = pmic_plat_data->irq; init_data->irq = pmic_plat_data->irq;
init_data->irq_base = pmic_plat_data->irq; init_data->irq_base = pmic_plat_data->irq_base;
tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base); tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base);
......
...@@ -151,7 +151,7 @@ int tps65912_device_init(struct tps65912 *tps65912) ...@@ -151,7 +151,7 @@ int tps65912_device_init(struct tps65912 *tps65912)
goto err; goto err;
init_data->irq = pmic_plat_data->irq; init_data->irq = pmic_plat_data->irq;
init_data->irq_base = pmic_plat_data->irq; init_data->irq_base = pmic_plat_data->irq_base;
ret = tps65912_irq_init(tps65912, init_data->irq, init_data); ret = tps65912_irq_init(tps65912, init_data->irq, init_data);
if (ret < 0) if (ret < 0)
goto err; goto err;
......
...@@ -496,7 +496,6 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq, ...@@ -496,7 +496,6 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq,
mutex_init(&wm8350->irq_lock); mutex_init(&wm8350->irq_lock);
wm8350->chip_irq = irq; wm8350->chip_irq = irq;
wm8350->irq_base = pdata->irq_base;
if (pdata && pdata->irq_base > 0) if (pdata && pdata->irq_base > 0)
irq_base = pdata->irq_base; irq_base = pdata->irq_base;
......
...@@ -256,6 +256,20 @@ static int wm8994_suspend(struct device *dev) ...@@ -256,6 +256,20 @@ static int wm8994_suspend(struct device *dev)
break; break;
} }
switch (wm8994->type) {
case WM1811:
ret = wm8994_reg_read(wm8994, WM8994_ANTIPOP_2);
if (ret < 0) {
dev_err(dev, "Failed to read jackdet: %d\n", ret);
} else if (ret & WM1811_JACKDET_MODE_MASK) {
dev_dbg(dev, "CODEC still active, ignoring suspend\n");
return 0;
}
break;
default:
break;
}
/* Disable LDO pulldowns while the device is suspended if we /* Disable LDO pulldowns while the device is suspended if we
* don't know that something will be driving them. */ * don't know that something will be driving them. */
if (!wm8994->ldo_ena_always_driven) if (!wm8994->ldo_ena_always_driven)
......
...@@ -806,6 +806,7 @@ static bool wm1811_readable_register(struct device *dev, unsigned int reg) ...@@ -806,6 +806,7 @@ static bool wm1811_readable_register(struct device *dev, unsigned int reg)
case WM8994_DC_SERVO_2: case WM8994_DC_SERVO_2:
case WM8994_DC_SERVO_READBACK: case WM8994_DC_SERVO_READBACK:
case WM8994_DC_SERVO_4: case WM8994_DC_SERVO_4:
case WM8994_DC_SERVO_4E:
case WM8994_ANALOGUE_HP_1: case WM8994_ANALOGUE_HP_1:
case WM8958_MIC_DETECT_1: case WM8958_MIC_DETECT_1:
case WM8958_MIC_DETECT_2: case WM8958_MIC_DETECT_2:
......
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