{
int ret;
- printk("%s\n", __func__);
+// printk("%s\n", __func__);
//ILIM = 900ma
ret = wm831x_reg_read(parm, WM831X_POWER_STATE) & 0xffff;
wm831x_reg_write(parm, WM831X_POWER_STATE, (ret & 0xfff8) | 0x04);
wm831x_reg_write(parm, WM831X_SECURITY_KEY, 0x9716); // unlock security key
wm831x_set_bits(parm, WM831X_RESET_CONTROL, 0x1000, 0x1000);
ret = wm831x_reg_read(parm, WM831X_RESET_CONTROL) & 0xffff & UNLOCK_SECURITY_KEY; // enternal reset active in sleep
- printk("%s:WM831X_RESET_CONTROL=0x%x\n", __func__, ret);
+// printk("%s:WM831X_RESET_CONTROL=0x%x\n", __func__, ret);
wm831x_reg_write(parm, WM831X_RESET_CONTROL, ret);
+ wm831x_set_bits(parm,WM831X_DC1_ON_CONFIG ,0x0300,0x0000); //set dcdc mode is FCCM
+ wm831x_set_bits(parm,WM831X_DC2_ON_CONFIG ,0x0300,0x0000);
+ wm831x_set_bits(parm,WM831X_DC3_ON_CONFIG ,0x0300,0x0000);
+ wm831x_set_bits(parm,0x4066,0x0300,0x0000);
+
wm831x_reg_write(parm, WM831X_SECURITY_KEY, LOCK_SECURITY_KEY); // lock security key
return 0;
regulator_set_voltage(ldo, 3300000, 3300000);
regulator_set_suspend_voltage(ldo, 3300000);
regulator_enable(ldo);
- printk("%s set ldo6 vcc_33=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo6 vcc_33=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
regulator_set_voltage(ldo, 1100000, 1100000);
regulator_set_suspend_voltage(ldo, 1100000);
regulator_enable(ldo);
- printk("%s set ldo4 vdd_11=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo4 vdd_11=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
regulator_set_voltage(ldo, 1800000, 1800000);
regulator_set_suspend_voltage(ldo, 1800000);
regulator_enable(ldo);
- printk("%s set ldo5 vcc_25=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo5 vcc_25=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
dcdc = regulator_get(NULL, "dcdc4"); // vcc_io
regulator_set_voltage(dcdc, 3000000, 3000000);
regulator_set_suspend_voltage(dcdc, 3000000);
regulator_enable(dcdc);
- printk("%s set dcdc4 vcc_io=%dmV end\n", __func__, regulator_get_voltage(dcdc));
+// printk("%s set dcdc4 vcc_io=%dmV end\n", __func__, regulator_get_voltage(dcdc));
regulator_put(dcdc);
udelay(100);
- dcdc = regulator_get(NULL, "dcdc2"); // vdd_arm
+ dcdc = regulator_get(NULL, "vdd_cpu"); // vdd_arm
regulator_set_voltage(dcdc, 1100000, 1100000);
regulator_set_suspend_voltage(dcdc, 1000000);
regulator_enable(dcdc);
- printk("%s set dcdc2 vdd_arm=%dmV end\n", __func__, regulator_get_voltage(dcdc));
+ printk("%s set dcdc2 vdd_cpu(vdd_arm)=%dmV end\n", __func__, regulator_get_voltage(dcdc));
regulator_put(dcdc);
udelay(100);
- dcdc = regulator_get(NULL, "dcdc1"); // vdd_log
+ dcdc = regulator_get(NULL, "vdd_core"); // vdd_log
regulator_set_voltage(dcdc, 1100000, 1100000);
regulator_set_suspend_voltage(dcdc, 1100000);
regulator_enable(dcdc);
- printk("%s set dcdc1 vdd_log=%dmV end\n", __func__, regulator_get_voltage(dcdc));
+ printk("%s set dcdc1 vdd_core(vdd_log)=%dmV end\n", __func__, regulator_get_voltage(dcdc));
regulator_put(dcdc);
udelay(100);
regulator_set_voltage(dcdc, 1150000, 1150000);
regulator_set_suspend_voltage(dcdc, 1150000);
regulator_enable(dcdc);
- printk("%s set dcdc3 vcc_ddr=%dmV end\n", __func__, regulator_get_voltage(dcdc));
+// printk("%s set dcdc3 vcc_ddr=%dmV end\n", __func__, regulator_get_voltage(dcdc));
regulator_put(dcdc);
udelay(100);
regulator_set_voltage(ldo, 2800000, 2800000);
regulator_set_suspend_voltage(ldo, 2800000);
regulator_enable(ldo);
- printk("%s set ldo7 vcc28_cif=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo7 vcc28_cif=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
regulator_set_voltage(ldo, 1800000, 1800000);
regulator_set_suspend_voltage(ldo, 1800000);
regulator_enable(ldo);
- printk("%s set ldo1 vcc18_cif=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo1 vcc18_cif=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
regulator_set_voltage(ldo, 3300000, 3300000);
regulator_set_suspend_voltage(ldo, 3300000);
regulator_enable(ldo);
- printk("%s set ldo8 vcca_33=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo8 vcca_33=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
ldo = regulator_get(NULL, "ldo2"); //vccio_wl
- regulator_set_voltage(ldo, 2800000, 2800000);
- regulator_set_suspend_voltage(ldo, 2800000);
+ regulator_set_voltage(ldo, 1800000, 1800000);
+ regulator_set_suspend_voltage(ldo, 1800000);
regulator_enable(ldo);
- printk("%s set ldo2 vccio_wl=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo2 vccio_wl=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
regulator_set_voltage(ldo, 3300000, 3300000);
regulator_set_suspend_voltage(ldo, 3300000);
regulator_enable(ldo);
- printk("%s set ldo10 vcca_wl=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo10 vcca_wl=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
regulator_set_voltage(ldo, 1200000, 1200000);
regulator_set_suspend_voltage(ldo, 1200000);
regulator_enable(ldo);
- printk("%s set ldo3 vdd_12=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo3 vdd_12=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
regulator_set_voltage(ldo, 3300000, 3300000);
regulator_set_suspend_voltage(ldo, 3300000);
regulator_enable(ldo);
- printk("%s set ldo9 vcc_tp=%dmV end\n", __func__, regulator_get_voltage(ldo));
+// printk("%s set ldo9 vcc_tp=%dmV end\n", __func__, regulator_get_voltage(ldo));
regulator_put(ldo);
udelay(100);
-
+ printk("wm831x_post_init end");
return 0;
}
static struct regulator_consumer_supply dcdc1_consumers[] = {
{
- .supply = "dcdc1",
+ .supply = "vdd_core",
}
};
static struct regulator_consumer_supply dcdc2_consumers[] = {
{
- .supply = "dcdc2",
- },
- // {
- // .supply = "vcore",
- //}
+ .supply = "vdd_cpu",
+ }
+
};
static struct regulator_consumer_supply dcdc3_consumers[] = {
wm831x_otp_init(wm831x);
if (pdata && pdata->post_init) {
- wm831x_reg_unlock(wm831x);
+ wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0x9716); //wm831x_reg_unlock
wm831x_set_bits(wm831x, WM831X_RESET_CONTROL,0x0010,0x0000);
wm831x_set_bits(wm831x, WM831X_LDO_ENABLE,0Xf800,0Xf800);
ret = pdata->post_init(wm831x);
- wm831x_reg_lock(wm831x);
+ wm831x_reg_write(wm831x, WM831X_SECURITY_KEY, 0x0000); //wm831x_reg_lock
if (ret != 0) {
dev_err(wm831x->dev, "post_init() failed: %d\n", ret);
goto err_irq;
}
}
-
+
return 0;
err_irq:
return 0;
}
+
void wm831x_enter_sleep(void){
-#if 1//def CONFIG_RK2818_SOC_PM
struct regulator *dcdc = regulator_get(NULL, "dcdc1");
int i;
struct wm831x_dcdc *dc = regulator_get_drvdata(dcdc);
printk("%s:error!",__func__);
}
regulator_put(dcdc);
-#endif
}
EXPORT_SYMBOL_GPL(wm831x_enter_sleep);
void wm831x_exit_sleep(void){
-#if 1//def CONFIG_RK2818_SOC_PM
struct regulator *dcdc = regulator_get(NULL, "dcdc1");
struct wm831x_dcdc *dc = regulator_get_drvdata(dcdc);
struct wm831x *wm831x = dc->wm831x;
printk("%s:error!",__func__);
}
regulator_put(dcdc);
-#endif
}
EXPORT_SYMBOL_GPL(wm831x_exit_sleep);
ret = pdata->last_deinit(wm831x);
if (ret != 0) {
dev_info(wm831x->dev, "last_deinit() failed: %d\n", ret);
- //goto err_irq;
}
}
static int wm831x_i2c_read_device(struct wm831x *wm831x, unsigned short reg,
int bytes, void *dest)
{
+#if defined(CONFIG_ARCH_RK30)
+ const struct i2c_client *client = wm831x->control_data;
+ struct i2c_adapter *adap=client->adapter;
+ struct i2c_msg msgs[2];
+ int ret;
+ char reg_buf[2];
+ const short regs = reg;
+ int scl_rate= 100 * 1000;
+ short *buf = dest;
+ int count = bytes/2;
+
+ reg_buf[0] = (regs & 0xff00) >> 8;
+ reg_buf[1] = regs & 0x00ff;
+
+ msgs[0].addr = client->addr;
+ msgs[0].flags = client->flags;
+ msgs[0].len = 2;
+ msgs[0].buf = reg_buf;
+ msgs[0].scl_rate = scl_rate;
+
+ msgs[1].addr = client->addr;
+ msgs[1].flags = client->flags | I2C_M_RD;
+ msgs[1].len = count * 2;
+ msgs[1].buf = (char *)buf;
+ msgs[1].scl_rate = scl_rate;
+
+ ret = i2c_transfer(adap, msgs, 2);
+
+ return (ret == 2)? count : ret;
+#else
struct i2c_client *i2c = wm831x->control_data;
int ret;
u16 r = cpu_to_be16(reg);
if (ret != bytes)
return -EIO;
return 0;
+#endif
}
/* Currently we allocate the write buffer on the stack; this is OK for
static int wm831x_i2c_write_device(struct wm831x *wm831x, unsigned short reg,
int bytes, void *src)
{
+#if defined(CONFIG_ARCH_RK30)
+ const struct i2c_client *client = wm831x->control_data;
+ struct i2c_adapter *adap=client->adapter;
+ struct i2c_msg msg;
+ int ret;
+ const short regs = reg;
+ const short *buf = src;
+ int count = bytes/2;
+ int scl_rate = 100 * 1000;
+ int i;
+
+ char *tx_buf = (char *)kmalloc(2 * (count + 1), GFP_KERNEL);
+ if(!tx_buf)
+ return -ENOMEM;
+ tx_buf[0] = (regs & 0xff00) >> 8;
+ tx_buf[1] = regs & 0x00ff;
+ for(i = 0; i < count; i++){
+ tx_buf[i*2+3] = (buf[i] & 0xff00) >> 8;
+ tx_buf[i*2+2] = buf[i] & 0x00ff;
+ }
+
+ msg.addr = client->addr;
+ msg.flags = client->flags;
+ msg.len = 2 * (count + 1);
+ msg.buf = (char *)tx_buf;
+ msg.scl_rate = scl_rate;
+
+ ret = i2c_transfer(adap, &msg, 1);
+ kfree(tx_buf);
+ return (ret == 1) ? count : ret;
+#else
struct i2c_client *i2c = wm831x->control_data;
unsigned char msg[bytes + 2];
int ret;
return -EIO;
return 0;
+#endif
}
static int wm831x_i2c_probe(struct i2c_client *i2c,