From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1763165AbdJRJpJ (ORCPT ); Wed, 18 Oct 2017 05:45:09 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:24796 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755822AbdJRJpG (ORCPT ); Wed, 18 Oct 2017 05:45:06 -0400 X-AuditID: b6c32a48-c0fff70000001005-7e-59e7229f9b1c MIME-version: 1.0 Content-transfer-encoding: 8BIT Content-type: text/plain; charset="UTF-8" Message-id: <59E722A0.6050801@samsung.com> Date: Wed, 18 Oct 2017 18:45:04 +0900 From: Chanwoo Choi Organization: Samsung Electronics User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 To: Marek Szyprowski , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org Cc: MyungJoo Ham , Lee Jones , Bartlomiej Zolnierkiewicz Subject: Re: [PATCH 2/2] extcon: max88743: Add support for SmartDock accessory In-reply-to: <20171018092802.25390-3-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA02Se0hTcRTH+Xm3u7vo1q+pdbKyeaEoybXNbV7DhT2oQUIDIXpiN/2xWW6T e2dlgSjkI0dRWCSmGBSaRg17mJU91MwKrLB3+QgKjR5/RKUr6HGvt6j/vud7PucczuEwlOGj No7J9QeJ6BfyOHqCprVrviOpnhtZZz58ledbqsNafuhrN+IfXq6l+er716L40zcHdPzLkpN0 Ou3qf9JOu/afb0auz2fj3dR6kuYlQg4RjcSfHcjJ9Xuc3KrMrGVZdofZkmRJ5VM4o1/wESe3 PMOdtCI3T57LGbcLeQWy5RYkiVu4OE0MFASJ0RuQgk5ug8ViNVnMKSar1WqyJW9aZLXLyGbi PXO8HOVfdO+8HNlLFaOO9EqkZwDboPF5p6YSTWAMuA1B3UAVpQZjCJ4Ofdb+pW63Rv5QVxDc qWpCSoLFUyBSNSgnGIbCs+Fm3zbFpvB8uHAlrFP5QQSvfoxSKp8IY7++0QqvwXOg+4NRsWnZ vv72Ga3oyTgBHkdej7ePxWvhUv2oTtExWITvxZXjPSlciqD3brFO6RON3fAtzCqMHi+GWz0j WoUB3EbDu+sRWl1gOfTu66BUHQ3ves7rVD0DhptbkFpQjuBc7aBGDSoQDDWV/Fk/Ge5WlkSp q02Ciq4f45MBs1BRZlARF/S+bkWqXgIvRj8hdftuBH0l7fQBFF/z38Fq/h2s5r+DHUNUM5pK 8iWfh0jWfJtJEnxSgd9jyg74zqLxV0t0taEb9zI6EWYQN5GNJAyvM2iF7VKhrxMBQ3ExLPVJ ttgcoXAXEQNZYkEekTqRXb73QSouNjsgP64/mGWxpZptDoc1xcHLHzaNLWp9staAPUKQbCMk n4h/66IYfVwxQn1FW+JnhZpRv559pC9Kan9zqqJ6a9TReV3sWKiw1lNn1+lLl6aaY99Pj236 MvNQtG9owZoG+6zC3WXmcGZb+OTcHsPo04Nel3P3+upS6uWWSz+fRQj03w+tHuw9k7CSFycH nUdweYhraDkxsGdj4v66Bu8DC9cYyjx1bWRHOqeRvIIlkRIl4TdzgvdwgAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrHLMWRmVeSWpSXmKPExsVy+t9jAd35Ss8jDZoOCFlsnLGe1eL+16OM Fpd3zWGzmHF+H5PF2iN32S1uN65gc2DzuHNtD5tH35ZVjB6fN8kFMEdx2aSk5mSWpRbp2yVw Zaxb3M5YsD2gYtePTuYGxoMOXYycHBICJhIntv1gAbGFBHYySmxdyApi8woISvyYfA8ozsHB LCAvceRSNkiYWUBdYtK8RcxdjFxA5Q8YJW4t+wpVryXx/f9PNpB6FgFViaNvFEDCbEDh/S9u sIHY/AKKEld/PGYEKREViJDoPlEJEhYRKJI4cuo9O8hIZoFWRonjN+8zgySEBfwkWheshdp1 lFFi8ZtrTCAJTgE7iWPHn7NOYBSYheTUWQinzkJy6gJG5lWMkqkFxbnpucVGBUZ5qeV6xYm5 xaV56XrJ+bmbGIGhvO2wVv8OxsdL4g8xCnAwKvHw/lB8FinEmlhWXJl7iFGCg1lJhJf5I1CI NyWxsiq1KD++qDQntfgQozQHi5I4L3/+sUghgfTEktTs1NSC1CKYLBMHp1QDoymHgdS7WPOV x9cs4d2spxRZLey+5NGHRXFhEc3r7tS+7c9k3+0RvieOZbZowSm9o9XKNWe5ZBO47tQ9/zKt 6f2fmbLxr1x2X252yDXynylc6/hgweNZVSsYtszxyC9nj0nXcPadL6ZfEvHo5IuNbZsyT/16 mfB0yxepuF8OLH+ElDgvJE1co8RSnJFoqMVcVJwIAIhRZehhAgAA X-CMS-MailID: 20171018094503epcas2p10c2a27d69f95b795d7a0681d1c29b132 X-Msg-Generator: CA X-Sender-IP: 182.195.42.143 X-Local-Sender: =?UTF-8?B?7LWc7LCs7JqwG1RpemVuIFBsYXRmb3JtIExhYihTL1fshLw=?= =?UTF-8?B?7YSwKRvsgrzshLHsoITsnpAbU2VuaW9yIEVuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?Q2hhbndvbyBDaG9pG1RpemVuIFBsYXRmb3JtIExhYi4bU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtTZW5pb3IgRW5naW5lZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG1RFTEUbQzEwVjgxMTE=?= CMS-TYPE: 102P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20171018092808eucas1p1752a01e42342115ff15ce76cf3a8ec1d X-RootMTR: 20171018092808eucas1p1752a01e42342115ff15ce76cf3a8ec1d References: <20171018092802.25390-1-m.szyprowski@samsung.com> <20171018092802.25390-3-m.szyprowski@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Marek, Also, this patch need to fix the patch subject as following: - max88743 -> max77843 If you fix the subject, feel free to add my acked-tag. Acked-by: Chanwoo Choi After finishing the review from MFD maintainer, I'll merge them. Regards, Chanwoo Choi On 2017년 10월 18일 18:28, Marek Szyprowski wrote: > SmartDock uses ADC_RESERVED_ACC_3 (0x10) ADC ID type and provides following > features: > 1. USB host with embedded USB hub (2-4 ports) for mice, keyboard, etc, > 2. MHL for video output, > 3. charging. > > Tested with Unitek Y-2165 MHL+OTG Hub Smart Phone Dock. > > Signed-off-by: Marek Szyprowski > --- > drivers/extcon/extcon-max77843.c | 77 +++++++++++++++++++++++++++++------- > include/linux/mfd/max77843-private.h | 2 + > 2 files changed, 65 insertions(+), 14 deletions(-) > > diff --git a/drivers/extcon/extcon-max77843.c b/drivers/extcon/extcon-max77843.c > index 217c743405f8..cc28d2622ae7 100644 > --- a/drivers/extcon/extcon-max77843.c > +++ b/drivers/extcon/extcon-max77843.c > @@ -80,7 +80,7 @@ enum max77843_muic_accessory_type { > MAX77843_MUIC_ADC_REMOTE_S12_BUTTON, > MAX77843_MUIC_ADC_RESERVED_ACC_1, > MAX77843_MUIC_ADC_RESERVED_ACC_2, > - MAX77843_MUIC_ADC_RESERVED_ACC_3, > + MAX77843_MUIC_ADC_RESERVED_ACC_3, /* SmartDock */ > MAX77843_MUIC_ADC_RESERVED_ACC_4, > MAX77843_MUIC_ADC_RESERVED_ACC_5, > MAX77843_MUIC_ADC_AUDIO_DEVICE_TYPE2, > @@ -119,6 +119,7 @@ enum max77843_muic_charger_type { > MAX77843_MUIC_CHG_SPECIAL_BIAS, > MAX77843_MUIC_CHG_RESERVED, > MAX77843_MUIC_CHG_GND, > + MAX77843_MUIC_CHG_DOCK, > }; > > static const unsigned int max77843_extcon_cable[] = { > @@ -130,6 +131,7 @@ static const unsigned int max77843_extcon_cable[] = { > EXTCON_CHG_USB_FAST, > EXTCON_CHG_USB_SLOW, > EXTCON_DISP_MHL, > + EXTCON_DOCK, > EXTCON_JIG, > EXTCON_NONE, > }; > @@ -200,7 +202,7 @@ static const struct regmap_irq_chip max77843_muic_irq_chip = { > }; > > static int max77843_muic_set_path(struct max77843_muic_info *info, > - u8 val, bool attached) > + u8 val, bool attached, bool nobccomp) > { > struct max77693_dev *max77843 = info->max77843; > int ret = 0; > @@ -210,10 +212,16 @@ static int max77843_muic_set_path(struct max77843_muic_info *info, > ctrl1 = val; > else > ctrl1 = MAX77843_MUIC_CONTROL1_SW_OPEN; > + if (nobccomp) { > + /* Disable BC1.2 protocol and force manual switch control */ > + ctrl1 |= MAX77843_MUIC_CONTROL1_NOBCCOMP_MASK; > + } > > ret = regmap_update_bits(max77843->regmap_muic, > MAX77843_MUIC_REG_CONTROL1, > - MAX77843_MUIC_CONTROL1_COM_SW, ctrl1); > + MAX77843_MUIC_CONTROL1_COM_SW | > + MAX77843_MUIC_CONTROL1_NOBCCOMP_MASK, > + ctrl1); > if (ret < 0) { > dev_err(info->dev, "Cannot switch MUIC port\n"); > return ret; > @@ -303,6 +311,19 @@ static int max77843_muic_get_cable_type(struct max77843_muic_info *info, > break; > } > > + if (adc == MAX77843_MUIC_ADC_RESERVED_ACC_3) { /* SmartDock */ > + if (chg_type == MAX77843_MUIC_CHG_NONE) { > + *attached = false; > + cable_type = info->prev_chg_type; > + info->prev_chg_type = MAX77843_MUIC_CHG_NONE; > + } else { > + *attached = true; > + cable_type = MAX77843_MUIC_CHG_DOCK; > + info->prev_chg_type = MAX77843_MUIC_CHG_DOCK; > + } > + break; > + } > + > if (chg_type == MAX77843_MUIC_CHG_NONE) { > *attached = false; > cable_type = info->prev_chg_type; > @@ -365,7 +386,7 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info) > case MAX77843_MUIC_GND_USB_HOST_VB: > ret = max77843_muic_set_path(info, > MAX77843_MUIC_CONTROL1_SW_USB, > - attached); > + attached, false); > if (ret < 0) > return ret; > > @@ -376,7 +397,7 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info) > case MAX77843_MUIC_GND_MHL: > ret = max77843_muic_set_path(info, > MAX77843_MUIC_CONTROL1_SW_OPEN, > - attached); > + attached, false); > if (ret < 0) > return ret; > > @@ -412,7 +433,7 @@ static int max77843_muic_jig_handler(struct max77843_muic_info *info, > return -EINVAL; > } > > - ret = max77843_muic_set_path(info, path, attached); > + ret = max77843_muic_set_path(info, path, attached, false); > if (ret < 0) > return ret; > > @@ -421,6 +442,26 @@ static int max77843_muic_jig_handler(struct max77843_muic_info *info, > return 0; > } > > +static int max77843_muic_dock_handler(struct max77843_muic_info *info, > + bool attached) > +{ > + int ret; > + > + dev_dbg(info->dev, "external connector is %s (adc: 0x10)\n", > + attached ? "attached" : "detached"); > + > + ret = max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_USB, > + attached, attached); > + if (ret < 0) > + return ret; > + > + extcon_set_state_sync(info->edev, EXTCON_DISP_MHL, attached); > + extcon_set_state_sync(info->edev, EXTCON_USB_HOST, attached); > + extcon_set_state_sync(info->edev, EXTCON_DOCK, attached); > + > + return 0; > +} > + > static int max77843_muic_adc_handler(struct max77843_muic_info *info) > { > int ret, cable_type; > @@ -435,6 +476,11 @@ static int max77843_muic_adc_handler(struct max77843_muic_info *info) > info->prev_cable_type); > > switch (cable_type) { > + case MAX77843_MUIC_ADC_RESERVED_ACC_3: /* SmartDock */ > + ret = max77843_muic_dock_handler(info, attached); > + if (ret < 0) > + return ret; > + break; > case MAX77843_MUIC_ADC_GROUND: > ret = max77843_muic_adc_gnd_handler(info); > if (ret < 0) > @@ -462,7 +508,6 @@ static int max77843_muic_adc_handler(struct max77843_muic_info *info) > 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: > @@ -506,7 +551,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) > case MAX77843_MUIC_CHG_USB: > ret = max77843_muic_set_path(info, > MAX77843_MUIC_CONTROL1_SW_USB, > - attached); > + attached, false); > if (ret < 0) > return ret; > > @@ -517,7 +562,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) > case MAX77843_MUIC_CHG_DOWNSTREAM: > ret = max77843_muic_set_path(info, > MAX77843_MUIC_CONTROL1_SW_OPEN, > - attached); > + attached, false); > if (ret < 0) > return ret; > > @@ -527,7 +572,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) > case MAX77843_MUIC_CHG_DEDICATED: > ret = max77843_muic_set_path(info, > MAX77843_MUIC_CONTROL1_SW_OPEN, > - attached); > + attached, false); > if (ret < 0) > return ret; > > @@ -537,7 +582,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) > case MAX77843_MUIC_CHG_SPECIAL_500MA: > ret = max77843_muic_set_path(info, > MAX77843_MUIC_CONTROL1_SW_OPEN, > - attached); > + attached, false); > if (ret < 0) > return ret; > > @@ -547,7 +592,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) > case MAX77843_MUIC_CHG_SPECIAL_1A: > ret = max77843_muic_set_path(info, > MAX77843_MUIC_CONTROL1_SW_OPEN, > - attached); > + attached, false); > if (ret < 0) > return ret; > > @@ -566,6 +611,9 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) > extcon_set_state_sync(info->edev, EXTCON_CHG_USB_DCP, > false); > break; > + case MAX77843_MUIC_CHG_DOCK: > + extcon_set_state_sync(info->edev, EXTCON_CHG_USB_DCP, attached); > + break; > case MAX77843_MUIC_CHG_NONE: > break; > default: > @@ -574,7 +622,7 @@ static int max77843_muic_chg_handler(struct max77843_muic_info *info) > attached ? "attached" : "detached", chg_type); > > max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_OPEN, > - attached); > + attached, false); > return -EINVAL; > } > > @@ -814,7 +862,8 @@ static int max77843_muic_probe(struct platform_device *pdev) > max77843_muic_set_debounce_time(info, MAX77843_DEBOUNCE_TIME_25MS); > > /* Set initial path for UART */ > - max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_UART, true); > + max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_UART, true, > + false); > > /* Check revision number of MUIC device */ > ret = regmap_read(max77843->regmap_muic, MAX77843_MUIC_REG_ID, &id); > diff --git a/include/linux/mfd/max77843-private.h b/include/linux/mfd/max77843-private.h > index 0223cd5941c8..b8908bf8d315 100644 > --- a/include/linux/mfd/max77843-private.h > +++ b/include/linux/mfd/max77843-private.h > @@ -350,6 +350,7 @@ enum max77843_irq_muic { > /* MAX77843 CONTROL register */ > #define MAX77843_MUIC_CONTROL1_COMP1SW_SHIFT 0 > #define MAX77843_MUIC_CONTROL1_COMP2SW_SHIFT 3 > +#define MAX77843_MUIC_CONTROL1_NOBCCOMP_SHIFT 6 > #define MAX77843_MUIC_CONTROL1_IDBEN_SHIFT 7 > #define MAX77843_MUIC_CONTROL2_LOWPWR_SHIFT 0 > #define MAX77843_MUIC_CONTROL2_ADCEN_SHIFT 1 > @@ -366,6 +367,7 @@ enum max77843_irq_muic { > #define MAX77843_MUIC_CONTROL1_COMP1SW_MASK (0x7 << MAX77843_MUIC_CONTROL1_COMP1SW_SHIFT) > #define MAX77843_MUIC_CONTROL1_COMP2SW_MASK (0x7 << MAX77843_MUIC_CONTROL1_COMP2SW_SHIFT) > #define MAX77843_MUIC_CONTROL1_IDBEN_MASK BIT(MAX77843_MUIC_CONTROL1_IDBEN_SHIFT) > +#define MAX77843_MUIC_CONTROL1_NOBCCOMP_MASK BIT(MAX77843_MUIC_CONTROL1_NOBCCOMP_SHIFT) > #define MAX77843_MUIC_CONTROL2_LOWPWR_MASK BIT(MAX77843_MUIC_CONTROL2_LOWPWR_SHIFT) > #define MAX77843_MUIC_CONTROL2_ADCEN_MASK BIT(MAX77843_MUIC_CONTROL2_ADCEN_SHIFT) > #define MAX77843_MUIC_CONTROL2_CPEN_MASK BIT(MAX77843_MUIC_CONTROL2_CPEN_SHIFT) > -- Best Regards, Chanwoo Choi Samsung Electronics