public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: MyungJoo Ham <myungjoo.ham@samsung.com>,
	Chanwoo Choi <cw00.choi@samsung.com>
Cc: linux-kernel@vger.kernel.org, Hans de Goede <hdegoede@redhat.com>
Subject: [PATCH 4/8] extcon: axp288: Fix possibly reporting 2 cables in state true
Date: Mon, 19 Dec 2016 01:13:09 +0100	[thread overview]
Message-ID: <20161219001313.13402-4-hdegoede@redhat.com> (raw)
In-Reply-To: <20161219001313.13402-1-hdegoede@redhat.com>

When the charger type changes from e.g. SDP to CDP, without Vbus being
seen as low in between axp288_handle_chrg_det_event would set the state
for the new cable type to true, without clearing the state of the
previous cable type to false.

This commit fixes this and also gets rid of the function local static
cable variable, properly storing all drv state in the axp288_extcon_info
struct.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/extcon/extcon-axp288.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/extcon/extcon-axp288.c b/drivers/extcon/extcon-axp288.c
index 43b3637..ded0bd9 100644
--- a/drivers/extcon/extcon-axp288.c
+++ b/drivers/extcon/extcon-axp288.c
@@ -115,6 +115,7 @@ struct axp288_extcon_info {
 	int irq[EXTCON_IRQ_END];
 	struct extcon_dev *edev;
 	struct notifier_block extcon_nb;
+	unsigned int previous_cable;
 };
 
 /* Power up/down reason string array */
@@ -154,9 +155,9 @@ static void axp288_extcon_log_rsi(struct axp288_extcon_info *info)
 
 static int axp288_handle_chrg_det_event(struct axp288_extcon_info *info)
 {
-	static unsigned int cable;
 	int ret, stat, cfg, pwr_stat;
 	u8 chrg_type;
+	unsigned int cable = info->previous_cable;
 	bool vbus_attach = false;
 
 	ret = regmap_read(info->regmap, AXP288_PS_STAT_REG, &pwr_stat);
@@ -212,7 +213,11 @@ static int axp288_handle_chrg_det_event(struct axp288_extcon_info *info)
 			vbus_attach ? EXTCON_GPIO_MUX_SEL_SOC
 					: EXTCON_GPIO_MUX_SEL_PMIC);
 
-	extcon_set_state_sync(info->edev, cable, vbus_attach);
+	extcon_set_state_sync(info->edev, info->previous_cable, false);
+	if (vbus_attach) {
+		extcon_set_state_sync(info->edev, cable, vbus_attach);
+		info->previous_cable = cable;
+	}
 
 	return 0;
 
@@ -263,6 +268,7 @@ static int axp288_extcon_probe(struct platform_device *pdev)
 	info->dev = &pdev->dev;
 	info->regmap = axp20x->regmap;
 	info->regmap_irqc = axp20x->regmap_irqc;
+	info->previous_cable = axp288_extcon_cables[0];
 	if (pdata)
 		info->gpio_mux_cntl = pdata->gpio_mux_cntl;
 
-- 
2.9.3

  parent reply	other threads:[~2016-12-19  0:13 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20161219001318epcas5p1884657998ce4dd35c8ef8094fe00904f@epcas5p1.samsung.com>
2016-12-19  0:13 ` [PATCH 1/8] extcon: axp288: Remove dependency on non-existing platform_data Hans de Goede
2016-12-19  0:13   ` [PATCH 2/8] extcon: axp288: Remove usb_phy notification code Hans de Goede
2016-12-19  6:54     ` Chanwoo Choi
2016-12-19  0:13   ` [PATCH 3/8] extcon: axp288: Simplify axp288_handle_chrg_det_event Hans de Goede
2016-12-19  6:10     ` Chanwoo Choi
2016-12-19  0:13   ` Hans de Goede [this message]
2016-12-19  6:27     ` [PATCH 4/8] extcon: axp288: Fix possibly reporting 2 cables in state true Chanwoo Choi
2016-12-19  0:13   ` [PATCH 5/8] extcon: axp288: Make a couple of messages dev_info instead of dev_dbg Hans de Goede
2016-12-19  6:31     ` Chanwoo Choi
2016-12-19  0:13   ` [PATCH 6/8] extcon: axp288: Use vbus-valid instead of -present to determine cable presence Hans de Goede
2016-12-19  6:36     ` Chanwoo Choi
2016-12-19  0:13   ` [PATCH 7/8] extcon: axp288: Remove unnecessary irq?_en register writes Hans de Goede
2016-12-19  6:51     ` Chanwoo Choi
2016-12-19  0:13   ` [PATCH 8/8] extcon: axp288: Fix the module not auto-loading Hans de Goede
2016-12-19  6:51     ` Chanwoo Choi
2016-12-19  6:10   ` [PATCH 1/8] extcon: axp288: Remove dependency on non-existing platform_data Chanwoo Choi
2016-12-19  6:58     ` Chanwoo Choi
2016-12-19  8:18       ` Hans de Goede
2016-12-19  8:22         ` Chanwoo Choi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161219001313.13402-4-hdegoede@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=cw00.choi@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=myungjoo.ham@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox