Skip to content

Commit 07d971a

Browse files
committed
Merge tag 'tag-chrome-platform-for-v6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux
Pull chrome platform updates from Tzung-Bi Shih: "Improvements: - Replace fake flexible arrays with flexible-array member Misc: - Minor cleanups and fixes" * tag 'tag-chrome-platform-for-v6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux: platform/chrome: wilco_ec: remove return value check of debugfs_create_dir() platform/chrome: cros_ec_debugfs: fix kernel-doc warning platform/chrome: cros_ec: Separate logic for getting panic info platform/chrome: cros_typec_switch: Add missing fwnode_handle_put() platform/chrome: cros_ec: remove unneeded label and if-condition platform/chrome: Replace fake flexible arrays with flexible-array member
2 parents 4ea9569 + d184d60 commit 07d971a

5 files changed

Lines changed: 39 additions & 18 deletions

File tree

drivers/platform/chrome/cros_ec.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
206206
err = cros_ec_query_all(ec_dev);
207207
if (err) {
208208
dev_err(dev, "Cannot identify the EC: error %d\n", err);
209-
goto destroy_mutex;
209+
goto exit;
210210
}
211211

212212
if (ec_dev->irq > 0) {
@@ -218,7 +218,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
218218
if (err) {
219219
dev_err(dev, "Failed to request IRQ %d: %d\n",
220220
ec_dev->irq, err);
221-
goto destroy_mutex;
221+
goto exit;
222222
}
223223
}
224224

@@ -230,7 +230,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
230230
dev_err(ec_dev->dev,
231231
"Failed to create CrOS EC platform device\n");
232232
err = PTR_ERR(ec_dev->ec);
233-
goto destroy_mutex;
233+
goto exit;
234234
}
235235

236236
if (ec_dev->max_passthru) {
@@ -296,7 +296,6 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
296296
exit:
297297
platform_device_unregister(ec_dev->ec);
298298
platform_device_unregister(ec_dev->pd);
299-
destroy_mutex:
300299
mutex_destroy(&ec_dev->lock);
301300
lockdep_unregister_key(&ec_dev->lockdep_key);
302301
return err;
@@ -313,8 +312,7 @@ EXPORT_SYMBOL(cros_ec_register);
313312
*/
314313
void cros_ec_unregister(struct cros_ec_device *ec_dev)
315314
{
316-
if (ec_dev->pd)
317-
platform_device_unregister(ec_dev->pd);
315+
platform_device_unregister(ec_dev->pd);
318316
platform_device_unregister(ec_dev->ec);
319317
mutex_destroy(&ec_dev->lock);
320318
lockdep_unregister_key(&ec_dev->lockdep_key);

drivers/platform/chrome/cros_ec_debugfs.c

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -400,24 +400,48 @@ static void cros_ec_cleanup_console_log(struct cros_ec_debugfs *debug_info)
400400
}
401401
}
402402

403-
static int cros_ec_create_panicinfo(struct cros_ec_debugfs *debug_info)
403+
/*
404+
* Returns the size of the panicinfo data fetched from the EC
405+
*/
406+
static int cros_ec_get_panicinfo(struct cros_ec_device *ec_dev, uint8_t *data,
407+
int data_size)
404408
{
405-
struct cros_ec_device *ec_dev = debug_info->ec->ec_dev;
406409
int ret;
407410
struct cros_ec_command *msg;
408-
int insize;
409411

410-
insize = ec_dev->max_response;
412+
if (!data || data_size <= 0 || data_size > ec_dev->max_response)
413+
return -EINVAL;
411414

412-
msg = devm_kzalloc(debug_info->ec->dev,
413-
sizeof(*msg) + insize, GFP_KERNEL);
415+
msg = kzalloc(sizeof(*msg) + data_size, GFP_KERNEL);
414416
if (!msg)
415417
return -ENOMEM;
416418

417419
msg->command = EC_CMD_GET_PANIC_INFO;
418-
msg->insize = insize;
420+
msg->insize = data_size;
419421

420422
ret = cros_ec_cmd_xfer_status(ec_dev, msg);
423+
if (ret < 0)
424+
goto free;
425+
426+
memcpy(data, msg->data, data_size);
427+
428+
free:
429+
kfree(msg);
430+
return ret;
431+
}
432+
433+
static int cros_ec_create_panicinfo(struct cros_ec_debugfs *debug_info)
434+
{
435+
struct cros_ec_device *ec_dev = debug_info->ec->ec_dev;
436+
int ret;
437+
void *data;
438+
439+
data = devm_kzalloc(debug_info->ec->dev, ec_dev->max_response,
440+
GFP_KERNEL);
441+
if (!data)
442+
return -ENOMEM;
443+
444+
ret = cros_ec_get_panicinfo(ec_dev, data, ec_dev->max_response);
421445
if (ret < 0) {
422446
ret = 0;
423447
goto free;
@@ -427,7 +451,7 @@ static int cros_ec_create_panicinfo(struct cros_ec_debugfs *debug_info)
427451
if (ret == 0)
428452
goto free;
429453

430-
debug_info->panicinfo_blob.data = msg->data;
454+
debug_info->panicinfo_blob.data = data;
431455
debug_info->panicinfo_blob.size = ret;
432456

433457
debugfs_create_blob("panicinfo", S_IFREG | 0444, debug_info->dir,
@@ -436,7 +460,7 @@ static int cros_ec_create_panicinfo(struct cros_ec_debugfs *debug_info)
436460
return 0;
437461

438462
free:
439-
devm_kfree(debug_info->ec->dev, msg);
463+
devm_kfree(debug_info->ec->dev, data);
440464
return ret;
441465
}
442466

drivers/platform/chrome/cros_typec_switch.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ static int cros_typec_register_switches(struct cros_typec_switch_data *sdata)
270270

271271
return 0;
272272
err_switch:
273+
fwnode_handle_put(fwnode);
273274
cros_typec_unregister_switches(sdata);
274275
return ret;
275276
}

drivers/platform/chrome/wilco_ec/debugfs.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,6 @@ static int wilco_ec_debugfs_probe(struct platform_device *pdev)
251251
return 0;
252252
debug_info->ec = ec;
253253
debug_info->dir = debugfs_create_dir("wilco_ec", NULL);
254-
if (!debug_info->dir)
255-
return 0;
256254
debugfs_create_file("raw", 0644, debug_info->dir, NULL, &fops_raw);
257255
debugfs_create_file("h1_gpio", 0444, debug_info->dir, ec,
258256
&fops_h1_gpio);

include/linux/platform_data/cros_ec_commands.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2701,7 +2701,7 @@ struct ec_response_motion_sense {
27012701
* Sensor data is truncated if response_max is too small
27022702
* for holding all the data.
27032703
*/
2704-
struct ec_response_motion_sensor_data sensor[0];
2704+
DECLARE_FLEX_ARRAY(struct ec_response_motion_sensor_data, sensor);
27052705
} dump;
27062706

27072707
/* Used for MOTIONSENSE_CMD_INFO. */

0 commit comments

Comments
 (0)