Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757946AbcDEJlw (ORCPT ); Tue, 5 Apr 2016 05:41:52 -0400 Received: from mail-yw0-f170.google.com ([209.85.161.170]:32958 "EHLO mail-yw0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757924AbcDEJlu (ORCPT ); Tue, 5 Apr 2016 05:41:50 -0400 MIME-Version: 1.0 In-Reply-To: <20160405075612.GB31351@shlinux2.ap.freescale.net> References: <6c594cc66fd06b575b04cc8bb0fe0374d0501d4d.1459494744.git.baolin.wang@linaro.org> <20160405075612.GB31351@shlinux2.ap.freescale.net> Date: Tue, 5 Apr 2016 17:41:44 +0800 Message-ID: Subject: Re: [PATCH v9 1/4] gadget: Introduce the usb charger framework From: Baolin Wang To: Peter Chen Cc: Felipe Balbi , Greg KH , Sebastian Reichel , Dmitry Eremin-Solenikov , David Woodhouse , Peter Chen , Alan Stern , r.baldyga@samsung.com, Yoshihiro Shimoda , Lee Jones , Mark Brown , Charles Keepax , patches@opensource.wolfsonmicro.com, Linux PM list , USB , device-mainlining@lists.linuxfoundation.org, LKML Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1776 Lines: 63 On 5 April 2016 at 15:56, Peter Chen wrote: > On Fri, Apr 01, 2016 at 03:21:49PM +0800, Baolin Wang wrote: >> + >> +int devm_usb_charger_register(struct device *dev, >> + struct usb_charger *uchger) >> +{ >> + struct usb_charger **ptr; >> + int ret; >> + >> + ptr = devres_alloc(devm_uchger_dev_unreg, sizeof(*ptr), GFP_KERNEL); >> + if (!ptr) >> + return -ENOMEM; >> + >> + ret = usb_charger_register(dev, uchger); >> + if (ret) { >> + devres_free(ptr); >> + return ret; >> + } >> + >> + *ptr = uchger; >> + devres_add(dev, ptr); >> + >> + return 0; >> +} >> +EXPORT_SYMBOL_GPL(devm_usb_charger_register); > > When the above API is expected to call? Can we use the USB charger > without USB gadget? I think this is open for user to do their specific initialization for usb charger. That depends on how to initialize your usb charger structure. > >> + >> +int usb_charger_init(struct usb_gadget *ugadget) >> +{ >> + struct usb_charger *uchger; >> + struct extcon_dev *edev; >> + struct power_supply *psy; >> + int ret; >> + >> + uchger = kzalloc(sizeof(struct usb_charger), GFP_KERNEL); >> + if (!uchger) >> + return -ENOMEM; >> + >> + uchger->type = UNKNOWN_TYPE; >> + uchger->state = USB_CHARGER_DEFAULT; >> + uchger->id = -1; >> + >> + if (ugadget->speed >= USB_SPEED_SUPER) >> + uchger->cur_limit.sdp_cur_limit = DEFAULT_SDP_CUR_LIMIT_SS; >> + else >> + uchger->cur_limit.sdp_cur_limit = DEFAULT_SDP_CUR_LIMIT; > > We still haven't known bus speed here, it is better do it after > setting configuration has finished. OK. Make sense. -- Baolin.wang Best Regards