Loading drivers/extcon/extcon-adc-jack.c +15 −12 Original line number Original line Diff line number Diff line Loading @@ -3,6 +3,9 @@ * * * Analog Jack extcon driver with ADC-based detection capability. * Analog Jack extcon driver with ADC-based detection capability. * * * Copyright (C) 2016 Samsung Electronics * Chanwoo Choi <cw00.choi@samsung.com> * * Copyright (C) 2012 Samsung Electronics * Copyright (C) 2012 Samsung Electronics * MyungJoo Ham <myungjoo.ham@samsung.com> * MyungJoo Ham <myungjoo.ham@samsung.com> * * Loading Loading @@ -58,7 +61,7 @@ static void adc_jack_handler(struct work_struct *work) struct adc_jack_data *data = container_of(to_delayed_work(work), struct adc_jack_data *data = container_of(to_delayed_work(work), struct adc_jack_data, struct adc_jack_data, handler); handler); u32 state = 0; struct adc_jack_cond *def; int ret, adc_val; int ret, adc_val; int i; int i; Loading @@ -70,17 +73,18 @@ static void adc_jack_handler(struct work_struct *work) /* Get state from adc value with adc_conditions */ /* Get state from adc value with adc_conditions */ for (i = 0; i < data->num_conditions; i++) { for (i = 0; i < data->num_conditions; i++) { struct adc_jack_cond *def = &data->adc_conditions[i]; def = &data->adc_conditions[i]; if (!def->state) break; if (def->min_adc <= adc_val && def->max_adc >= adc_val) { if (def->min_adc <= adc_val && def->max_adc >= adc_val) { state = def->state; extcon_set_cable_state_(data->edev, def->id, true); break; return; } } } } /* if no def has met, it means state = 0 (no cables attached) */ extcon_set_state(data->edev, state); /* Set the detached state if adc value is not included in the range */ for (i = 0; i < data->num_conditions; i++) { def = &data->adc_conditions[i]; extcon_set_cable_state_(data->edev, def->id, false); } } } static irqreturn_t adc_jack_irq_thread(int irq, void *_data) static irqreturn_t adc_jack_irq_thread(int irq, void *_data) Loading Loading @@ -114,16 +118,14 @@ static int adc_jack_probe(struct platform_device *pdev) return -ENOMEM; return -ENOMEM; } } if (!pdata->adc_conditions || if (!pdata->adc_conditions) { !pdata->adc_conditions[0].state) { dev_err(&pdev->dev, "error: adc_conditions not defined.\n"); dev_err(&pdev->dev, "error: adc_conditions not defined.\n"); return -EINVAL; return -EINVAL; } } data->adc_conditions = pdata->adc_conditions; data->adc_conditions = pdata->adc_conditions; /* Check the length of array and set num_conditions */ /* Check the length of array and set num_conditions */ for (i = 0; data->adc_conditions[i].state; i++) for (i = 0; data->adc_conditions[i].id != EXTCON_NONE; i++); ; data->num_conditions = i; data->num_conditions = i; data->chan = iio_channel_get(&pdev->dev, pdata->consumer_channel); data->chan = iio_channel_get(&pdev->dev, pdata->consumer_channel); Loading Loading @@ -158,6 +160,7 @@ static int adc_jack_probe(struct platform_device *pdev) if (data->wakeup_source) if (data->wakeup_source) device_init_wakeup(&pdev->dev, 1); device_init_wakeup(&pdev->dev, 1); adc_jack_handler(&data->handler.work); return 0; return 0; } } Loading drivers/extcon/extcon-arizona.c +8 −5 Original line number Original line Diff line number Diff line Loading @@ -183,7 +183,7 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info, if (clamp) if (clamp) val = ARIZONA_RMV_SHRT_HP1L; val = ARIZONA_RMV_SHRT_HP1L; break; break; }; } snd_soc_dapm_mutex_lock(arizona->dapm); snd_soc_dapm_mutex_lock(arizona->dapm); Loading Loading @@ -1149,10 +1149,13 @@ static irqreturn_t arizona_jackdet(int irq, void *data) info->micd_ranges[i].key, 0); info->micd_ranges[i].key, 0); input_sync(info->input); input_sync(info->input); ret = extcon_update_state(info->edev, 0xffffffff, 0); for (i = 0; i < ARRAY_SIZE(arizona_cable) - 1; i++) { ret = extcon_set_cable_state_(info->edev, arizona_cable[i], false); if (ret != 0) if (ret != 0) dev_err(arizona->dev, "Removal report failed: %d\n", dev_err(arizona->dev, ret); "Removal report failed: %d\n", ret); } regmap_update_bits(arizona->regmap, regmap_update_bits(arizona->regmap, ARIZONA_JACK_DETECT_DEBOUNCE, ARIZONA_JACK_DETECT_DEBOUNCE, Loading drivers/extcon/extcon-gpio.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -49,7 +49,7 @@ static void gpio_extcon_work(struct work_struct *work) state = gpiod_get_value_cansleep(data->id_gpiod); state = gpiod_get_value_cansleep(data->id_gpiod); if (data->pdata->gpio_active_low) if (data->pdata->gpio_active_low) state = !state; state = !state; extcon_set_state(data->edev, state); extcon_set_cable_state_(data->edev, data->pdata->extcon_id, state); } } static irqreturn_t gpio_irq_handler(int irq, void *dev_id) static irqreturn_t gpio_irq_handler(int irq, void *dev_id) Loading Loading
drivers/extcon/extcon-adc-jack.c +15 −12 Original line number Original line Diff line number Diff line Loading @@ -3,6 +3,9 @@ * * * Analog Jack extcon driver with ADC-based detection capability. * Analog Jack extcon driver with ADC-based detection capability. * * * Copyright (C) 2016 Samsung Electronics * Chanwoo Choi <cw00.choi@samsung.com> * * Copyright (C) 2012 Samsung Electronics * Copyright (C) 2012 Samsung Electronics * MyungJoo Ham <myungjoo.ham@samsung.com> * MyungJoo Ham <myungjoo.ham@samsung.com> * * Loading Loading @@ -58,7 +61,7 @@ static void adc_jack_handler(struct work_struct *work) struct adc_jack_data *data = container_of(to_delayed_work(work), struct adc_jack_data *data = container_of(to_delayed_work(work), struct adc_jack_data, struct adc_jack_data, handler); handler); u32 state = 0; struct adc_jack_cond *def; int ret, adc_val; int ret, adc_val; int i; int i; Loading @@ -70,17 +73,18 @@ static void adc_jack_handler(struct work_struct *work) /* Get state from adc value with adc_conditions */ /* Get state from adc value with adc_conditions */ for (i = 0; i < data->num_conditions; i++) { for (i = 0; i < data->num_conditions; i++) { struct adc_jack_cond *def = &data->adc_conditions[i]; def = &data->adc_conditions[i]; if (!def->state) break; if (def->min_adc <= adc_val && def->max_adc >= adc_val) { if (def->min_adc <= adc_val && def->max_adc >= adc_val) { state = def->state; extcon_set_cable_state_(data->edev, def->id, true); break; return; } } } } /* if no def has met, it means state = 0 (no cables attached) */ extcon_set_state(data->edev, state); /* Set the detached state if adc value is not included in the range */ for (i = 0; i < data->num_conditions; i++) { def = &data->adc_conditions[i]; extcon_set_cable_state_(data->edev, def->id, false); } } } static irqreturn_t adc_jack_irq_thread(int irq, void *_data) static irqreturn_t adc_jack_irq_thread(int irq, void *_data) Loading Loading @@ -114,16 +118,14 @@ static int adc_jack_probe(struct platform_device *pdev) return -ENOMEM; return -ENOMEM; } } if (!pdata->adc_conditions || if (!pdata->adc_conditions) { !pdata->adc_conditions[0].state) { dev_err(&pdev->dev, "error: adc_conditions not defined.\n"); dev_err(&pdev->dev, "error: adc_conditions not defined.\n"); return -EINVAL; return -EINVAL; } } data->adc_conditions = pdata->adc_conditions; data->adc_conditions = pdata->adc_conditions; /* Check the length of array and set num_conditions */ /* Check the length of array and set num_conditions */ for (i = 0; data->adc_conditions[i].state; i++) for (i = 0; data->adc_conditions[i].id != EXTCON_NONE; i++); ; data->num_conditions = i; data->num_conditions = i; data->chan = iio_channel_get(&pdev->dev, pdata->consumer_channel); data->chan = iio_channel_get(&pdev->dev, pdata->consumer_channel); Loading Loading @@ -158,6 +160,7 @@ static int adc_jack_probe(struct platform_device *pdev) if (data->wakeup_source) if (data->wakeup_source) device_init_wakeup(&pdev->dev, 1); device_init_wakeup(&pdev->dev, 1); adc_jack_handler(&data->handler.work); return 0; return 0; } } Loading
drivers/extcon/extcon-arizona.c +8 −5 Original line number Original line Diff line number Diff line Loading @@ -183,7 +183,7 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info, if (clamp) if (clamp) val = ARIZONA_RMV_SHRT_HP1L; val = ARIZONA_RMV_SHRT_HP1L; break; break; }; } snd_soc_dapm_mutex_lock(arizona->dapm); snd_soc_dapm_mutex_lock(arizona->dapm); Loading Loading @@ -1149,10 +1149,13 @@ static irqreturn_t arizona_jackdet(int irq, void *data) info->micd_ranges[i].key, 0); info->micd_ranges[i].key, 0); input_sync(info->input); input_sync(info->input); ret = extcon_update_state(info->edev, 0xffffffff, 0); for (i = 0; i < ARRAY_SIZE(arizona_cable) - 1; i++) { ret = extcon_set_cable_state_(info->edev, arizona_cable[i], false); if (ret != 0) if (ret != 0) dev_err(arizona->dev, "Removal report failed: %d\n", dev_err(arizona->dev, ret); "Removal report failed: %d\n", ret); } regmap_update_bits(arizona->regmap, regmap_update_bits(arizona->regmap, ARIZONA_JACK_DETECT_DEBOUNCE, ARIZONA_JACK_DETECT_DEBOUNCE, Loading
drivers/extcon/extcon-gpio.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -49,7 +49,7 @@ static void gpio_extcon_work(struct work_struct *work) state = gpiod_get_value_cansleep(data->id_gpiod); state = gpiod_get_value_cansleep(data->id_gpiod); if (data->pdata->gpio_active_low) if (data->pdata->gpio_active_low) state = !state; state = !state; extcon_set_state(data->edev, state); extcon_set_cable_state_(data->edev, data->pdata->extcon_id, state); } } static irqreturn_t gpio_irq_handler(int irq, void *dev_id) static irqreturn_t gpio_irq_handler(int irq, void *dev_id) Loading