Hi, On 12/30/20 12:23 PM, Richard Fitzgerald wrote: > On 30/12/2020 11:04, Hans de Goede wrote: >> Hi, >> >> On 12/29/20 5:51 PM, Richard Fitzgerald wrote: >>> >>> >>> On 29/12/2020 15:40, Hans de Goede wrote: >>>> Hi, >>>> >>>> On 12/29/20 4:15 PM, Mark Brown wrote: >>>>> On Tue, Dec 29, 2020 at 03:06:35PM +0000, Charles Keepax wrote: >>>>> >>>>>> There is maybe more argument for porting the Arizona code across >>>>>> anyways, since for a long time Android didn't properly support extcon >>>>>> either. It supported the earlier out of tree switch stuff, extcon >>>>> >>>>> Completely moving the driver doesn't cause the same problems as the >>>>> current proposal (unless it drops functionality I guess, there were >>>>> issues with adding new detection types into the input layer but I can't >>>>> remember if this hardware was impacted by that or not). >>>> >>>> The input-layer supports the following switches: >>>> >>>> SW_HEADPHONE_INSERT >>>> SW_MICROPHONE_INSERT >>>> SW_LINEOUT_INSERT >>>> SW_JACK_PHYSICAL_INSERT >>>> >>>> Which is a 1:1 mapping with the cable-types currently exported by >>>> extcon-arizona.c . >>>> >>>> I'm fine with fully moving extcon-arizona.c over to only using >>>> sound/core/jack.c functionality and it no longer exporting an >>>> extcon device. >>>> >>>> I guess we should move it out of drivers/extcon then though. >>>> I suggest using: sound/soc/cirrus/arizona-jack-detect.c >>>> Note that sound/soc/cirrus is a new dir here. Would that work >>>> for you ? >>> >>> Shouldn't it be sound/soc/codecs/arizona-jack.c so that it is with all >>> the other code for those codecs? >> >> The arizona codecs use the MFD framework and there is a separate >> platform-device instantiated for the jack-detect functionality, so this > > That is because it is an extcon driver. It is a different subsystem to > the other child drivers so has to be a separate child. > >> (mostly) a standalone platform-driver which has very little interaction >> with the rest of the codec code. >> >> It is not a codec driver, or code shared between the codec drivers, >> so putting it under sound/soc/codecs would be a bit weird. >> > > In fact it is tied into the codec driver. The code in arizona.c that > handles HP OUT has to synchronize with the jack detection to avoid one > driver trashing the state of the other. But because they are currently > separate drivers they have to communicate through hp_ena and > hp_clamp in the parent mfd data. See arizona_hp_ev(). So what you are suggesting is to do something along these lines ? : 1. Drop the MFD instantiated arizona-extcon device 2. Move the extcon code to something more like a library 3. Have the various codec drivers call into the library at various points 4. Have the library call snd_soc_card_jack_new, snd_soc_jack_report, etc. ? That works for me, but I would like to make sure we are all on the same page here before spending time on coding this solution. Regards, Hans