struct devfreq_event_dev *edev;
struct mutex lock;
struct dram_timing *timing;
-
- /*
- * DDR Converser of Frequency (DCF) is used to implement DDR frequency
- * conversion without the participation of CPU, we will implement and
- * control it in arm trust firmware.
- */
- wait_queue_head_t wait_dcf_queue;
- int irq;
- int wait_dcf_flag;
struct regulator *vdd_center;
unsigned long rate, target_rate;
unsigned long volt, target_volt;
err = regulator_set_voltage(dmcfreq->vdd_center, target_volt,
INT_MAX);
if (err) {
- dev_err(dev, "Cannot to set voltage %lu uV\n",
+ dev_err(dev, "Cannot set voltage %lu uV\n",
target_volt);
goto out;
}
}
-
mutex_lock(&dmcfreq->lock);
/*
err = regulator_set_voltage(dmcfreq->vdd_center, target_volt,
INT_MAX);
if (err) {
- dev_err(dev, "Cannot to set voltage %lu uV\n",
+ dev_err(dev, "Cannot set voltage %lu uV\n",
target_volt);
goto out;
}
err = clk_set_rate(dmcfreq->dmc_clk, target_rate);
if (err) {
- dev_err(dev, "Cannot to set frequency %lu (%d)\n",
+ dev_err(dev, "Cannot set frequency %lu (%d)\n",
target_rate, err);
regulator_set_voltage(dmcfreq->vdd_center, dmcfreq->volt,
INT_MAX);
/* If get the incorrect rate, set voltage to old value. */
if (dmcfreq->rate != target_rate) {
- dev_err(dev, "Get wrong ddr frequency, Request frequency %lu,\
- Current frequency %lu\n", target_rate, dmcfreq->rate);
+ dev_err(dev, "Get wrong frequency, Request %lu, Current %lu\n",
+ target_rate, dmcfreq->rate);
regulator_set_voltage(dmcfreq->vdd_center, dmcfreq->volt,
INT_MAX);
goto out;
err = regulator_set_voltage(dmcfreq->vdd_center, target_volt,
INT_MAX);
if (err) {
- dev_err(dev, "Cannot to set vol %lu uV\n", target_volt);
+ dev_err(dev, "Cannot set vol %lu uV\n", target_volt);
goto out;
}
}
return timing;
}
-static int of_get_opp_table(struct device *dev,
- struct devfreq_dev_profile *devp)
+static int rk3399_dmcfreq_init_freq_table(struct device *dev,
+ struct devfreq_dev_profile *devp)
{
int count;
int i = 0;
*/
if (dev_pm_opp_of_add_table(dev)) {
dev_err(dev, "Invalid operating-points in device tree.\n");
- rcu_read_unlock();
return -EINVAL;
}
- if (of_get_opp_table(dev, devp))
+ if (rk3399_dmcfreq_init_freq_table(dev, devp))
return -EFAULT;
of_property_read_u32(np, "upthreshold",
data->volt = regulator_get_voltage(data->vdd_center);
devp->initial_freq = data->rate;
- data->devfreq = devfreq_add_device(dev, devp,
+ data->devfreq = devm_devfreq_add_device(dev, devp,
"simple_ondemand",
&data->ondemand_data);
if (IS_ERR(data->devfreq))
return PTR_ERR(data->devfreq);
devm_devfreq_register_opp_notifier(dev, data->devfreq);
+ data->devfreq->min_freq = devp->freq_table[0];
+ data->devfreq->max_freq =
+ devp->freq_table[devp->max_state ? devp->max_state - 1 : 0];
+
data->dev = dev;
platform_set_drvdata(pdev, data);
return 0;
}
-static int rk3399_dmcfreq_remove(struct platform_device *pdev)
-{
- struct rk3399_dmcfreq *dmcfreq = platform_get_drvdata(pdev);
-
- regulator_put(dmcfreq->vdd_center);
-
- return 0;
-}
-
static const struct of_device_id rk3399dmc_devfreq_of_match[] = {
{ .compatible = "rockchip,rk3399-dmc" },
{ },
};
+MODULE_DEVICE_TABLE(of, rk3399dmc_devfreq_of_match);
static struct platform_driver rk3399_dmcfreq_driver = {
.probe = rk3399_dmcfreq_probe,
- .remove = rk3399_dmcfreq_remove,
.driver = {
.name = "rk3399-dmc-freq",
.pm = &rk3399_dmcfreq_pm,