summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/misc/max8997-muic.c137
1 files changed, 4 insertions, 133 deletions
diff --git a/drivers/misc/max8997-muic.c b/drivers/misc/max8997-muic.c
index 74a9448..d74ef41 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);
OpenPOWER on IntegriCloud