Re: [PATCH v5 3/3] hwmon: pmbus: add MPQ8646 driver
Guenter Roeck <[email protected]>
| Newsgroups | org.kernel.vger.linux-hwmon,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 7/23/26 16:55, Vincent Jardin via B4 Relay wrote:
...
> +
> +/* Adapted from lm90.c */
> +static void mpq8646_alarm_poll_work(struct work_struct *work)
> +{
> + struct mpq8646_priv *priv = container_of(to_delayed_work(work),
> + struct mpq8646_priv,
> + alarm_poll_work);
> + int rc;
> + u16 cur, newly_set;
> + size_t i;
> +
> + if (priv->client->irq)
> + return; /* SMBALERT# wired; polling not needed */
> +
> + if (!priv->alarm_poll_interval_ms)
> + return; /* polling disabled; don't re-arm */
> +
> + if (!priv->hwmon_dev)
> + goto rearm; /* hwmon not ready yet; try again next tick */
> +
> + /* Serialise with the pmbus core's own transactions on this client. */
> + pmbus_lock(priv->client);
> + rc = i2c_smbus_read_word_data(priv->client, PMBUS_STATUS_WORD);
> + pmbus_unlock(priv->client);
> + if (rc < 0)
> + goto rearm;
> +
> + cur = (u16)rc;
> + newly_set = cur & ~priv->last_status_word;
> + priv->last_status_word = cur;
> +
> + if (!newly_set)
> + goto rearm;
> +
> + for (i = 0; i < ARRAY_SIZE(mpq8646_alarm_map); i++) {
> + if (newly_set & mpq8646_alarm_map[i].mask)
> + hwmon_notify_event(priv->hwmon_dev,
> + mpq8646_alarm_map[i].type,
> + mpq8646_alarm_map[i].attr,
> + mpq8646_alarm_map[i].channel);
This is wrong. This will require a new exported notification function
in pmbus code.
Guenter