Re: [PATCH] extcon: usbc-tusb320: Update state on probe even if no IRQ pending

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Marek,

On Sun, Nov 20, 2022 at 03:15:09PM +0100, Marek Vasut wrote:
> Currently this driver triggers extcon and typec state update in its
> probe function, to read out current state reported by the chip and
> report the correct state to upper layers. This synchronization is
> performed correctly, but only in case the chip indicates a pending
> interrupt in reg09 register.
> 
> This fails to cover the situation where all interrupts reported by
> the chip were already handled by Linux before reboot, then the system
> rebooted, and then Linux starts again. In this case, the TUSB320 no
> longer reports any interrupts in reg09, and the state update does not
> perform any update as it depends on that interrupt indication.
> 
> Fix this by turning tusb320_irq_handler() into a thin wrapper around
> tusb320_state_update_handler(), where the later now contains the bulk
> of the code of tusb320_irq_handler(), but adds new function parameter
> "force_update". The "force_update" parameter can be used by the probe
> function to assure that the state synchronization is always performed,
> independent of the interrupt indicated in reg09. The interrupt handler
> tusb320_irq_handler() callback uses force_update=false to avoid state
> updates on potential spurious interrupts and retain current behavior.
> 
> Fixes: 06bc4ca115cdd ("extcon: Add driver for TI TUSB320")
> Signed-off-by: Marek Vasut <marex@xxxxxxx>

Reviewed-by: Alvin Šipraga <alsi@xxxxxxxxxxxxxxx>

snip

> @@ -466,7 +473,7 @@ static int tusb320_probe(struct i2c_client *client,
>  		return ret;
>  
>  	/* update initial state */
> -	tusb320_irq_handler(client->irq, priv);
> +	tusb320_state_update_handler(priv, true);

I wonder, is this function call even necessary?

>  
>  	/* Reset chip to its default state */
>  	ret = tusb320_reset(priv);
> @@ -477,7 +484,7 @@ static int tusb320_probe(struct i2c_client *client,
>  		 * State and polarity might change after a reset, so update
>  		 * them again and make sure the interrupt status bit is cleared.
>  		 */
> -		tusb320_irq_handler(client->irq, priv);
> +		tusb320_state_update_handler(priv, true);
>  
>  	ret = devm_request_threaded_irq(priv->dev, client->irq, NULL,
>  					tusb320_irq_handler,
> -- 
> 2.35.1
>




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux