Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751168AbdDBFgL (ORCPT ); Sun, 2 Apr 2017 01:36:11 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:36002 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751036AbdDBFgJ (ORCPT ); Sun, 2 Apr 2017 01:36:09 -0400 From: Andi Shyti X-Google-Original-From: Andi Shyti To: MyungJoo Ham , Chanwoo Choi , Jaewon Kim Cc: Seung-Woo Kim , Krzysztof Kozlowski , linux-kernel@vger.kernel.org, Andi Shyti , Andi Shyti Subject: [PATCH v2 2/2] extcon: max77843: support USB accessories as external USB hosts Date: Sun, 2 Apr 2017 14:35:42 +0900 Message-Id: <20170402053542.29570-3-andi@etezian.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170402053542.29570-1-andi@etezian.org> References: <20170402053542.29570-1-andi@etezian.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3033 Lines: 81 From: Andi Shyti The ADC state defines the resistance that a USB device has in order to distinguish between devices. The external accessories (like the Gear VR) are defined as: MAX77843_MUIC_ADC_RESERVED_ACC_1 MAX77843_MUIC_ADC_RESERVED_ACC_2 MAX77843_MUIC_ADC_RESERVED_ACC_3 MAX77843_MUIC_ADC_RESERVED_ACC_4 MAX77843_MUIC_ADC_RESERVED_ACC_5 and they should be set as such in the extcon driver. Do not ignore interrupts generated by external accessories by handling cables of the type from any of the above. Do not handle any charging related action. This can be misleading as also external devices might have some power and in such cases the MUIC might consider them as power providers. In this case check the value of the adc and if it corresponds to one or the MAX77843_MUIC_ADC_RESERVED_ACC_*, return a no-action value (MAX77843_MUIC_CHG_NONE). Signed-off-by: Andi Shyti --- drivers/extcon/extcon-max77843.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/extcon/extcon-max77843.c b/drivers/extcon/extcon-max77843.c index fcdabc4b4025..154d65afd45a 100644 --- a/drivers/extcon/extcon-max77843.c +++ b/drivers/extcon/extcon-max77843.c @@ -271,6 +271,20 @@ static int max77843_muic_get_cable_type(struct max77843_muic_info *info, } else { *attached = true; switch (adc) { + /* + * the MAX77843_MUIC_ADC_RESERVED_ACC_* type are + * external eccessories and as such they don't + * need any charging action. In this case just + * return MAX77843_MUIC_CHG_NONE so that charging type + * interrupts are ignored. + */ + case MAX77843_MUIC_ADC_RESERVED_ACC_1: + case MAX77843_MUIC_ADC_RESERVED_ACC_2: + case MAX77843_MUIC_ADC_RESERVED_ACC_3: + case MAX77843_MUIC_ADC_RESERVED_ACC_4: + case MAX77843_MUIC_ADC_RESERVED_ACC_5: + info->prev_chg_type = MAX77843_MUIC_CHG_NONE; + break; case MAX77843_MUIC_ADC_GROUND: info->prev_chg_type = MAX77843_MUIC_CHG_GND; break; @@ -403,6 +417,11 @@ static int max77843_muic_adc_handler(struct max77843_muic_info *info) switch (cable_type) { case MAX77843_MUIC_ADC_GROUND: + case MAX77843_MUIC_ADC_RESERVED_ACC_1: + case MAX77843_MUIC_ADC_RESERVED_ACC_2: + case MAX77843_MUIC_ADC_RESERVED_ACC_3: + case MAX77843_MUIC_ADC_RESERVED_ACC_4: + case MAX77843_MUIC_ADC_RESERVED_ACC_5: ret = max77843_muic_adc_gnd_handler(info); if (ret < 0) return ret; @@ -427,11 +446,6 @@ static int max77843_muic_adc_handler(struct max77843_muic_info *info) case MAX77843_MUIC_ADC_REMOTE_S10_BUTTON: case MAX77843_MUIC_ADC_REMOTE_S11_BUTTON: case MAX77843_MUIC_ADC_REMOTE_S12_BUTTON: - case MAX77843_MUIC_ADC_RESERVED_ACC_1: - case MAX77843_MUIC_ADC_RESERVED_ACC_2: - case MAX77843_MUIC_ADC_RESERVED_ACC_3: - case MAX77843_MUIC_ADC_RESERVED_ACC_4: - case MAX77843_MUIC_ADC_RESERVED_ACC_5: case MAX77843_MUIC_ADC_AUDIO_DEVICE_TYPE2: case MAX77843_MUIC_ADC_PHONE_POWERED_DEV: case MAX77843_MUIC_ADC_TTY_CONVERTER: -- 2.11.0