On 19/04/2019 13:24, Greg Kroah-Hartman wrote:
> On Fri, Apr 19, 2019 at 11:59:08AM +0200, Marc Gonzalez wrote:
>
>> Keep EXTCON support optional, since some platforms do not need it.
>>
>> Fixes: 3def4031b3e3 ("usb: dwc3: add EXTCON dependency for qcom")
>> Signed-off-by: Marc Gonzalez <[email protected]>
>> ---
>> drivers/usb/dwc3/Kconfig | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
>> index 2b1494460d0c..6bd1a28c535f 100644
>> --- a/drivers/usb/dwc3/Kconfig
>> +++ b/drivers/usb/dwc3/Kconfig
>> @@ -115,7 +115,8 @@ config USB_DWC3_ST
>>
>> config USB_DWC3_QCOM
>> tristate "Qualcomm Platform"
>> - depends on EXTCON && (ARCH_QCOM || COMPILE_TEST)
>> + depends on ARCH_QCOM || COMPILE_TEST
>> + depends on EXTCON || !EXTCON
>
> Why is this last line needed? Does it really do anything?
For the record, there are 42 instances of this unintuitive kconfig syntax:
$ git grep 'depends on [A-Z_]* || !' | wc
42 342 2965
https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt
An expression can have a value of 'n', 'm' or 'y' (0, 1, 2 respectively for
calculations).
"BAR depends on FOO" means (FOO=m && BAR=m) || (FOO=y && BAR=m) || (FOO=y &&
BAR=y) || BAR=n
NB: (FOO=m && BAR=y) is explicitly forbidden by kconfig (special-cased?)
("This feature depends on another which has been configured as a module.
As a result, this feature will be built as a module.")
"BAR depends on !FOO" means (FOO=n && BAR=m) || (FOO=n && BAR=y)
Thus "BAR depends on FOO || !FOO" means ALL 9 combinations EXCEPT (FOO=m &&
BAR=y)
Regards.