All of lore.kernel.org
 help / color / mirror / Atom feed
From: Abdel Alkuor <alkuor@gmail.com>
To: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Cc: krzysztof.kozlowski+dt@linaro.org, bryan.odonoghue@linaro.org,
	gregkh@linuxfoundation.org, robh+dt@kernel.org,
	linux-usb@vger.kernel.org, devicetree@vger.kernel.org,
	conor+dt@kernel.org, linux-kernel@vger.kernel.org,
	abdelalkuor@geotab.com
Subject: Re: [PATCH v5 08/15] USB: typec: Add interrupt support for TPS25750
Date: Wed, 20 Sep 2023 10:50:17 -0400	[thread overview]
Message-ID: <ZQsGqfKGDVoBXgj2@primary> (raw)
In-Reply-To: <ZQhGsA4PyiaUy7+7@kuha.fi.intel.com>

On Mon, Sep 18, 2023 at 03:46:40PM +0300, Heikki Krogerus wrote:
> Hi,
> 
> On Sun, Sep 17, 2023 at 11:26:32AM -0400, Abdel Alkuor wrote:
> > From: Abdel Alkuor <abdelalkuor@geotab.com>
> > 
> > Update tps6598x interrupt handler to accommodate tps25750 interrupt
> 
> You have the "why" explained here, but please also explain what you
> are doing - in this case it's not completely clear.
>
Makes sense. I will add an explanation in v6.
> > Signed-off-by: Abdel Alkuor <abdelalkuor@geotab.com>
> > ---
> >  drivers/usb/typec/tipd/core.c | 49 +++++++++++++++++++++++++----------
> >  1 file changed, 35 insertions(+), 14 deletions(-)
> > 
> > diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c
> > index bd5436fd88fd..17b3bc480f97 100644
> > --- a/drivers/usb/typec/tipd/core.c
> > +++ b/drivers/usb/typec/tipd/core.c
> > @@ -120,6 +120,7 @@ struct tps6598x {
> >  	enum power_supply_usb_type usb_type;
> >  
> >  	int wakeup;
> > +	u32 status; /* status reg */
> >  	u16 pwr_status;
> >  	struct delayed_work	wq_poll;
> >  	irq_handler_t irq_handler;
> > @@ -539,50 +540,71 @@ static irqreturn_t cd321x_interrupt(int irq, void *data)
> >  	return IRQ_NONE;
> >  }
> >  
> > +static bool tps6598x_has_role_changed(struct tps6598x *tps, u32 status)
> > +{
> > +	status ^= tps->status;
> > +
> > +	return status & (TPS_STATUS_PORTROLE | TPS_STATUS_DATAROLE);
> > +}
> > +
> >  static irqreturn_t tps6598x_interrupt(int irq, void *data)
> >  {
> >  	struct tps6598x *tps = data;
> > -	u64 event1 = 0;
> > -	u64 event2 = 0;
> > +	u64 event[2] = { };
> >  	u32 status;
> >  	int ret;
> >  
> >  	mutex_lock(&tps->lock);
> >  
> > -	ret = tps6598x_read64(tps, TPS_REG_INT_EVENT1, &event1);
> > -	ret |= tps6598x_read64(tps, TPS_REG_INT_EVENT2, &event2);
> > +	if (tps->is_tps25750) {
> > +		ret = tps6598x_block_read(tps, TPS_REG_INT_EVENT1, event, 11);
> > +	} else {
> > +		ret = tps6598x_read64(tps, TPS_REG_INT_EVENT1, &event[0]);
> > +		ret |= tps6598x_read64(tps, TPS_REG_INT_EVENT2, &event[1]);
> > +	}
> > +
> >  	if (ret) {
> >  		dev_err(tps->dev, "%s: failed to read events\n", __func__);
> >  		goto err_unlock;
> >  	}
> > -	trace_tps6598x_irq(event1, event2);
> > +	trace_tps6598x_irq(event[0], event[1]);
> >  
> > -	if (!(event1 | event2))
> > +	if (!(event[0] | event[1]))
> >  		goto err_unlock;
> >  
> >  	if (!tps6598x_read_status(tps, &status))
> >  		goto err_clear_ints;
> >  
> > -	if ((event1 | event2) & TPS_REG_INT_POWER_STATUS_UPDATE)
> > +	if ((event[0] | event[1]) & TPS_REG_INT_POWER_STATUS_UPDATE)
> >  		if (!tps6598x_read_power_status(tps))
> >  			goto err_clear_ints;
> >  
> > -	if ((event1 | event2) & TPS_REG_INT_DATA_STATUS_UPDATE)
> > +	if ((event[0] | event[1]) & TPS_REG_INT_DATA_STATUS_UPDATE)
> >  		if (!tps6598x_read_data_status(tps))
> >  			goto err_clear_ints;
> >  
> > -	/* Handle plug insert or removal */
> > -	if ((event1 | event2) & TPS_REG_INT_PLUG_EVENT)
> > +	/*
> > +	 * data/port roles could be updated independently after
> > +	 * a plug event. Therefore, we need to check
> > +	 * for pr/dr status change to set TypeC dr/pr accordingly.
> > +	 */
> > +	if ((event[0] | event[1]) & TPS_REG_INT_PLUG_EVENT ||
> > +		tps6598x_has_role_changed(tps, status))
> 
> Alignment.
Will be fixed in v6.
> 
> >  		tps6598x_handle_plug_event(tps, status);
> >  
> > +	tps->status = status;
> >  err_clear_ints:
> > -	tps6598x_write64(tps, TPS_REG_INT_CLEAR1, event1);
> > -	tps6598x_write64(tps, TPS_REG_INT_CLEAR2, event2);
> > +	if (tps->is_tps25750) {
> > +		tps6598x_block_write(tps, TPS_REG_INT_CLEAR1, event, 11);
> > +	} else {
> > +		tps6598x_write64(tps, TPS_REG_INT_CLEAR1, event[0]);
> > +		tps6598x_write64(tps, TPS_REG_INT_CLEAR2, event[1]);
> > +	}
> >  
> >  err_unlock:
> >  	mutex_unlock(&tps->lock);
> >  
> > -	if (event1 | event2)
> > +	if (event[0] | event[1])
> >  		return IRQ_HANDLED;
> >  	return IRQ_NONE;
> >  }
> > @@ -1003,7 +1025,6 @@ static int tps6598x_probe(struct i2c_client *client)
> >  
> >  		irq_handler = cd321x_interrupt;
> >  	} else {
> > -
> 
> You need to fix patch 4 instead - that's where you add that empty
> line.
Will be fixed in v6.
> 
> >  		tps->is_tps25750 = of_device_is_compatible(np, "ti,tps25750");
> >  		/* Enable power status, data status and plug event interrupts */
> >  		mask1 = TPS_REG_INT_POWER_STATUS_UPDATE |
> > -- 
> > 2.34.1
> 
> -- 
> heikki

Thanks,
Abdel

  reply	other threads:[~2023-09-20 15:03 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-17 15:26 [PATCH v5 00/15] Add TPS25750 USB type-C PD controller support Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 01/15] dt-bindings: usb: tps6598x: Add tps25750 Abdel Alkuor
2023-09-17 17:30   ` Krzysztof Kozlowski
2023-09-17 19:30     ` Abdel Alkuo
2023-09-17 15:26 ` [PATCH v5 02/15] USB: typec: Add cmd timeout and response delay Abdel Alkuor
2023-09-18 10:44   ` Heikki Krogerus
2023-09-20 14:29     ` Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 03/15] USB: typec: Add patch mode to tps6598x Abdel Alkuor
2023-09-18 11:07   ` Heikki Krogerus
2023-09-20 14:42     ` Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 04/15] USB: typec: Load TPS25750 patch bundle Abdel Alkuor
2023-09-17 17:04   ` kernel test robot
2023-09-17 17:24   ` kernel test robot
2023-09-18 11:31   ` Heikki Krogerus
2023-09-20 14:46     ` Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 05/15] USB: typec: Check for EEPROM present Abdel Alkuor
2023-09-18 12:45   ` Heikki Krogerus
2023-09-20 14:47     ` Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 06/15] USB: typec: Clear dead battery flag Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 07/15] USB: typec: Apply patch again after power resume Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 08/15] USB: typec: Add interrupt support for TPS25750 Abdel Alkuor
2023-09-18 12:46   ` Heikki Krogerus
2023-09-20 14:50     ` Abdel Alkuor [this message]
2023-09-17 15:26 ` [PATCH v5 09/15] USB: typec: Refactor tps6598x port registration Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 10/15] USB: typec: Add port registration for tps25750 Abdel Alkuor
2023-09-18 12:58   ` Heikki Krogerus
2023-09-20 14:53     ` Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 11/15] USB: typec: Enable sleep mode " Abdel Alkuor
2023-09-17 17:32   ` Krzysztof Kozlowski
2023-09-17 15:26 ` [PATCH v5 12/15] USB: typec: Add trace for tps25750 irq Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 13/15] USB: typec: Add power status trace for tps25750 Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 14/15] USB: typec: Add " Abdel Alkuor
2023-09-17 15:26 ` [PATCH v5 15/15] USB: typec: Do not check VID " Abdel Alkuor
2023-09-18 13:29   ` Heikki Krogerus
2023-09-20 15:10     ` Abdel Alkuor
2023-09-18 13:57 ` [PATCH v5 00/15] Add TPS25750 USB type-C PD controller support Heikki Krogerus
2023-09-20 15:21   ` Abdel Alkuor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZQsGqfKGDVoBXgj2@primary \
    --to=alkuor@gmail.com \
    --cc=abdelalkuor@geotab.com \
    --cc=bryan.odonoghue@linaro.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.