#include <linux/platform_device.h>
#include <linux/i2c/twl4030.h>
#include <linux/power_supply.h>
-#include <mach/bci.h>
#include <linux/i2c/twl4030-madc.h>
#define T2_BATTERY_VOLT 0x04
{
struct twl4030_bci_device_info *di = _di;
+#ifdef CONFIG_LOCKDEP
+ /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
+ * we don't want and can't tolerate. Although it might be
+ * friendlier not to borrow this thread context...
+ */
+ local_irq_enable();
+#endif
+
twl4030charger_presence_evt();
power_supply_changed(&di->bat);
u8 isr1a_val, isr2a_val, clear_2a, clear_1a;
int ret;
+#ifdef CONFIG_LOCKDEP
+ /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
+ * we don't want and can't tolerate. Although it might be
+ * friendlier not to borrow this thread context...
+ */
+ local_irq_enable();
+#endif
+
ret = twl4030_i2c_read_u8(TWL4030_MODULE_INTERRUPTS, &isr1a_val,
REG_BCIISR1A);
if (ret)
*/
static int twl4030backupbatt_voltage(void)
{
- int ret, temp;
- u8 volt;
struct twl4030_madc_request req;
+ int temp;
req.channels = (1 << 9);
req.do_avg = 0;
enum power_supply_property psp,
union power_supply_propval *val)
{
- struct twl4030_bci_device_info *di = to_twl4030_bci_device_info(psy);
+ struct twl4030_bci_device_info *di;
int status = 0;
+ di = to_twl4030_bci_device_info(psy);
+
switch (psp) {
case POWER_SUPPLY_PROP_STATUS:
val->intval = di->charge_status;
{
struct twl4030_bci_platform_data *pdata = pdev->dev.platform_data;
struct twl4030_bci_device_info *di;
+ int irq;
int ret;
therm_tbl = pdata->battery_tmp_tbl;
if (ret)
goto voltage_setup_fail;
+ /* REVISIT do we need to request both IRQs ?? */
+
/* request BCI interruption */
ret = request_irq(TWL4030_MODIRQ_BCI, twl4030battery_interrupt,
- IRQF_DISABLED, pdev->name, NULL);
+ 0, pdev->name, NULL);
if (ret) {
dev_dbg(&pdev->dev, "could not request irq %d, status %d\n",
TWL4030_MODIRQ_BCI, ret);
goto batt_irq_fail;
}
+ irq = platform_get_irq(pdev, 0);
+
/* request Power interruption */
- ret = request_irq(TWL4030_PWRIRQ_CHG_PRES, twl4030charger_interrupt,
+ ret = request_irq(irq, twl4030charger_interrupt,
0, pdev->name, di);
if (ret) {
dev_dbg(&pdev->dev, "could not request irq %d, status %d\n",
- TWL4030_PWRIRQ_CHG_PRES, ret);
+ irq, ret);
goto chg_irq_fail;
}
- ret = power_supply_register(&dev->dev, &di->bat);
+ ret = power_supply_register(&pdev->dev, &di->bat);
if (ret) {
dev_dbg(&pdev->dev, "failed to register main battery\n");
goto batt_failed;
bk_batt_failed:
power_supply_unregister(&di->bat);
batt_failed:
- free_irq(TWL4030_MODIRQ_PWR, di);
+ free_irq(irq, di);
chg_irq_fail:
-prev_setup_err:
free_irq(TWL4030_MODIRQ_BCI, NULL);
batt_irq_fail:
voltage_setup_fail:
static int __exit twl4030_bci_battery_remove(struct platform_device *pdev)
{
struct twl4030_bci_device_info *di = platform_get_drvdata(pdev);
+ int irq = platform_get_irq(pdev, 0);
twl4030charger_ac_en(DISABLE);
twl4030charger_usb_en(DISABLE);
twl4030battery_hw_presence_en(DISABLE);
free_irq(TWL4030_MODIRQ_BCI, NULL);
- free_irq(TWL4030_MODIRQ_PWR, di);
+ free_irq(irq, di);
flush_scheduled_work();
power_supply_unregister(&di->bat);