diff options
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/max8997-muic.c | 137 |
1 files changed, 4 insertions, 133 deletions
diff --git a/drivers/misc/max8997-muic.c b/drivers/misc/max8997-muic.c index 74a9448a93d2..d74ef41aabd5 100644 --- a/drivers/misc/max8997-muic.c +++ b/drivers/misc/max8997-muic.c @@ -307,11 +307,8 @@ static void max8997_muic_irq_work(struct work_struct *work) struct max8997_muic_info, irq_work); struct max8997_platform_data *pdata = dev_get_platdata(info->iodev->dev); - char env_name_str[30], env_state_str[15]; - char *envp[] = { env_name_str, env_state_str, NULL }; u8 status[3]; - u8 adc, adc_low, adc_err; - u8 vb_volt, db_chg, dcd_tmr, cdr, chg_type, ovp; + u8 adc, chg_type; int irq_type = info->irq - pdata->irq_base; int ret; @@ -330,72 +327,24 @@ static void max8997_muic_irq_work(struct work_struct *work) status[0], status[1]); switch (irq_type) { - case MAX8997_MUICIRQ_ADCError: - adc_err = status[0] & STATUS1_ADCERR_MASK; - adc_err >>= STATUS1_ADCERR_SHIFT; - sprintf(env_name_str, "IRQ=%s", "ADC_Error"); - sprintf(env_state_str, "STATE=%d", adc_err); - break; - case MAX8997_MUICIRQ_ADCLow: - adc_low = status[0] & STATUS1_ADCLOW_MASK; - adc_low >>= STATUS1_ADCLOW_SHIFT; - sprintf(env_name_str, "IRQ=%s", "ADC_Low"); - sprintf(env_state_str, "STATE=%d", adc_low); - break; case MAX8997_MUICIRQ_ADC: adc = status[0] & STATUS1_ADC_MASK; adc >>= STATUS1_ADC_SHIFT; max8997_muic_handle_adc(info, adc); - - sprintf(env_name_str, "IRQ=%s", "ADC"); - sprintf(env_state_str, "STATE=%d", adc); - break; - case MAX8997_MUICIRQ_VBVolt: - vb_volt = status[1] & STATUS2_VBVOLT_MASK; - vb_volt >>= STATUS2_VBVOLT_SHIFT; - sprintf(env_name_str, "IRQ=%s", "VB_Volt"); - sprintf(env_state_str, "STATE=%d", vb_volt); - break; - case MAX8997_MUICIRQ_DBChg: - db_chg = status[1] & STATUS2_DBCHG_MASK; - db_chg >>= STATUS2_DBCHG_SHIFT; - sprintf(env_name_str, "IRQ=%s", "DB_CHARGER"); - sprintf(env_state_str, "STATE=%d", db_chg); - break; - case MAX8997_MUICIRQ_DCDTmr: - dcd_tmr = status[1] & STATUS2_DCDTMR_MASK; - dcd_tmr >>= STATUS2_DCDTMR_SHIFT; - sprintf(env_name_str, "IRQ=%s", "DCD_TIMER"); - sprintf(env_state_str, "STATE=%d", dcd_tmr); - break; - case MAX8997_MUICIRQ_ChgDetRun: - cdr = status[1] & STATUS2_CHGDETRUN_MASK; - cdr >>= STATUS2_CHGDETRUN_SHIFT; - sprintf(env_name_str, "IRQ=%s", "CHG_DET_RUN"); - sprintf(env_state_str, "STATE=%d", cdr); break; case MAX8997_MUICIRQ_ChgTyp: chg_type = status[1] & STATUS2_CHGTYP_MASK; chg_type >>= STATUS2_CHGTYP_SHIFT; max8997_muic_handle_charger_type(info, chg_type); - - sprintf(env_name_str, "IRQ=%s", "CHARGER_TYPE"); - sprintf(env_state_str, "STATE=%d", chg_type); - break; - case MAX8997_MUICIRQ_OVP: - ovp = status[2] & STATUS3_OVP_MASK; - ovp >>= STATUS3_OVP_SHIFT; - sprintf(env_name_str, "IRQ=%s", "OVER-VOLTAGE"); - sprintf(env_state_str, "STATE=%d", ovp); break; default: + dev_info(info->dev, "misc interrupt: %s occurred\n", + muic_irqs[irq_type].name); break; } - kobject_uevent_env(&info->dev->kobj, KOBJ_CHANGE, envp); - mutex_unlock(&info->mutex); return; @@ -438,74 +387,6 @@ static void max8997_muic_detect_dev(struct max8997_muic_info *info) max8997_muic_handle_charger_type(info, chg_type); } -static ssize_t max8997_muic_show_manualsw(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct max8997_muic_info *info = dev_get_drvdata(dev); - int ret; - u8 value, manual_switch; - - ret = max8997_read_reg(info->muic, MAX8997_MUIC_REG_CONTROL1, &value); - if (ret) { - dev_err(info->dev, "failed to read muic register\n"); - return sprintf(buf, "UNKNOWN\n"); - } - - manual_switch = value & (COMN1SW_MASK | COMP2SW_MASK); - - switch (manual_switch) { - case MAX8997_SW_USB: - return sprintf(buf, "USB\n"); - case MAX8997_SW_AUDIO: - return sprintf(buf, "AUDIO\n"); - case MAX8997_SW_UART: - return sprintf(buf, "UART\n"); - default: - return sprintf(buf, "OPEN\n"); - } -} - -static ssize_t max8997_muic_store_manualsw(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct max8997_muic_info *info = dev_get_drvdata(dev); - int ret; - u8 manual_switch; - - if (!strncmp(buf, "USB", 3)) { - manual_switch = MAX8997_SW_USB; - } else if (!strncmp(buf, "AUDIO", 5)) { - manual_switch = MAX8997_SW_AUDIO; - } else if (!strncmp(buf, "UART", 4)) { - manual_switch = MAX8997_SW_UART; - } else if (!strncmp(buf, "OPEN", 4)) { - manual_switch = MAX8997_SW_OPEN; - } else { - dev_err(info->dev, "invalid parameter\n"); - goto out; - } - - ret = max8997_update_reg(info->muic, MAX8997_MUIC_REG_CONTROL1, - manual_switch, SW_MASK); - if (ret) - dev_err(info->dev, "failed to update muic register\n"); -out: - return count; -} - -static DEVICE_ATTR(switch, S_IRUGO | S_IWUSR, - max8997_muic_show_manualsw, max8997_muic_store_manualsw); - -static struct attribute *max8997_muic_attributes[] = { - &dev_attr_switch.attr, - NULL -}; - -static const struct attribute_group max8997_muic_group = { - .attrs = max8997_muic_attributes, -}; - static void max8997_initialize_device(struct max8997_muic_info *info) { struct max8997_muic_platform_data *mdata = info->muic_pdata; @@ -545,13 +426,6 @@ static int __devinit max8997_muic_probe(struct platform_device *pdev) platform_set_drvdata(pdev, info); mutex_init(&info->mutex); - ret = sysfs_create_group(&pdev->dev.kobj, &max8997_muic_group); - if (ret) { - dev_err(&pdev->dev, - "failed to create max8997 muic attribute group\n"); - goto err_sysfs; - } - INIT_WORK(&info->irq_work, max8997_muic_irq_work); for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) { @@ -583,8 +457,6 @@ static int __devinit max8997_muic_probe(struct platform_device *pdev) return ret; err_irq: - sysfs_remove_group(&pdev->dev.kobj, &max8997_muic_group); -err_sysfs: err_pdata: kfree(info); err_kfree: @@ -598,10 +470,9 @@ static int __devexit max8997_muic_remove(struct platform_device *pdev) dev_get_platdata(info->iodev->dev); int i; - sysfs_remove_group(&pdev->dev.kobj, &max8997_muic_group); - for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) free_irq(pdata->irq_base + muic_irqs[i].irq, info); + cancel_work_sync(&info->irq_work); kfree(info); |