On 21/01/21 8:07 am, Mark Brown wrote: > On Wed, Jan 20, 2021 at 12:41:18PM +1300, Eliot Blennerhassett wrote: > > It would be a bit easier to have one discussion per mail taking up the topic of ak4458 reset polarity alone ak4458.txt documents: Optional properties: - reset-gpios: A GPIO specifier for the power down & reset pin Example reset-gpios = <&gpio1 10 GPIO_ACTIVE_LOW> Existing code in ak4458.c: static void ak4458_power_off(struct ak4458_priv *ak4458) { if (ak4458->reset_gpiod) { gpiod_set_value_cansleep(ak4458->reset_gpiod, 0); usleep_range(1000, 2000); } } I suspect the value 0 represents the raw value for an active-low gpio, but this is wrong when used with gpiod_set_value_cansleep() function whose doc says "Set the logical value of the GPIO, i.e. taking its ACTIVE_LOW status into account" Setting the value to 0 makes the GPIO *inactive* i.e. high if it is specified in the DT as ACTIVE_LOW. This is the wrong way round for the power_off/on functions. Because the DT property is optional, perhaps nobody has tried to use it until now? Patch to follow -- Eliot