History

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

Linus Torvalds committed 4 years ago

Commit b336ad52 parents d0f67ad d0e51026 files · +24 −18Browse files

Unified · Split

6 files
  1. drivers/hwmon/ibmaem.c +8 −4
  2. drivers/hwmon/occ/common.c +3 −2
  3. drivers/hwmon/occ/common.h +2 −1
  4. drivers/hwmon/occ/p8_i2c.c +7 −6
  5. drivers/hwmon/occ/p9_sbe.c +3 −4
  6. drivers/hwmon/pmbus/ucd9200.c +1 −1
drivers/hwmon/ibmaem.c+8−4
@@ -550,7 +550,7 @@ static int aem_init_aem1_inst(struct aem_ipmi_data *probe, u8 module_handle) · 549 unmodified lines
550 550
551 res = platform_device_add(data->pdev);551 res = platform_device_add(data->pdev);
552 if (res)552 if (res)
553 goto ipmi_err;553 goto dev_add_err;
554 554
555 platform_set_drvdata(data->pdev, data);555 platform_set_drvdata(data->pdev, data);
556 556
@@ -598,7 +598,9 @@ hwmon_reg_err: · 41 unmodified lines
598 ipmi_destroy_user(data->ipmi.user);598 ipmi_destroy_user(data->ipmi.user);
599ipmi_err:599ipmi_err:
600 platform_set_drvdata(data->pdev, NULL);600 platform_set_drvdata(data->pdev, NULL);
601 platform_device_unregister(data->pdev);601 platform_device_del(data->pdev);
602dev_add_err:
603 platform_device_put(data->pdev);
602dev_err:604dev_err:
603 ida_free(&aem_ida, data->id);605 ida_free(&aem_ida, data->id);
604id_err:606id_err:
@@ -690,7 +692,7 @@ static int aem_init_aem2_inst(struct aem_ipmi_data *probe, · 85 unmodified lines
690 692
691 res = platform_device_add(data->pdev);693 res = platform_device_add(data->pdev);
692 if (res)694 if (res)
693 goto ipmi_err;695 goto dev_add_err;
694 696
695 platform_set_drvdata(data->pdev, data);697 platform_set_drvdata(data->pdev, data);
696 698
@@ -738,7 +740,9 @@ hwmon_reg_err: · 41 unmodified lines
738 ipmi_destroy_user(data->ipmi.user);740 ipmi_destroy_user(data->ipmi.user);
739ipmi_err:741ipmi_err:
740 platform_set_drvdata(data->pdev, NULL);742 platform_set_drvdata(data->pdev, NULL);
741 platform_device_unregister(data->pdev);743 platform_device_del(data->pdev);
744dev_add_err:
745 platform_device_put(data->pdev);
742dev_err:746dev_err:
743 ida_free(&aem_ida, data->id);747 ida_free(&aem_ida, data->id);
744id_err:748id_err:
drivers/hwmon/occ/common.c+3−2
@@ -145,7 +145,7 @@ static int occ_poll(struct occ *occ) · 144 unmodified lines
145 cmd[6] = 0; /* checksum lsb */145 cmd[6] = 0; /* checksum lsb */
146 146
147 /* mutex should already be locked if necessary */147 /* mutex should already be locked if necessary */
148 rc = occ->send_cmd(occ, cmd, sizeof(cmd));148 rc = occ->send_cmd(occ, cmd, sizeof(cmd), &occ->resp, sizeof(occ->resp));
149 if (rc) {149 if (rc) {
150 occ->last_error = rc;150 occ->last_error = rc;
151 if (occ->error_count++ > OCC_ERROR_COUNT_THRESHOLD)151 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) · 30 unmodified lines
182{182{
183 int rc;183 int rc;
184 u8 cmd[8];184 u8 cmd[8];
185 u8 resp[8];
185 __be16 user_power_cap_be = cpu_to_be16(user_power_cap);186 __be16 user_power_cap_be = cpu_to_be16(user_power_cap);
186 187
187 cmd[0] = 0; /* sequence number */188 cmd[0] = 0; /* sequence number */
@@ -198,7 +199,7 @@ static int occ_set_user_power_cap(struct occ *occ, u16 user_power_cap) · 10 unmodified lines
198 if (rc)199 if (rc)
199 return rc;200 return rc;
200 201
201 rc = occ->send_cmd(occ, cmd, sizeof(cmd));202 rc = occ->send_cmd(occ, cmd, sizeof(cmd), resp, sizeof(resp));
202 203
203 mutex_unlock(&occ->lock);204 mutex_unlock(&occ->lock);
204 205
drivers/hwmon/occ/common.h+2−1
@@ -96,7 +96,8 @@ struct occ { · 95 unmodified lines
96 96
97 int powr_sample_time_us; /* average power sample time */97 int powr_sample_time_us; /* average power sample time */
98 u8 poll_cmd_data; /* to perform OCC poll command */98 u8 poll_cmd_data; /* to perform OCC poll command */
99 int (*send_cmd)(struct occ *occ, u8 *cmd, size_t len);99 int (*send_cmd)(struct occ *occ, u8 *cmd, size_t len, void *resp,
100 size_t resp_len);
100 101
101 unsigned long next_update;102 unsigned long next_update;
102 struct mutex lock; /* lock OCC access */103 struct mutex lock; /* lock OCC access */
drivers/hwmon/occ/p8_i2c.c+7−6
@@ -111,7 +111,8 @@ static int p8_i2c_occ_putscom_be(struct i2c_client *client, u32 address, · 110 unmodified lines
111 be32_to_cpu(data1));111 be32_to_cpu(data1));
112}112}
113 113
114static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)114static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len,
115 void *resp, size_t resp_len)
115{116{
116 int i, rc;117 int i, rc;
117 unsigned long start;118 unsigned long start;
@@ -120,7 +121,7 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len) · 2 unmodified lines
120 const long wait_time = msecs_to_jiffies(OCC_CMD_IN_PRG_WAIT_MS);121 const long wait_time = msecs_to_jiffies(OCC_CMD_IN_PRG_WAIT_MS);
121 struct p8_i2c_occ *ctx = to_p8_i2c_occ(occ);122 struct p8_i2c_occ *ctx = to_p8_i2c_occ(occ);
122 struct i2c_client *client = ctx->client;123 struct i2c_client *client = ctx->client;
123 struct occ_response *resp = &occ->resp;124 struct occ_response *or = (struct occ_response *)resp;
124 125
125 start = jiffies;126 start = jiffies;
126 127
@@ -151,7 +152,7 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len) · 24 unmodified lines
151 return rc;152 return rc;
152 153
153 /* wait for OCC */154 /* wait for OCC */
154 if (resp->return_status == OCC_RESP_CMD_IN_PRG) {155 if (or->return_status == OCC_RESP_CMD_IN_PRG) {
155 rc = -EALREADY;156 rc = -EALREADY;
156 157
157 if (time_after(jiffies, start + timeout))158 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) · 5 unmodified lines
163 } while (rc);164 } while (rc);
164 165
165 /* check the OCC response */166 /* check the OCC response */
166 switch (resp->return_status) {167 switch (or->return_status) {
167 case OCC_RESP_CMD_IN_PRG:168 case OCC_RESP_CMD_IN_PRG:
168 rc = -ETIMEDOUT;169 rc = -ETIMEDOUT;
169 break;170 break;
@@ -192,8 +193,8 @@ static int p8_i2c_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len) · 22 unmodified lines
192 if (rc < 0)193 if (rc < 0)
193 return rc;194 return rc;
194 195
195 data_length = get_unaligned_be16(&resp->data_length);196 data_length = get_unaligned_be16(&or->data_length);
196 if (data_length > OCC_RESP_DATA_BYTES)197 if ((data_length + 7) > resp_len)
197 return -EMSGSIZE;198 return -EMSGSIZE;
198 199
199 /* fetch the rest of the response data */200 /* fetch the rest of the response data */
drivers/hwmon/occ/p9_sbe.c+3−4
@@ -78,11 +78,10 @@ done: · 77 unmodified lines
78 return notify;78 return notify;
79}79}
80 80
81static int p9_sbe_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len)81static int p9_sbe_occ_send_cmd(struct occ *occ, u8 *cmd, size_t len,
82 void *resp, size_t resp_len)
82{83{
83 struct occ_response *resp = &occ->resp;
84 struct p9_sbe_occ *ctx = to_p9_sbe_occ(occ);84 struct p9_sbe_occ *ctx = to_p9_sbe_occ(occ);
85 size_t resp_len = sizeof(*resp);
86 int rc;85 int rc;
87 86
88 rc = fsi_occ_submit(ctx->sbe, cmd, len, resp, &resp_len);87 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) · 7 unmodified lines
96 return rc;95 return rc;
97 }96 }
98 97
99 switch (resp->return_status) {98 switch (((struct occ_response *)resp)->return_status) {
100 case OCC_RESP_CMD_IN_PRG:99 case OCC_RESP_CMD_IN_PRG:
101 rc = -ETIMEDOUT;100 rc = -ETIMEDOUT;
102 break;101 break;
drivers/hwmon/pmbus/ucd9200.c+1−1
@@ -148,7 +148,7 @@ static int ucd9200_probe(struct i2c_client *client) · 147 unmodified lines
148 * This only affects the READ_IOUT and READ_TEMPERATURE2 registers.148 * This only affects the READ_IOUT and READ_TEMPERATURE2 registers.
149 * READ_IOUT will return the sum of currents of all phases of a rail,149 * READ_IOUT will return the sum of currents of all phases of a rail,
150 * and READ_TEMPERATURE2 will return the maximum temperature detected150 * and READ_TEMPERATURE2 will return the maximum temperature detected
151 * for the the phases of the rail.151 * for the phases of the rail.
152 */152 */
153 for (i = 0; i < info->pages; i++) {153 for (i = 0; i < info->pages; i++) {
154 /*154 /*