+static struct platform_device *rk322x_pdev;
+
+int vop_register_dmc(void)
+{
+ struct platform_device *pdev = rk322x_pdev;
+ struct vop_device *vop_dev;
+ struct device *dev = &pdev->dev;
+ struct devfreq *devfreq;
+ struct devfreq_event_dev *event_dev;
+
+ if (!pdev)
+ return -ENODEV;
+
+ vop_dev = platform_get_drvdata(pdev);;
+ if (!vop_dev)
+ return -ENODEV;
+
+ dev = &pdev->dev;
+ devfreq = devfreq_get_devfreq_by_phandle(dev, 0);
+ if (IS_ERR(devfreq)) {
+ dev_err(vop_dev->dev, "fail to get devfreq for dmc\n");
+ return -ENODEV;
+ }
+
+ vop_dev->devfreq = devfreq;
+ vop_dev->dmc_nb.notifier_call = dmc_notify;
+ devfreq_register_notifier(vop_dev->devfreq, &vop_dev->dmc_nb,
+ DEVFREQ_TRANSITION_NOTIFIER);
+
+ event_dev = devfreq_event_get_edev_by_phandle(vop_dev->devfreq->dev.parent,
+ 0);
+ if (IS_ERR(event_dev)) {
+ dev_err(vop_dev->dev, "fail to get edev for dmc\n");
+ return -ENODEV;
+ }
+
+ vop_dev->devfreq_event_dev = event_dev;
+ return 0;
+}
+