Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7da72ee authored by Chanwoo Choi's avatar Chanwoo Choi
Browse files

extcon: adc-jack: Remove the usage of extcon_set_state()



This patch removes the usage of extcon_set_state() because it uses the bit
masking to change the state of external connectors. The extcon framework
should handle the state by extcon_set/get_cable_state_() with extcon id.

Signed-off-by: default avatarChanwoo Choi <cw00.choi@samsung.com>
parent 5475e631
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -3,6 +3,9 @@
 *
 * 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
 * MyungJoo Ham <myungjoo.ham@samsung.com>
 *
@@ -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,
			handler);
	u32 state = 0;
	struct adc_jack_cond *def;
	int ret, adc_val;
	int i;

@@ -70,17 +73,18 @@ static void adc_jack_handler(struct work_struct *work)

	/* Get state from adc value with adc_conditions */
	for (i = 0; i < data->num_conditions; i++) {
		struct adc_jack_cond *def = &data->adc_conditions[i];
		if (!def->state)
			break;
		def = &data->adc_conditions[i];
		if (def->min_adc <= adc_val && def->max_adc >= adc_val) {
			state = def->state;
			break;
			extcon_set_cable_state_(data->edev, def->id, true);
			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)
@@ -114,16 +118,14 @@ static int adc_jack_probe(struct platform_device *pdev)
		return -ENOMEM;
	}

	if (!pdata->adc_conditions ||
			!pdata->adc_conditions[0].state) {
	if (!pdata->adc_conditions) {
		dev_err(&pdev->dev, "error: adc_conditions not defined.\n");
		return -EINVAL;
	}
	data->adc_conditions = pdata->adc_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->chan = iio_channel_get(&pdev->dev, pdata->consumer_channel);
+2 −2
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@

/**
 * struct adc_jack_cond - condition to use an extcon state
 * @state:		the corresponding extcon state (if 0, this struct
 *			denotes the last adc_jack_cond element among the array)
 * @id:			the unique id of each external connector
 * @min_adc:		min adc value for this condition
 * @max_adc:		max adc value for this condition
 *
@@ -33,7 +33,7 @@
 * because when no adc_jack_cond is met, state = 0 is automatically chosen.
 */
struct adc_jack_cond {
	u32 state;	/* extcon state value. 0 if invalid */
	unsigned int id;
	u32 min_adc;
	u32 max_adc;
};