diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index 504c28d18636..af7c8c30add6 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -27,6 +27,9 @@ #include #include #include "governor.h" +#ifdef CONFIG_ARCH_ROCKCHIP +#include "../base/base.h" +#endif static struct class *devfreq_class; @@ -634,6 +637,18 @@ struct devfreq *devfreq_add_device(struct device *dev, goto err_out; } +#ifdef CONFIG_ARCH_ROCKCHIP + if (sysfs_create_link(&devfreq->dev.class->p->subsys.kobj, + &devfreq->dev.kobj, dev_name(dev))) { + dev_err(dev, "failed to create devfreq %s link\n", + dev_name(dev)); + device_unregister(&devfreq->dev); + mutex_unlock(&devfreq->lock); + put_device(&devfreq->dev); + goto err_out; + } +#endif + devfreq->trans_table = devm_kzalloc(&devfreq->dev, array3_size(sizeof(unsigned int), @@ -699,6 +714,11 @@ int devfreq_remove_device(struct devfreq *devfreq) if (!devfreq) return -EINVAL; +#ifdef CONFIG_ARCH_ROCKCHIP + sysfs_delete_link(&devfreq->dev.class->p->subsys.kobj, + &devfreq->dev.kobj, dev_name(devfreq->dev.parent)); +#endif + device_unregister(&devfreq->dev); return 0;