};\r
\r
static struct clk *pwm_clk[2];\r
+static struct rk_pwm_dcdc *g_dcdc;\r
\r
static int pwm_set_rate(struct pwm_platform_data *pdata,int nHz,u32 rate)\r
{\r
if(!pdata->min_uV)\r
pdata->min_uV = 1000000;\r
\r
+ if(pdata->suspend_voltage < pdata->min_uV)\r
+ pdata->suspend_voltage = pdata->min_uV;\r
+ \r
+ if(pdata->suspend_voltage > pdata->max_uV) \r
+ pdata->suspend_voltage = pdata->max_uV;\r
+ \r
dcdc = kzalloc(sizeof(struct rk_pwm_dcdc), GFP_KERNEL);\r
if (dcdc == NULL) {
dev_err(&pdev->dev, "Unable to allocate private data\n");
clk_enable(pwm_clk[1]);\r
}\r
#endif\r
-\r
-\r
- platform_set_drvdata(pdev, dcdc);\r
+ \r
+ g_dcdc = dcdc;\r
+ platform_set_drvdata(pdev, dcdc); \r
printk(KERN_INFO "pwm_regulator.%d: driver initialized\n",id);\r
\r
return 0;\r
\r
}\r
\r
+static int __sramdata g_PWM_REG_LRC = 0;\r
+static int __sramdata g_PWM_REG_HRC = 0;\r
+void pwm_suspend_voltage(void)\r
+{\r
+ struct rk_pwm_dcdc *dcdc = g_dcdc;\r
+ int suspend_voltage = 0;\r
+ int pwm_id = 0;\r
+ \r
+ if(!dcdc)\r
+ return;\r
+ pwm_id = dcdc->pdata->pwm_id;\r
+ suspend_voltage = dcdc->pdata->suspend_voltage;\r
+ \r
+ g_PWM_REG_LRC = pwm_read_reg(pwm_id, PWM_REG_LRC);\r
+ g_PWM_REG_HRC = pwm_read_reg(pwm_id,PWM_REG_HRC);\r
+\r
+ switch(suspend_voltage)\r
+ {\r
+ case 1000000:\r
+ pwm_write_reg(pwm_id, PWM_REG_LRC, 0x25);\r
+ pwm_write_reg(pwm_id,PWM_REG_HRC,0x20); // 1 .00\r
+ break;\r
+ \r
+ case 1050000:\r
+ pwm_write_reg(pwm_id, PWM_REG_LRC, 0x25);\r
+ pwm_write_reg(pwm_id,PWM_REG_HRC,0x1c); // 1 .05\r
+ break;\r
+ \r
+ case 1100000:\r
+ pwm_write_reg(pwm_id, PWM_REG_LRC, 0x25);\r
+ pwm_write_reg(pwm_id,PWM_REG_HRC,0x18); // 1 .1\r
+ break;\r
+\r
+ case 1150000:\r
+ pwm_write_reg(pwm_id, PWM_REG_LRC, 0x25);\r
+ pwm_write_reg(pwm_id,PWM_REG_HRC,0x13); // 1 .15\r
+ break;\r
+\r
+ default:\r
+ pwm_write_reg(pwm_id, PWM_REG_LRC, 0x25);\r
+ pwm_write_reg(pwm_id,PWM_REG_HRC,0x20); // 1 .00\r
+ break;\r
+\r
+ }\r
+ \r
+}\r
+\r
+void pwm_resume_voltage(void)\r
+ {\r
+ struct rk_pwm_dcdc *dcdc = g_dcdc; \r
+ int pwm_id = 0;\r
+ \r
+ if(!dcdc)\r
+ return;\r
+ pwm_id = dcdc->pdata->pwm_id;\r
+ pwm_write_reg(pwm_id, PWM_REG_LRC, g_PWM_REG_LRC);\r
+ pwm_write_reg(pwm_id,PWM_REG_HRC, g_PWM_REG_HRC);\r
+ \r
+}\r
+\r
+\r
static int pwm_regulator_suspend(struct platform_device *pdev, pm_message_t state)\r
{\r
struct pwm_platform_data *pdata = pdev->dev.platform_data;\r
- pwm_set_rate(pdata,1000*1000,100);//pwm clk will change to 24M after suspend\r
+ //struct rk_pwm_dcdc *dcdc = platform_get_drvdata(pdev);\r
+ //unsigned selector = 0;\r
+ //pwm_regulator_set_voltage(dcdc->regulator, 1100000, 1100000, &selector);\r
DBG("%s,pwm_id=%d\n",__func__,pdata->pwm_id);\r
return 0;\r
}\r
static int pwm_regulator_resume(struct platform_device *pdev)\r
{\r
struct pwm_platform_data *pdata = pdev->dev.platform_data;\r
+ //struct rk_pwm_dcdc *dcdc = platform_get_drvdata(pdev);\r
+ //unsigned selector = 0;\r
+ //pwm_regulator_set_voltage(dcdc->regulator, 1150000, 1150000, &selector);\r
DBG("%s,pwm_id=%d\n",__func__,pdata->pwm_id);\r
return 0;\r
}\r