static int rt5025_pre_init(struct rt5025_chip *rt5025_chip){

	
	printk("%s,line=%d\n", __func__,__LINE__);	
	int ret;
	/**********set voltage speed***********************/
	ret = rt5025_reg_read(rt5025_chip->i2c, 0x08);
	ret &= (~(3<<0));  //dcdc1 25mv/10us
	rt5025_reg_write(rt5025_chip->i2c, 0x08,ret);
	
	ret = rt5025_reg_read(rt5025_chip->i2c, 0x09);
	ret &= (~(3<<0));//dcdc2 100mv/10us
	rt5025_reg_write(rt5025_chip->i2c, 0x09,ret);
	
	ret = rt5025_reg_read(rt5025_chip->i2c, 0x0a);
	ret &= (~(3<<0));//dcdc3 50mv/12us
	rt5025_reg_write(rt5025_chip->i2c, 0x0a,ret);
	/************************************************/
	/***************set power off voltage***************/
	ret = rt5025_reg_read(rt5025_chip->i2c, 0x17);
	ret &= (~(7<<5));  //power off 2.8v
	rt5025_reg_write(rt5025_chip->i2c, 0x17,ret);

	ret = rt5025_reg_read(rt5025_chip->i2c, 0x17);
	ret |= (1<<3);  //enable DC4 boost
	rt5025_reg_write(rt5025_chip->i2c, 0x17,ret);
	/***********************************************/
	/************************************************/
	return 0;
  }
int rt5025_cable_exist(void)
{
	int ret = 0;
	#ifdef CONFIG_CHARGER_RT5025
	struct power_supply *psy = power_supply_get_by_name("rt-charger");
	union power_supply_propval pval;

	if (!psy) {
		pr_err(" couldn't get charger power supply\n");
	} else {
		ret = psy->get_property(psy,
			POWER_SUPPLY_PROP_CHARGE_NOW, &pval);
		if (ret < 0) {
			ret = 0;
		} else {
			if (pval.intval > POWER_SUPPLY_TYPE_BATTERY)
				ret = 1;
			else
				ret = 0;
		}
	}
	#else
	ret = rt5025_reg_read(g_shdn, RT5025_REG_CHGCTL1);
	if (ret < 0) {
		pr_err("couldn't get cable status\n");
		ret = 0;
	} else {
		if (ret & RT5025_CABLEIN_MASK)
			ret = 1;
		else
			ret = 0;
	}
	#endif /* #ifdef CONFIG_CHARGER_RT5025 */
	return ret;
}
static int rt5025_is_enabled(struct regulator_dev *rdev)
{
	struct rt5025_regulator_info *info = rdev_get_drvdata(rdev);
	int ret;

	ret = rt5025_reg_read(info->i2c, info->enable_reg);
	if (ret < 0)
		return ret;
	return (ret & (info->enable_bit))?1 : 0;
}
static int rt5025_get_voltage_sel(struct regulator_dev *rdev)
{
	struct rt5025_regulator_info *info = rdev_get_drvdata(rdev);
	int ret;

	ret = rt5025_reg_read(info->i2c, info->vol_reg);
	if (ret < 0)
		return ret;
	return (ret & info->vol_mask)  >> info->vol_shift;
}
static int  rt5025_misc_reginit(struct i2c_client *client)
{
	rt5025_reg_write(client, RT5025_REG_MISC1, misc_init_regval[0]);
	rt5025_reg_write(client, RT5025_REG_ONEVENT, misc_init_regval[1]);
	rt5025_assign_bits(client, RT5025_REG_DCDCONOFF,
		RT5025_VSYSOFF_MASK, misc_init_regval[2]);
	rt5025_reg_write(client, RT5025_REG_MISC2, misc_init_regval[3]);
	rt5025_reg_write(client, RT5025_REG_MISC3, misc_init_regval[4]);
	rt5025_reg_write(client, RT5025_REG_MISC4, misc_init_regval[5]);
	/*set all to be masked*/
	rt5025_reg_write(client, RT5025_REG_IRQEN4, 0x00);
	rt5025_reg_write(client, RT5025_REG_IRQEN5, 0x00);
	/*clear the old irq status*/
	rt5025_reg_read(client, RT5025_REG_IRQSTAT4);
	rt5025_reg_read(client, RT5025_REG_IRQSTAT5);
	/*set enable irqs as we want*/
	rt5025_reg_write(client, RT5025_REG_IRQEN4, misc_init_regval[6]);
	rt5025_reg_write(client, RT5025_REG_IRQEN5, misc_init_regval[7]);
	return 0;
}
int rt5025_cable_exist(void)
{
	int ret = 0;
	ret = rt5025_reg_read(g_shdn, 0x01);
	if (ret < 0)
		return 0;
	else
	{
		if (ret&0x3)
			return 1;
		return 0;
	}
}
static unsigned int rt5025_get_mode(struct regulator_dev *rdev)
{
	struct rt5025_regulator_info *info = rdev_get_drvdata(rdev);
	unsigned int mode;
	int data;

	if (!info->mode_bit) {
		mode = REGULATOR_MODE_NORMAL;
	} else {
		data = rt5025_reg_read(info->i2c, info->mode_reg);
		mode = (data & info->mode_bit)?REGULATOR_MODE_NORMAL : REGULATOR_MODE_FAST;
	}
	return mode;
}
static int rt5025_gpio_get_value(struct gpio_chip *chip, unsigned offset)
{
	struct rt5025_gpio_info *gi = dev_get_drvdata(chip->dev);
	int gpio_reg = 0;
	int ret = 0;

	ret = find_rt5025_gpioreg(offset, &gpio_reg);
	if (ret < 0) {
		dev_err(chip->dev, "not a valid gpio index\n");
		return ret;
	}

	ret = rt5025_reg_read(gi->i2c, gpio_reg);
	if (ret < 0) {
		dev_err(chip->dev, "read gpio register fail\n");
		return ret;
	}

	return (ret&RT5025_GPIO_IVALUEMASK)?1 : 0;
}