From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753302AbcDOAns (ORCPT ); Thu, 14 Apr 2016 20:43:48 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:50853 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752790AbcDOAnm (ORCPT ); Thu, 14 Apr 2016 20:43:42 -0400 X-AuditID: cbfee68d-f79e86d0000012da-aa-5710393bf077 From: Chanwoo Choi To: sre@kernel.org, dbaryshkov@gmail.com, dwmw2@infradead.org Cc: cw00.choi@samsung.com, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org Subject: [RESEND PATCH 2/3] power: axp288_charger: Replace deprecatd API of extcon Date: Fri, 15 Apr 2016 09:43:35 +0900 Message-id: <1460681016-2770-3-git-send-email-cw00.choi@samsung.com> X-Mailer: git-send-email 1.8.0 In-reply-to: <1460681016-2770-1-git-send-email-cw00.choi@samsung.com> References: <1460681016-2770-1-git-send-email-cw00.choi@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrBLMWRmVeSWpSXmKPExsWyRsSkQNfaUiDc4M8mRYvrX56zWkx68p7Z Yv6Rc6wWE1dOZra4vGsOm8Xn3iOMFqd3lziwe+ycdZfdY/MKLY9NqzrZPPq2rGL0+LxJLoA1 issmJTUnsyy1SN8ugSvj5sud7AVbLSp6F65gamB8pN/FyMkhIWAi8XPDBlYIW0ziwr31bF2M XBxCAisYJX7N6mCCKbq1dDUTRGIWo8Tqu7eZIZwvjBJnvy9mBKliE9CS2P/iBhuILSJgK9Hz 9CAziM0skC/x7vIisLiwQIjE0v4pQOs4OFgEVCVuPjYFCfMKuEjcmP+THWKZnMSHPY/YQUo4 BVwljv1KBwkLAZVM23KQEWSthMA8dokNa7+DXc0iICDxbfIhFpB6CQFZiU0HmCHGSEocXHGD ZQKj8AJGhlWMoqkFyQXFSelFhnrFibnFpXnpesn5uZsYgQF++t+z3h2Mtw9YH2IU4GBU4uG1 qOcPF2JNLCuuzD3EaAq0YSKzlGhyPjCO8kriDY3NjCxMTUyNjcwtzZTEeRWlfgYLCaQnlqRm p6YWpBbFF5XmpBYfYmTi4JRqYHwQnli2V0/ip40J35b5iSWnznl0Jhla7Hu1YotgX1vm9ror WsWldnen7z9/TCcwPG6h63Gf4vD+a4YiR7707rirHqm1fcEuLo1l32S8+652hy9rY8qS5Pr2 XUDgnPgWwYMpH4x+W1+/NInl7M5V8dfXaqzvO/Eofzr/o75tkhc/rneI+6f54rwSS3FGoqEW c1FxIgCDC7QCawIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKIsWRmVeSWpSXmKPExsVy+t9jQV1rS4FwgztXpS2uf3nOajHpyXtm i/lHzrFaTFw5mdni8q45bBafe48wWpzeXeLA7rFz1l12j80rtDw2repk8+jbsorR4/MmuQDW qAZGm4zUxJTUIoXUvOT8lMy8dFsl7+B453hTMwNDXUNLC3MlhbzE3FRbJRefAF23zBygK5QU yhJzSoFCAYnFxUr6dpgmhIa46VrANEbo+oYEwfUYGaCBhDWMGTdf7mQv2GpR0btwBVMD4yP9 LkZODgkBE4lbS1czQdhiEhfurWfrYuTiEBKYxSix+u5tZgjnC6PE2e+LGUGq2AS0JPa/uMEG YosI2Er0PD3IDGIzC+RLvLu8CCwuLBAisbR/CmsXIwcHi4CqxM3HpiBhXgEXiRvzf7JDLJOT +LDnETtICaeAq8SxX+kgYSGgkmlbDjJOYORdwMiwilEitSC5oDgpPdcoL7Vcrzgxt7g0L10v OT93EyM4ip5J72A8vMv9EKMAB6MSD++DGv5wIdbEsuLK3EOMEhzMSiK8FaYC4UK8KYmVValF +fFFpTmpxYcYTYHOmsgsJZqcD4zwvJJ4Q2MTMyNLI3NDCyNjcyVx3sf/14UJCaQnlqRmp6YW pBbB9DFxcEo1MPaIVRoxTHWX19bp2cn5ftvtNOWbe0Oa/krqMhz9uaDL81uaMOfFo4kSpQbr I7qZ7u21OjDh7o2a1iePCvJZv//ftWj9vI21kn0ijy9rCmbk1DjPvM+nNKXxleeFfTdKpPw/ /pwZXzGHT3ID+0HdF54OpzVjkpZGnvYOkAuvkKg9IfkzXMLVQomlOCPRUIu5qDgRALhjSPG4 AgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch removes the deprecated notifier API of extcon framework and then use the new extcon API[2] with the unique id[1] to indicate the each external connector. Alter deprecated API as following: - extcon_register_interest() -> extcon_register_notifier() - extcon_unregister_interest() -> extcon_unregister_notifier() - extcon_get_cable_state() -> extcon_get_cable_state_() And, extcon alters the name of USB charger connector in patch[3] as following: - EXTCON_CHG_USB_SDP /* Standard Downstream Port */ - EXTCON_CHG_USB_DCP /* Dedicated Charging Port */ - EXTCON_CHG_USB_CDP /* Charging Downstream Port */ - EXTCON_CHG_USB_ACA /* Accessory Charger Adapter */ [1] Commit 2a9de9c0f08d61 - ("extcon: Use the unique id for external connector instead of string) [2] Commit 046050f6e623e4 - ("extcon: Update the prototype of extcon_register_notifier() with enum extcon [3] Commit 11eecf910bd81d - ("extcon: Modify the id and name of external connector") Signed-off-by: Chanwoo Choi --- drivers/power/axp288_charger.c | 77 +++++++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 24 deletions(-) diff --git a/drivers/power/axp288_charger.c b/drivers/power/axp288_charger.c index e4d569f57acc..e5c2569befa6 100644 --- a/drivers/power/axp288_charger.c +++ b/drivers/power/axp288_charger.c @@ -129,10 +129,6 @@ #define AXP288_EXTCON_DEV_NAME "axp288_extcon" -#define AXP288_EXTCON_SLOW_CHARGER "SLOW-CHARGER" -#define AXP288_EXTCON_DOWNSTREAM_CHARGER "CHARGE-DOWNSTREAM" -#define AXP288_EXTCON_FAST_CHARGER "FAST-CHARGER" - enum { VBUS_OV_IRQ = 0, CHARGE_DONE_IRQ, @@ -158,7 +154,7 @@ struct axp288_chrg_info { /* OTG/Host mode */ struct { struct work_struct work; - struct extcon_specific_cable_nb cable; + struct extcon_dev *cable; struct notifier_block id_nb; bool id_short; } otg; @@ -586,17 +582,15 @@ static void axp288_charger_extcon_evt_worker(struct work_struct *work) bool old_connected = info->cable.connected; /* Determine cable/charger type */ - if (extcon_get_cable_state(edev, AXP288_EXTCON_SLOW_CHARGER) > 0) { + if (extcon_get_cable_state_(edev, EXTCON_CHG_USB_SDP) > 0) { dev_dbg(&info->pdev->dev, "USB SDP charger is connected"); info->cable.connected = true; info->cable.chg_type = POWER_SUPPLY_TYPE_USB; - } else if (extcon_get_cable_state(edev, - AXP288_EXTCON_DOWNSTREAM_CHARGER) > 0) { + } else if (extcon_get_cable_state_(edev, EXTCON_CHG_USB_CDP) > 0) { dev_dbg(&info->pdev->dev, "USB CDP charger is connected"); info->cable.connected = true; info->cable.chg_type = POWER_SUPPLY_TYPE_USB_CDP; - } else if (extcon_get_cable_state(edev, - AXP288_EXTCON_FAST_CHARGER) > 0) { + } else if (extcon_get_cable_state_(edev, EXTCON_CHG_USB_DCP) > 0) { dev_dbg(&info->pdev->dev, "USB DCP charger is connected"); info->cable.connected = true; info->cable.chg_type = POWER_SUPPLY_TYPE_USB_DCP; @@ -692,8 +686,8 @@ static int axp288_charger_handle_otg_evt(struct notifier_block *nb, { struct axp288_chrg_info *info = container_of(nb, struct axp288_chrg_info, otg.id_nb); - struct extcon_dev *edev = param; - int usb_host = extcon_get_cable_state(edev, "USB-Host"); + struct extcon_dev *edev = info->otg.cable; + int usb_host = extcon_get_cable_state_(edev, EXTCON_USB_HOST); dev_dbg(&info->pdev->dev, "external connector USB-Host is %s\n", usb_host ? "attached" : "detached"); @@ -848,10 +842,33 @@ static int axp288_charger_probe(struct platform_device *pdev) /* Register for extcon notification */ INIT_WORK(&info->cable.work, axp288_charger_extcon_evt_worker); info->cable.nb.notifier_call = axp288_charger_handle_cable_evt; - ret = extcon_register_notifier(info->cable.edev, EXTCON_NONE, &info->cable.nb); + ret = extcon_register_notifier(info->cable.edev, EXTCON_CHG_USB_SDP, + &info->cable.nb); + if (ret) { + dev_err(&info->pdev->dev, + "failed to register extcon notifier for SDP %d\n", ret); + return ret; + } + + ret = extcon_register_notifier(info->cable.edev, EXTCON_CHG_USB_CDP, + &info->cable.nb); + if (ret) { + dev_err(&info->pdev->dev, + "failed to register extcon notifier for CDP %d\n", ret); + extcon_unregister_notifier(info->cable.edev, + EXTCON_CHG_USB_SDP, &info->cable.nb); + return ret; + } + + ret = extcon_register_notifier(info->cable.edev, EXTCON_CHG_USB_DCP, + &info->cable.nb); if (ret) { dev_err(&info->pdev->dev, - "failed to register extcon notifier %d\n", ret); + "failed to register extcon notifier for DCP %d\n", ret); + extcon_unregister_notifier(info->cable.edev, + EXTCON_CHG_USB_SDP, &info->cable.nb); + extcon_unregister_notifier(info->cable.edev, + EXTCON_CHG_USB_CDP, &info->cable.nb); return ret; } @@ -871,14 +888,14 @@ static int axp288_charger_probe(struct platform_device *pdev) /* Register for OTG notification */ INIT_WORK(&info->otg.work, axp288_charger_otg_evt_worker); info->otg.id_nb.notifier_call = axp288_charger_handle_otg_evt; - ret = extcon_register_interest(&info->otg.cable, NULL, "USB-Host", + ret = extcon_register_notifier(info->otg.cable, EXTCON_USB_HOST, &info->otg.id_nb); if (ret) dev_warn(&pdev->dev, "failed to register otg notifier\n"); - if (info->otg.cable.edev) - info->otg.id_short = extcon_get_cable_state( - info->otg.cable.edev, "USB-Host"); + if (info->otg.cable) + info->otg.id_short = extcon_get_cable_state_( + info->otg.cable, EXTCON_USB_HOST); /* Register charger interrupts */ for (i = 0; i < CHRG_INTR_END; i++) { @@ -905,11 +922,17 @@ static int axp288_charger_probe(struct platform_device *pdev) return 0; intr_reg_failed: - if (info->otg.cable.edev) - extcon_unregister_interest(&info->otg.cable); + if (info->otg.cable) + extcon_unregister_notifier(info->otg.cable, EXTCON_USB_HOST, + &info->otg.id_nb); power_supply_unregister(info->psy_usb); psy_reg_failed: - extcon_unregister_notifier(info->cable.edev, EXTCON_NONE, &info->cable.nb); + extcon_unregister_notifier(info->cable.edev, EXTCON_CHG_USB_SDP, + &info->cable.nb); + extcon_unregister_notifier(info->cable.edev, EXTCON_CHG_USB_SDP, + &info->cable.nb); + extcon_unregister_notifier(info->cable.edev, EXTCON_CHG_USB_DCP, + &info->cable.nb); return ret; } @@ -917,10 +940,16 @@ static int axp288_charger_remove(struct platform_device *pdev) { struct axp288_chrg_info *info = dev_get_drvdata(&pdev->dev); - if (info->otg.cable.edev) - extcon_unregister_interest(&info->otg.cable); + if (info->otg.cable) + extcon_unregister_notifier(info->otg.cable, EXTCON_USB_HOST, + &info->otg.id_nb); - extcon_unregister_notifier(info->cable.edev, EXTCON_NONE, &info->cable.nb); + extcon_unregister_notifier(info->cable.edev, EXTCON_CHG_USB_SDP, + &info->cable.nb); + extcon_unregister_notifier(info->cable.edev, EXTCON_CHG_USB_SDP, + &info->cable.nb); + extcon_unregister_notifier(info->cable.edev, EXTCON_CHG_USB_DCP, + &info->cable.nb); power_supply_unregister(info->psy_usb); return 0; -- 1.9.1