Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1447044

[PATCH 2/4] extcon: adc-jack: Remove the usage of extcon_set_state()

Path csiph.com!aioe.org!bofh.it!news.nic.it!robomod
From Chanwoo Choi <cw00.choi@samsung.com>
Newsgroups linux.kernel
Subject [PATCH 2/4] extcon: adc-jack: Remove the usage of extcon_set_state()
Date Wed, 20 Jul 2016 09:40:02 +0200
Message-ID <rWUgO-6SN-9@gated-at.bofh.it> (permalink)
References <rWUgN-6SN-3@gated-at.bofh.it>
X-Original-To linux-kernel@vger.kernel.org
X-Auditid cbfee68e-f79266d000001428-cc-578f2a88cb01
X-Mailer git-send-email 1.8.0
X-Brightmail-Tracker H4sIAAAAAAAAA+NgFjrALMWRmVeSWpSXmKPExsWyRsSkQLdDqz/cYOJpUYt/U26wW1z/8pzV 4vKuOWwWtxtXsDmweLyc+JvNo2/LKkaPz5vkApijuGxSUnMyy1KL9O0SuDKO3X/KVNAiU/Hx xnPWBsarYl2MnBwSAiYSU65fYYewxSQu3FvP1sXIxSEksIJR4ty0iSwwRVv2fgIrEhJYyihx drMcRNEXRolNl3qZQBJsAloS+1/cYAOxRQQUJDb3PmMFsZkFoiSOXP4C1MzBISzgK/G4WxzE ZBFQlfjcyQtSwSvgKtFzpZ0RYpWcxIc9j8BWcQq4SWw6/5wZYq2rxJaN58FukxD4ziZxY89S sCIWAQGJb5MPsYDMlBCQldh0gBlijqTEwRU3WCYwCi9gZFjFKJpakFxQnJReZKRXnJhbXJqX rpecn7uJERiwp/8969vBePOA9SFGAQ5GJR7eiIN94UKsiWXFlbmHGE2BNkxklhJNzgfGRV5J vKGxmZGFqYmpsZG5pZmSOG+C1M9gIYH0xJLU7NTUgtSi+KLSnNTiQ4xMHJxSDYxJTSrTr3rO EF99OMuCk2VG7+2K1Xnrk7rD3H/tO9ERL5+ducJI9r0u9847i55/0pr6TN38XLDpwqD3uw+/ 1Yvbz/SoI+DCoQXOd1aJm/yyfWb5cP18E2VdVYbtfDWP5p2ovPDmi6NO7ikbgzSBxXP1t5/0 P30uxsb31/TU/YF3Oy5eMkjh7VmpxFKckWioxVxUnAgASSmFQlMCAAA=
X-Brightmail-Tracker H4sIAAAAAAAAA+NgFuplkeLIzCtJLcpLzFFi42I5/e+xgG6HVn+4wdPnAhb/ptxgt7j+5Tmr xeVdc9gsbjeuYHNg8Xg58TebR9+WVYwenzfJBTBHNTDaZKQmpqQWKaTmJeenZOal2yp5B8c7 x5uaGRjqGlpamCsp5CXmptoqufgE6Lpl5gCtU1IoS8wpBQoFJBYXK+nbYZoQGuKmawHTGKHr GxIE12NkgAYS1jBmHLv/lKmgRabi443nrA2MV8W6GDk5JARMJLbs/cQOYYtJXLi3ng3EFhJY yihxdrNcFyMXkP2FUWLTpV4mkASbgJbE/hc3wIpEBBQkNvc+YwWxmQWiJI5c/gI0iINDWMBX 4nG3OIjJIqAq8bmTF6SCV8BVoudKOyPEKjmJD3sega3lFHCT2HT+OTPEWleJLRvPs01g5F3A yLCKUSK1ILmgOCk91zAvtVyvODG3uDQvXS85P3cTIzgqnkntYDy4y/0QowAHoxIPb8TBvnAh 1sSy4srcQ4wSHMxKIrxr1PrDhXhTEiurUovy44tKc1KLDzGaAt01kVlKNDkfGLF5JfGGxiZm RpZG5oYWRsbmSuK8j/+vCxMSSE8sSc1OTS1ILYLpY+LglGpgDM2YWv6vx+R9saOuaHSmk9XU z8u7OBOjrVcv8Iv486t0V27r+vdHJ/jLsizY7JgzTz9koy1nzIlvS9bKhq9buLhmcuOBRbF7 2M/y/mvnWClfb1n0kO2HYjHra9n0IEuPfY/PVnbpXjjE3RDLMCfT4eHRz0+563vMl3xM7+8X 5eyNjJyrejRQiaU4I9FQi7moOBEAwZqG5qACAAA=
Dlp-Filter Pass
X-Mtr 20000000000000000@CPGS
X-Cfilter-Loop Reflected
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 103
Organization linux.* mail to news gateway
X-Original-Cc cw00.choi@samsung.com, myungjoo.ham@samsung.com, ckeepax@opensource.wolfsonmicro.com
X-Original-Date Wed, 20 Jul 2016 16:38:45 +0900
X-Original-Message-ID <1469000327-15615-3-git-send-email-cw00.choi@samsung.com>
X-Original-References <1469000327-15615-1-git-send-email-cw00.choi@samsung.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1447044

Show key headers only | View raw


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: Chanwoo Choi <cw00.choi@samsung.com>
---
 drivers/extcon/extcon-adc-jack.c       | 26 ++++++++++++++------------
 include/linux/extcon/extcon-adc-jack.h |  4 ++--
 2 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/drivers/extcon/extcon-adc-jack.c b/drivers/extcon/extcon-adc-jack.c
index 48dec94b487b..e62e6cd7e00a 100644
--- a/drivers/extcon/extcon-adc-jack.c
+++ b/drivers/extcon/extcon-adc-jack.c
@@ -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);
diff --git a/include/linux/extcon/extcon-adc-jack.h b/include/linux/extcon/extcon-adc-jack.h
index ac85f2061351..a0e03b13b449 100644
--- a/include/linux/extcon/extcon-adc-jack.h
+++ b/include/linux/extcon/extcon-adc-jack.h
@@ -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;
 };
-- 
1.9.1

Back to linux.kernel | Previous | Next | Find similar | Unroll thread


Thread

[PATCH 2/4] extcon: adc-jack: Remove the usage of extcon_set_state() Chanwoo Choi <cw00.choi@samsung.com> - 2016-07-20 09:40 +0200

csiph-web