platform/chrome: cros_ec_dev - utilize new cdev_device_add helper function
Replace the open coded registration of the cdev and dev with the new device_add_cdev() helper. The helper replaces a common pattern by taking the proper reference against the parent device and adding both the cdev and the device. At the same time we cleanup the error path through device_probe function: we use put_device instead of kfree directly as recommended by the device_initialize documentation. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8dbbf58251
commit
1c1d152cc5
|
@ -391,7 +391,6 @@ static int ec_device_probe(struct platform_device *pdev)
|
|||
int retval = -ENOMEM;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct cros_ec_platform *ec_platform = dev_get_platdata(dev);
|
||||
dev_t devno = MKDEV(ec_major, pdev->id);
|
||||
struct cros_ec_dev *ec = kzalloc(sizeof(*ec), GFP_KERNEL);
|
||||
|
||||
if (!ec)
|
||||
|
@ -406,24 +405,12 @@ static int ec_device_probe(struct platform_device *pdev)
|
|||
device_initialize(&ec->class_dev);
|
||||
cdev_init(&ec->cdev, &fops);
|
||||
|
||||
/*
|
||||
* Add the character device
|
||||
* Link cdev to the class device to be sure device is not used
|
||||
* before unbinding it.
|
||||
*/
|
||||
ec->cdev.kobj.parent = &ec->class_dev.kobj;
|
||||
retval = cdev_add(&ec->cdev, devno, 1);
|
||||
if (retval) {
|
||||
dev_err(dev, ": failed to add character device\n");
|
||||
goto cdev_add_failed;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the class device
|
||||
* Link to the character device for creating the /dev entry
|
||||
* in devtmpfs.
|
||||
*/
|
||||
ec->class_dev.devt = ec->cdev.dev;
|
||||
ec->class_dev.devt = MKDEV(ec_major, pdev->id);
|
||||
ec->class_dev.class = &cros_class;
|
||||
ec->class_dev.parent = dev;
|
||||
ec->class_dev.release = __remove;
|
||||
|
@ -431,13 +418,13 @@ static int ec_device_probe(struct platform_device *pdev)
|
|||
retval = dev_set_name(&ec->class_dev, "%s", ec_platform->ec_name);
|
||||
if (retval) {
|
||||
dev_err(dev, "dev_set_name failed => %d\n", retval);
|
||||
goto set_named_failed;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
retval = device_add(&ec->class_dev);
|
||||
retval = cdev_device_add(&ec->cdev, &ec->class_dev);
|
||||
if (retval) {
|
||||
dev_err(dev, "device_register failed => %d\n", retval);
|
||||
goto dev_reg_failed;
|
||||
dev_err(dev, "cdev_device_add failed => %d\n", retval);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
/* check whether this EC is a sensor hub. */
|
||||
|
@ -446,12 +433,8 @@ static int ec_device_probe(struct platform_device *pdev)
|
|||
|
||||
return 0;
|
||||
|
||||
dev_reg_failed:
|
||||
set_named_failed:
|
||||
dev_set_drvdata(dev, NULL);
|
||||
cdev_del(&ec->cdev);
|
||||
cdev_add_failed:
|
||||
kfree(ec);
|
||||
failed:
|
||||
put_device(&ec->class_dev);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue