hwmon fixes for v5.19-rc5
* Fix error handling in ibmaem driver initialization * Fix bad data reported by occ driver after setting power cap * Fix typos in pmbus/ucd9200 driver comments -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEiHPvMQj9QTOCiqgVyx8mb86fmYEFAmK/RBgACgkQyx8mb86f mYGTGhAAiHWPec2wsUEGenrsXHrWqTJlNJntr/mtkCvihC05nPO7/qc08L519QF0 82uAQGV/oxLZznT8VH4rpLpjDuSHXlq5WMiZAGlAgURi4EqD274kJ6rFz6P41QRY 488kYob0SV0SglsuqDf/lwbaJvDaOOMDZu96rDlWwVrWq/qbfciKl9hRtYi/V6IA UCYovlGQH8HOb038s8ufM9XGpHmotfmUZuxLShBOkqmGTqfgJYWF656n+fsf7s7C qus6XjeE8/8Cjb6xMVx+eBBnUtzPkmkzbYIzqrt7zieIJVk/9BmxGdv9YR7TiPru +fnEnjcBUPqKGMkRttpoKoRCp8ZIQxpDAOozxfjBt0RQdY31hDNwmx4xuN8eKy9U tIuwhISuITO6NjSCJZCyFwlrO+GbkWoVWYHpIWHsX9/YMyVe4Q0UBQB/a1WwNxfN U8ASJs9qsEN6lxgmMVAeNTMukzXIehgD6W71YEtWO++1WLpK21IJQdA96tLbHO6l 2BeoDvaKAmuciWu7fsXLBAP+AbCbjo676sESnZxkThK5cYX3ic9KJ+3eNQ7/uORC lZRf/foE4CLBqn0iu5V250uBeAVEBJ0AE3y9FZvZZ8vBKZ9TXaBAOOU20YawW87d 9OpSPWjnxML9NxJ8eJyZjsWWXR+190yWS+qV0WFyz/vdj0qy6TU= =OV79 -----END PGP SIGNATURE----- Merge tag 'hwmon-for-v5.19-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging Pull hwmon fixes from Guenter Roeck: - Fix error handling in ibmaem driver initialization - Fix bad data reported by occ driver after setting power cap - Fix typos in pmbus/ucd9200 driver comments * tag 'hwmon-for-v5.19-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: hwmon: (ibmaem) don't call platform_device_del() if platform_device_add() fails hwmon: (pmbus/ucd9200) fix typos in comments hwmon: (occ) Prevent power cap command overwriting poll response
This commit is contained in:
commit
b336ad598a
|
@ -550,7 +550,7 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle)
|
|||
|
||||
res = platform_device_add(data->pdev);
|
||||
if (res)
|
||||
goto ipmi_err;
|
||||
goto dev_add_err;
|
||||
|
||||
platform_set_drvdata(data->pdev, data);
|
||||
|
||||
|
@ -598,7 +598,9 @@ hwmon_reg_err:
|
|||
ipmi_destroy_user(data->ipmi.user);
|
||||
ipmi_err:
|
||||
platform_set_drvdata(data->pdev, NULL);
|
||||
platform_device_unregister(data->pdev);
|
||||
platform_device_del(data->pdev);
|
||||
dev_add_err:
|
||||
platform_device_put(data->pdev);
|
||||
dev_err:
|
||||
ida_free(&aem_ida, data->id);
|
||||
id_err:
|
||||
|
@ -690,7 +692,7 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe,
|
|||
|
||||
res = platform_device_add(data->pdev);
|
||||
if (res)
|
||||
goto ipmi_err;
|
||||
goto dev_add_err;
|
||||
|
||||
platform_set_drvdata(data->pdev, data);
|
||||
|
||||
|
@ -738,7 +740,9 @@ hwmon_reg_err:
|
|||
ipmi_destroy_user(data->ipmi.user);
|
||||
ipmi_err:
|
||||
platform_set_drvdata(data->pdev, NULL);
|
||||
platform_device_unregister(data->pdev);
|
||||
platform_device_del(data->pdev);
|
||||
dev_add_err:
|
||||
platform_device_put(data->pdev);
|
||||
dev_err:
|
||||
ida_free(&aem_ida, data->id);
|
||||
id_err:
|
||||
|
|
|
@ -145,7 +145,7 @@ static int occ_poll(struct occ *occ)
|
|||
cmd[6] = 0; /* checksum lsb */
|
||||
|
||||
/* mutex should already be locked if necessary */
|
||||
rc = occ->send_cmd(occ, cmd, sizeof(cmd));
|
||||
rc = occ->send_cmd(occ, cmd, sizeof(cmd), &occ->resp, sizeof(occ->resp));
|
||||
if (rc) {
|
||||
occ->last_error = rc;
|
||||
if (occ->error_count++ > OCC_ERROR_COUNT_THRESHOLD)
|
||||
|
@ -182,6 +182,7 @@ static int occ_set_user_power_cap(struct occ *occ, u16 user_power_cap)
|
|||
{
|
||||
int rc;
|
||||
u8 cmd[8];
|
||||
u8 resp[8];
|
||||
__be16 user_power_cap_be = cpu_to_be16(user_power_cap);
|
||||
|
||||
cmd[0] = 0; /* sequence number */
|
||||
|
@ -198,7 +199,7 @@ static int occ_set_user_power_cap(struct occ *occ, u16 user_power_cap)
|
|||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = occ->send_cmd(occ, cmd, sizeof(cmd));
|
||||
rc = occ->send_cmd(occ, cmd, sizeof(cmd), resp, sizeof(resp));
|
||||
|
||||
mutex_unlock(&occ->lock);
|
||||
|
||||
|
|
|
@ -96,7 +96,8 @@ struct occ {
|
|||
|
||||
int powr_sample_time_us; /* average power sample time */
|
||||
u8 poll_cmd_data; /* to perform OCC poll command */
|
||||
int (*send_cmd)(struct occ *occ, u8 *cmd, size_t len);
|
||||
int (*send_cmd)(struct occ *occ, u8 *cmd, size_t len, void *resp,
|
||||
size_t resp_len);
|
||||
|
||||
unsigned long next_update;
|
||||
struct mutex lock; /* lock OCC access */
|
||||
|
|
|
@ -111,7 +111,8 @@ static int p8_i2c_occ_putscom_be(struct i2c_client *client, u32 address,
|
|||
be32_to_cpu(data1));
|
||||
}
|
||||
|
||||
static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)
|
||||
static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len,
|
||||
void *resp, size_t resp_len)
|
||||
{
|
||||
int i, rc;
|
||||
unsigned long start;
|
||||
|
@ -120,7 +121,7 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)
|
|||
const long wait_time = msecs_to_jiffies(OCC_CMD_IN_PRG_WAIT_MS);
|
||||
struct p8_i2c_occ *ctx = to_p8_i2c_occ(occ);
|
||||
struct i2c_client *client = ctx->client;
|
||||
struct occ_response *resp = &occ->resp;
|
||||
struct occ_response *or = (struct occ_response *)resp;
|
||||
|
||||
start = jiffies;
|
||||
|
||||
|
@ -151,7 +152,7 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)
|
|||
return rc;
|
||||
|
||||
/* wait for OCC */
|
||||
if (resp->return_status == OCC_RESP_CMD_IN_PRG) {
|
||||
if (or->return_status == OCC_RESP_CMD_IN_PRG) {
|
||||
rc = -EALREADY;
|
||||
|
||||
if (time_after(jiffies, start + timeout))
|
||||
|
@ -163,7 +164,7 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)
|
|||
} while (rc);
|
||||
|
||||
/* check the OCC response */
|
||||
switch (resp->return_status) {
|
||||
switch (or->return_status) {
|
||||
case OCC_RESP_CMD_IN_PRG:
|
||||
rc = -ETIMEDOUT;
|
||||
break;
|
||||
|
@ -192,8 +193,8 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)
|
|||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
data_length = get_unaligned_be16(&resp->data_length);
|
||||
if (data_length > OCC_RESP_DATA_BYTES)
|
||||
data_length = get_unaligned_be16(&or->data_length);
|
||||
if ((data_length + 7) > resp_len)
|
||||
return -EMSGSIZE;
|
||||
|
||||
/* fetch the rest of the response data */
|
||||
|
|
|
@ -78,11 +78,10 @@ done:
|
|||
return notify;
|
||||
}
|
||||
|
||||
static int p9_sbe_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)
|
||||
static int p9_sbe_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len,
|
||||
void *resp, size_t resp_len)
|
||||
{
|
||||
struct occ_response *resp = &occ->resp;
|
||||
struct p9_sbe_occ *ctx = to_p9_sbe_occ(occ);
|
||||
size_t resp_len = sizeof(*resp);
|
||||
int rc;
|
||||
|
||||
rc = fsi_occ_submit(ctx->sbe, cmd, len, resp, &resp_len);
|
||||
|
@ -96,7 +95,7 @@ static int p9_sbe_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)
|
|||
return rc;
|
||||
}
|
||||
|
||||
switch (resp->return_status) {
|
||||
switch (((struct occ_response *)resp)->return_status) {
|
||||
case OCC_RESP_CMD_IN_PRG:
|
||||
rc = -ETIMEDOUT;
|
||||
break;
|
||||
|
|
|
@ -148,7 +148,7 @@ static int ucd9200_probe(struct i2c_client *client)
|
|||
* This only affects the READ_IOUT and READ_TEMPERATURE2 registers.
|
||||
* READ_IOUT will return the sum of currents of all phases of a rail,
|
||||
* and READ_TEMPERATURE2 will return the maximum temperature detected
|
||||
* for the the phases of the rail.
|
||||
* for the phases of the rail.
|
||||
*/
|
||||
for (i = 0; i < info->pages; i++) {
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue