Message ID | 20250120111702.3738161-1-prashanth.k@oss.qualcomm.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | usb: gadget: Increase the limit of USB_GADGET_VBUS_DRAW to 900mA | expand |
On Mon, Jan 20, 2025 at 04:47:02PM +0530, Prashanth K wrote: > Currently CONFIG_USB_GADGET_VBUS_DRAW limits the maximum current > drawn from Vbus to be up to 500mA. However USB gadget operating > in SuperSpeed or higher can draw up to 900mA. Also, MaxPower in > ConfigFS takes its default value from this config. Hence increase > the allowed range of CONFIG_USB_GADGET_VBUS_DRAW to 900mA. Is this the sort of thing that really needs to be a Kconfig option? Why not make the decision at runtime, based on the needs of the gadget or function drivers and the connection speed? Alan Stern > Signed-off-by: Prashanth K <prashanth.k@oss.qualcomm.com> > --- > drivers/usb/gadget/Kconfig | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig > index 76521555e3c1..904652c37385 100644 > --- a/drivers/usb/gadget/Kconfig > +++ b/drivers/usb/gadget/Kconfig > @@ -97,8 +97,8 @@ config USB_GADGET_DEBUG_FS > to conserve kernel memory, say "N". > > config USB_GADGET_VBUS_DRAW > - int "Maximum VBUS Power usage (2-500 mA)" > - range 2 500 > + int "Maximum VBUS Power usage (2-900 mA)" > + range 2 900 > default 2 > help > Some devices need to draw power from USB when they are > @@ -107,8 +107,11 @@ config USB_GADGET_VBUS_DRAW > such as an AC adapter or batteries. > > Enter the maximum power your device draws through USB, in > - milliAmperes. The permitted range of values is 2 - 500 mA; > - 0 mA would be legal, but can make some hosts misbehave. > + milliAmperes. The permitted range of values depends on the > + connection speed, for SuperSpeed and higher it's 2 - 900 mA, > + but connections with High-Speed or slower can draw power > + ranging from 2 - 500 mA; 0 mA would be legal, but can make > + some hosts misbehave. > > This value will be used except for system-specific gadget > drivers that have more specific information. > -- > 2.25.1 > >
On 20-01-25 08:17 pm, Alan Stern wrote: > On Mon, Jan 20, 2025 at 04:47:02PM +0530, Prashanth K wrote: >> Currently CONFIG_USB_GADGET_VBUS_DRAW limits the maximum current >> drawn from Vbus to be up to 500mA. However USB gadget operating >> in SuperSpeed or higher can draw up to 900mA. Also, MaxPower in >> ConfigFS takes its default value from this config. Hence increase >> the allowed range of CONFIG_USB_GADGET_VBUS_DRAW to 900mA. > > Is this the sort of thing that really needs to be a Kconfig option? Why > not make the decision at runtime, based on the needs of the gadget or > function drivers and the connection speed? > > Alan Stern > Right, set_config() in composite.c does this in runtime based on the values of MaxPower (from configFS), VBUS_DRAW defconfig and speed. If we don't set MaxPower from configFS, this config helps to set it during compile time. In fact MaxPower in configFS takes its default value from CONFIG_USB_GADGET_VBUS_DRAW . Sent this patch because Kconfig has this limitation where it's only allowing values upto 500mA. Regards, Prashanth K
On Tue, Jan 21, 2025 at 09:50:08AM +0530, Prashanth K wrote: > > > On 20-01-25 08:17 pm, Alan Stern wrote: > > On Mon, Jan 20, 2025 at 04:47:02PM +0530, Prashanth K wrote: > >> Currently CONFIG_USB_GADGET_VBUS_DRAW limits the maximum current > >> drawn from Vbus to be up to 500mA. However USB gadget operating > >> in SuperSpeed or higher can draw up to 900mA. Also, MaxPower in > >> ConfigFS takes its default value from this config. Hence increase > >> the allowed range of CONFIG_USB_GADGET_VBUS_DRAW to 900mA. > > > > Is this the sort of thing that really needs to be a Kconfig option? Why > > not make the decision at runtime, based on the needs of the gadget or > > function drivers and the connection speed? > > > > Alan Stern > > > > Right, set_config() in composite.c does this in runtime based on the > values of MaxPower (from configFS), VBUS_DRAW defconfig and speed. > If we don't set MaxPower from configFS, this config helps to set it > during compile time. In fact MaxPower in configFS takes its default > value from CONFIG_USB_GADGET_VBUS_DRAW . Sent this patch because Kconfig > has this limitation where it's only allowing values upto 500mA. Why does MaxPower need to be set at compile time? Why not set it at runtime instead? If MaxPower gets set at runtime then it can take its default value to be 500 mA or 900 mA depending on the connection speed. There will be no need for CONFIG_USB_GAGDGET_VBUS_DRAW. You are trying to improve a compile-time limitation on a quantity which isn't known until runtime. The whole idea of doing it that way is fundamentally wrong. You shouldn't try to improve it a little, you should fix the basic mistake by doing everything at runtime. Alan Stern
On 21-01-25 08:36 pm, Alan Stern wrote: > On Tue, Jan 21, 2025 at 09:50:08AM +0530, Prashanth K wrote: >> >> >> On 20-01-25 08:17 pm, Alan Stern wrote: >>> On Mon, Jan 20, 2025 at 04:47:02PM +0530, Prashanth K wrote: >>>> Currently CONFIG_USB_GADGET_VBUS_DRAW limits the maximum current >>>> drawn from Vbus to be up to 500mA. However USB gadget operating >>>> in SuperSpeed or higher can draw up to 900mA. Also, MaxPower in >>>> ConfigFS takes its default value from this config. Hence increase >>>> the allowed range of CONFIG_USB_GADGET_VBUS_DRAW to 900mA. >>> >>> Is this the sort of thing that really needs to be a Kconfig option? Why >>> not make the decision at runtime, based on the needs of the gadget or >>> function drivers and the connection speed? >>> >>> Alan Stern >>> >> >> Right, set_config() in composite.c does this in runtime based on the >> values of MaxPower (from configFS), VBUS_DRAW defconfig and speed. >> If we don't set MaxPower from configFS, this config helps to set it >> during compile time. In fact MaxPower in configFS takes its default >> value from CONFIG_USB_GADGET_VBUS_DRAW . Sent this patch because Kconfig >> has this limitation where it's only allowing values upto 500mA. > > Why does MaxPower need to be set at compile time? Why not set it at > runtime instead? > > If MaxPower gets set at runtime then it can take its default value to be > 500 mA or 900 mA depending on the connection speed. There will be no > need for CONFIG_USB_GAGDGET_VBUS_DRAW. > Yes, agreed. Can we mark CONFIG_USB_GAGDGET_VBUS_DRAW as legacy and maybe also avoid configfs/composite from using it? > You are trying to improve a compile-time limitation on a quantity which > isn't known until runtime. The whole idea of doing it that way is > fundamentally wrong. You shouldn't try to improve it a little, you > should fix the basic mistake by doing everything at runtime. > > Alan Stern > Regards, Prashanth K
On Tue, Jan 21, 2025 at 10:19:08PM +0530, Prashanth K wrote: > > > On 21-01-25 08:36 pm, Alan Stern wrote: > > On Tue, Jan 21, 2025 at 09:50:08AM +0530, Prashanth K wrote: > >> > >> > >> On 20-01-25 08:17 pm, Alan Stern wrote: > >>> On Mon, Jan 20, 2025 at 04:47:02PM +0530, Prashanth K wrote: > >>>> Currently CONFIG_USB_GADGET_VBUS_DRAW limits the maximum current > >>>> drawn from Vbus to be up to 500mA. However USB gadget operating > >>>> in SuperSpeed or higher can draw up to 900mA. Also, MaxPower in > >>>> ConfigFS takes its default value from this config. Hence increase > >>>> the allowed range of CONFIG_USB_GADGET_VBUS_DRAW to 900mA. > >>> > >>> Is this the sort of thing that really needs to be a Kconfig option? Why > >>> not make the decision at runtime, based on the needs of the gadget or > >>> function drivers and the connection speed? > >>> > >>> Alan Stern > >>> > >> > >> Right, set_config() in composite.c does this in runtime based on the > >> values of MaxPower (from configFS), VBUS_DRAW defconfig and speed. > >> If we don't set MaxPower from configFS, this config helps to set it > >> during compile time. In fact MaxPower in configFS takes its default > >> value from CONFIG_USB_GADGET_VBUS_DRAW . Sent this patch because Kconfig > >> has this limitation where it's only allowing values upto 500mA. > > > > Why does MaxPower need to be set at compile time? Why not set it at > > runtime instead? > > > > If MaxPower gets set at runtime then it can take its default value to be > > 500 mA or 900 mA depending on the connection speed. There will be no > > need for CONFIG_USB_GAGDGET_VBUS_DRAW. > > > > Yes, agreed. Can we mark CONFIG_USB_GAGDGET_VBUS_DRAW as legacy and > maybe also avoid configfs/composite from using it? Indeed, the whole idea is to avoid using CONFIG_USB_GADGET_VBUS_DRAW in configfs and composite. If nothing will still be using it, just remove it entirely. No need to mark it as legacy. Alan Stern
On 22-01-25 12:56 am, Alan Stern wrote: > On Tue, Jan 21, 2025 at 10:19:08PM +0530, Prashanth K wrote: >> >> >> On 21-01-25 08:36 pm, Alan Stern wrote: >>> On Tue, Jan 21, 2025 at 09:50:08AM +0530, Prashanth K wrote: >>>> >>>> >>>> On 20-01-25 08:17 pm, Alan Stern wrote: >>>>> On Mon, Jan 20, 2025 at 04:47:02PM +0530, Prashanth K wrote: >>>>>> Currently CONFIG_USB_GADGET_VBUS_DRAW limits the maximum current >>>>>> drawn from Vbus to be up to 500mA. However USB gadget operating >>>>>> in SuperSpeed or higher can draw up to 900mA. Also, MaxPower in >>>>>> ConfigFS takes its default value from this config. Hence increase >>>>>> the allowed range of CONFIG_USB_GADGET_VBUS_DRAW to 900mA. >>>>> >>>>> Is this the sort of thing that really needs to be a Kconfig option? Why >>>>> not make the decision at runtime, based on the needs of the gadget or >>>>> function drivers and the connection speed? >>>>> >>>>> Alan Stern >>>>> >>>> >>>> Right, set_config() in composite.c does this in runtime based on the >>>> values of MaxPower (from configFS), VBUS_DRAW defconfig and speed. >>>> If we don't set MaxPower from configFS, this config helps to set it >>>> during compile time. In fact MaxPower in configFS takes its default >>>> value from CONFIG_USB_GADGET_VBUS_DRAW . Sent this patch because Kconfig >>>> has this limitation where it's only allowing values upto 500mA. >>> >>> Why does MaxPower need to be set at compile time? Why not set it at >>> runtime instead? >>> >>> If MaxPower gets set at runtime then it can take its default value to be >>> 500 mA or 900 mA depending on the connection speed. There will be no >>> need for CONFIG_USB_GAGDGET_VBUS_DRAW. >>> >> >> Yes, agreed. Can we mark CONFIG_USB_GAGDGET_VBUS_DRAW as legacy and >> maybe also avoid configfs/composite from using it? > > Indeed, the whole idea is to avoid using CONFIG_USB_GADGET_VBUS_DRAW in > configfs and composite. > > If nothing will still be using it, just remove it entirely. No need to > mark it as legacy. > > Alan Stern Sure, let me work on that and send a v2 (or another patch). Thanks for the feedback. Regards, Prashanth K
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 76521555e3c1..904652c37385 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -97,8 +97,8 @@ config USB_GADGET_DEBUG_FS to conserve kernel memory, say "N". config USB_GADGET_VBUS_DRAW - int "Maximum VBUS Power usage (2-500 mA)" - range 2 500 + int "Maximum VBUS Power usage (2-900 mA)" + range 2 900 default 2 help Some devices need to draw power from USB when they are @@ -107,8 +107,11 @@ config USB_GADGET_VBUS_DRAW such as an AC adapter or batteries. Enter the maximum power your device draws through USB, in - milliAmperes. The permitted range of values is 2 - 500 mA; - 0 mA would be legal, but can make some hosts misbehave. + milliAmperes. The permitted range of values depends on the + connection speed, for SuperSpeed and higher it's 2 - 900 mA, + but connections with High-Speed or slower can draw power + ranging from 2 - 500 mA; 0 mA would be legal, but can make + some hosts misbehave. This value will be used except for system-specific gadget drivers that have more specific information.
Currently CONFIG_USB_GADGET_VBUS_DRAW limits the maximum current drawn from Vbus to be up to 500mA. However USB gadget operating in SuperSpeed or higher can draw up to 900mA. Also, MaxPower in ConfigFS takes its default value from this config. Hence increase the allowed range of CONFIG_USB_GADGET_VBUS_DRAW to 900mA. Signed-off-by: Prashanth K <prashanth.k@oss.qualcomm.com> --- drivers/usb/gadget/Kconfig | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)