diff options
Diffstat (limited to 'drivers/regulator/wm8350-regulator.c')
| -rw-r--r-- | drivers/regulator/wm8350-regulator.c | 426 | 
1 files changed, 111 insertions, 315 deletions
diff --git a/drivers/regulator/wm8350-regulator.c b/drivers/regulator/wm8350-regulator.c index 94e550dc70b..7f0fa22ef2a 100644 --- a/drivers/regulator/wm8350-regulator.c +++ b/drivers/regulator/wm8350-regulator.c @@ -108,33 +108,6 @@ static int get_isink_val(int min_uA, int max_uA, u16 *setting)  	return -EINVAL;  } -static inline int wm8350_ldo_val_to_mvolts(unsigned int val) -{ -	if (val < 16) -		return (val * 50) + 900; -	else -		return ((val - 16) * 100) + 1800; - -} - -static inline unsigned int wm8350_ldo_mvolts_to_val(int mV) -{ -	if (mV < 1800) -		return (mV - 900) / 50; -	else -		return ((mV - 1800) / 100) + 16; -} - -static inline int wm8350_dcdc_val_to_mvolts(unsigned int val) -{ -	return (val * 25) + 850; -} - -static inline unsigned int wm8350_dcdc_mvolts_to_val(int mV) -{ -	return (mV - 850) / 25; -} -  static int wm8350_isink_set_current(struct regulator_dev *rdev, int min_uA,  	int max_uA)  { @@ -359,104 +332,13 @@ int wm8350_isink_set_flash(struct wm8350 *wm8350, int isink, u16 mode,  }  EXPORT_SYMBOL_GPL(wm8350_isink_set_flash); -static int wm8350_dcdc_set_voltage(struct regulator_dev *rdev, int min_uV, -				   int max_uV, unsigned *selector) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int volt_reg, dcdc = rdev_get_id(rdev), mV, -		min_mV = min_uV / 1000, max_mV = max_uV / 1000; -	u16 val; - -	if (min_mV < 850 || min_mV > 4025) -		return -EINVAL; -	if (max_mV < 850 || max_mV > 4025) -		return -EINVAL; - -	/* step size is 25mV */ -	mV = (min_mV - 826) / 25; -	if (wm8350_dcdc_val_to_mvolts(mV) > max_mV) -		return -EINVAL; -	BUG_ON(wm8350_dcdc_val_to_mvolts(mV) < min_mV); - -	switch (dcdc) { -	case WM8350_DCDC_1: -		volt_reg = WM8350_DCDC1_CONTROL; -		break; -	case WM8350_DCDC_3: -		volt_reg = WM8350_DCDC3_CONTROL; -		break; -	case WM8350_DCDC_4: -		volt_reg = WM8350_DCDC4_CONTROL; -		break; -	case WM8350_DCDC_6: -		volt_reg = WM8350_DCDC6_CONTROL; -		break; -	case WM8350_DCDC_2: -	case WM8350_DCDC_5: -	default: -		return -EINVAL; -	} - -	*selector = mV; - -	/* all DCDCs have same mV bits */ -	val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_DC1_VSEL_MASK; -	wm8350_reg_write(wm8350, volt_reg, val | mV); -	return 0; -} - -static int wm8350_dcdc_get_voltage_sel(struct regulator_dev *rdev) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int volt_reg, dcdc = rdev_get_id(rdev); - -	switch (dcdc) { -	case WM8350_DCDC_1: -		volt_reg = WM8350_DCDC1_CONTROL; -		break; -	case WM8350_DCDC_3: -		volt_reg = WM8350_DCDC3_CONTROL; -		break; -	case WM8350_DCDC_4: -		volt_reg = WM8350_DCDC4_CONTROL; -		break; -	case WM8350_DCDC_6: -		volt_reg = WM8350_DCDC6_CONTROL; -		break; -	case WM8350_DCDC_2: -	case WM8350_DCDC_5: -	default: -		return -EINVAL; -	} - -	/* all DCDCs have same mV bits */ -	return wm8350_reg_read(wm8350, volt_reg) & WM8350_DC1_VSEL_MASK; -} - -static int wm8350_dcdc_list_voltage(struct regulator_dev *rdev, -				    unsigned selector) -{ -	if (selector > WM8350_DCDC_MAX_VSEL) -		return -EINVAL; -	return wm8350_dcdc_val_to_mvolts(selector) * 1000; -} -  static int wm8350_dcdc_set_suspend_voltage(struct regulator_dev *rdev, int uV)  {  	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int volt_reg, mV = uV / 1000, dcdc = rdev_get_id(rdev); +	int sel, volt_reg, dcdc = rdev_get_id(rdev);  	u16 val; -	dev_dbg(wm8350->dev, "%s %d mV %d\n", __func__, dcdc, mV); - -	if (mV && (mV < 850 || mV > 4025)) { -		dev_err(wm8350->dev, -			"DCDC%d suspend voltage %d mV out of range\n", -			dcdc, mV); -		return -EINVAL; -	} -	if (mV == 0) -		mV = 850; +	dev_dbg(wm8350->dev, "%s %d mV %d\n", __func__, dcdc, uV / 1000);  	switch (dcdc) {  	case WM8350_DCDC_1: @@ -477,10 +359,13 @@ static int wm8350_dcdc_set_suspend_voltage(struct regulator_dev *rdev, int uV)  		return -EINVAL;  	} +	sel = regulator_map_voltage_linear(rdev, uV, uV); +	if (sel < 0) +		return -EINVAL; +  	/* all DCDCs have same mV bits */  	val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_DC1_VSEL_MASK; -	wm8350_reg_write(wm8350, volt_reg, -			 val | wm8350_dcdc_mvolts_to_val(mV)); +	wm8350_reg_write(wm8350, volt_reg, val | sel);  	return 0;  } @@ -657,19 +542,49 @@ static int wm8350_dcdc_set_suspend_mode(struct regulator_dev *rdev,  	return 0;  } +static int wm8350_ldo_list_voltage(struct regulator_dev *rdev, +				    unsigned selector) +{ +	if (selector > WM8350_LDO1_VSEL_MASK) +		return -EINVAL; + +	if (selector < 16) +		return (selector * 50000) + 900000; +	else +		return ((selector - 16) * 100000) + 1800000; +} + +static int wm8350_ldo_map_voltage(struct regulator_dev *rdev, int min_uV, +				  int max_uV) +{ +	int volt, sel; +	int min_mV = min_uV / 1000; +	int max_mV = max_uV / 1000; + +	if (min_mV < 900 || min_mV > 3300) +		return -EINVAL; +	if (max_mV < 900 || max_mV > 3300) +		return -EINVAL; + +	if (min_mV < 1800) /* step size is 50mV < 1800mV */ +		sel = DIV_ROUND_UP(min_uV - 900, 50); +	else /* step size is 100mV > 1800mV */ +		sel = DIV_ROUND_UP(min_uV - 1800, 100) + 16; + +	volt = wm8350_ldo_list_voltage(rdev, sel); +	if (volt < min_uV || volt > max_uV) +		return -EINVAL; + +	return sel; +} +  static int wm8350_ldo_set_suspend_voltage(struct regulator_dev *rdev, int uV)  {  	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int volt_reg, mV = uV / 1000, ldo = rdev_get_id(rdev); +	int sel, volt_reg, ldo = rdev_get_id(rdev);  	u16 val; -	dev_dbg(wm8350->dev, "%s %d mV %d\n", __func__, ldo, mV); - -	if (mV < 900 || mV > 3300) { -		dev_err(wm8350->dev, "LDO%d voltage %d mV out of range\n", -			ldo, mV); -		return -EINVAL; -	} +	dev_dbg(wm8350->dev, "%s %d mV %d\n", __func__, ldo, uV / 1000);  	switch (ldo) {  	case WM8350_LDO_1: @@ -688,10 +603,13 @@ static int wm8350_ldo_set_suspend_voltage(struct regulator_dev *rdev, int uV)  		return -EINVAL;  	} +	sel = wm8350_ldo_map_voltage(rdev, uV, uV); +	if (sel < 0) +		return -EINVAL; +  	/* all LDOs have same mV bits */  	val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_LDO1_VSEL_MASK; -	wm8350_reg_write(wm8350, volt_reg, -			 val | wm8350_ldo_mvolts_to_val(mV)); +	wm8350_reg_write(wm8350, volt_reg, val | sel);  	return 0;  } @@ -753,92 +671,6 @@ static int wm8350_ldo_set_suspend_disable(struct regulator_dev *rdev)  	return 0;  } -static int wm8350_ldo_set_voltage(struct regulator_dev *rdev, int min_uV, -				  int max_uV, unsigned *selector) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int volt_reg, ldo = rdev_get_id(rdev), mV, min_mV = min_uV / 1000, -		max_mV = max_uV / 1000; -	u16 val; - -	if (min_mV < 900 || min_mV > 3300) -		return -EINVAL; -	if (max_mV < 900 || max_mV > 3300) -		return -EINVAL; - -	if (min_mV < 1800) { -		/* step size is 50mV < 1800mV */ -		mV = (min_mV - 851) / 50; -		if (wm8350_ldo_val_to_mvolts(mV) > max_mV) -			return -EINVAL; -		BUG_ON(wm8350_ldo_val_to_mvolts(mV) < min_mV); -	} else { -		/* step size is 100mV > 1800mV */ -		mV = ((min_mV - 1701) / 100) + 16; -		if (wm8350_ldo_val_to_mvolts(mV) > max_mV) -			return -EINVAL; -		BUG_ON(wm8350_ldo_val_to_mvolts(mV) < min_mV); -	} - -	switch (ldo) { -	case WM8350_LDO_1: -		volt_reg = WM8350_LDO1_CONTROL; -		break; -	case WM8350_LDO_2: -		volt_reg = WM8350_LDO2_CONTROL; -		break; -	case WM8350_LDO_3: -		volt_reg = WM8350_LDO3_CONTROL; -		break; -	case WM8350_LDO_4: -		volt_reg = WM8350_LDO4_CONTROL; -		break; -	default: -		return -EINVAL; -	} - -	*selector = mV; - -	/* all LDOs have same mV bits */ -	val = wm8350_reg_read(wm8350, volt_reg) & ~WM8350_LDO1_VSEL_MASK; -	wm8350_reg_write(wm8350, volt_reg, val | mV); -	return 0; -} - -static int wm8350_ldo_get_voltage_sel(struct regulator_dev *rdev) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int volt_reg, ldo = rdev_get_id(rdev); - -	switch (ldo) { -	case WM8350_LDO_1: -		volt_reg = WM8350_LDO1_CONTROL; -		break; -	case WM8350_LDO_2: -		volt_reg = WM8350_LDO2_CONTROL; -		break; -	case WM8350_LDO_3: -		volt_reg = WM8350_LDO3_CONTROL; -		break; -	case WM8350_LDO_4: -		volt_reg = WM8350_LDO4_CONTROL; -		break; -	default: -		return -EINVAL; -	} - -	/* all LDOs have same mV bits */ -	return wm8350_reg_read(wm8350, volt_reg) & WM8350_LDO1_VSEL_MASK; -} - -static int wm8350_ldo_list_voltage(struct regulator_dev *rdev, -				    unsigned selector) -{ -	if (selector > WM8350_LDO1_VSEL_MASK) -		return -EINVAL; -	return wm8350_ldo_val_to_mvolts(selector) * 1000; -} -  int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start,  			 u16 stop, u16 fault)  { @@ -959,63 +791,6 @@ int wm8350_dcdc25_set_mode(struct wm8350 *wm8350, int dcdc, u16 mode,  }  EXPORT_SYMBOL_GPL(wm8350_dcdc25_set_mode); -static int wm8350_dcdc_enable(struct regulator_dev *rdev) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int dcdc = rdev_get_id(rdev); -	u16 shift; - -	if (dcdc < WM8350_DCDC_1 || dcdc > WM8350_DCDC_6) -		return -EINVAL; - -	shift = dcdc - WM8350_DCDC_1; -	wm8350_set_bits(wm8350, WM8350_DCDC_LDO_REQUESTED, 1 << shift); -	return 0; -} - -static int wm8350_dcdc_disable(struct regulator_dev *rdev) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int dcdc = rdev_get_id(rdev); -	u16 shift; - -	if (dcdc < WM8350_DCDC_1 || dcdc > WM8350_DCDC_6) -		return -EINVAL; - -	shift = dcdc - WM8350_DCDC_1; -	wm8350_clear_bits(wm8350, WM8350_DCDC_LDO_REQUESTED, 1 << shift); - -	return 0; -} - -static int wm8350_ldo_enable(struct regulator_dev *rdev) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int ldo = rdev_get_id(rdev); -	u16 shift; - -	if (ldo < WM8350_LDO_1 || ldo > WM8350_LDO_4) -		return -EINVAL; - -	shift = (ldo - WM8350_LDO_1) + 8; -	wm8350_set_bits(wm8350, WM8350_DCDC_LDO_REQUESTED, 1 << shift); -	return 0; -} - -static int wm8350_ldo_disable(struct regulator_dev *rdev) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int ldo = rdev_get_id(rdev); -	u16 shift; - -	if (ldo < WM8350_LDO_1 || ldo > WM8350_LDO_4) -		return -EINVAL; - -	shift = (ldo - WM8350_LDO_1) + 8; -	wm8350_clear_bits(wm8350, WM8350_DCDC_LDO_REQUESTED, 1 << shift); -	return 0; -} -  static int force_continuous_enable(struct wm8350 *wm8350, int dcdc, int enable)  {  	int reg = 0, ret; @@ -1197,42 +972,17 @@ static unsigned int wm8350_dcdc_get_optimum_mode(struct regulator_dev *rdev,  	return mode;  } -static int wm8350_dcdc_is_enabled(struct regulator_dev *rdev) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int dcdc = rdev_get_id(rdev), shift; - -	if (dcdc < WM8350_DCDC_1 || dcdc > WM8350_DCDC_6) -		return -EINVAL; - -	shift = dcdc - WM8350_DCDC_1; -	return wm8350_reg_read(wm8350, WM8350_DCDC_LDO_REQUESTED) -	    & (1 << shift); -} - -static int wm8350_ldo_is_enabled(struct regulator_dev *rdev) -{ -	struct wm8350 *wm8350 = rdev_get_drvdata(rdev); -	int ldo = rdev_get_id(rdev), shift; - -	if (ldo < WM8350_LDO_1 || ldo > WM8350_LDO_4) -		return -EINVAL; - -	shift = (ldo - WM8350_LDO_1) + 8; -	return wm8350_reg_read(wm8350, WM8350_DCDC_LDO_REQUESTED) -	    & (1 << shift); -} -  static struct regulator_ops wm8350_dcdc_ops = { -	.set_voltage = wm8350_dcdc_set_voltage, -	.get_voltage_sel = wm8350_dcdc_get_voltage_sel, -	.list_voltage = wm8350_dcdc_list_voltage, -	.enable = wm8350_dcdc_enable, -	.disable = wm8350_dcdc_disable, +	.set_voltage_sel = regulator_set_voltage_sel_regmap, +	.get_voltage_sel = regulator_get_voltage_sel_regmap, +	.list_voltage = regulator_list_voltage_linear, +	.map_voltage = regulator_map_voltage_linear, +	.enable = regulator_enable_regmap, +	.disable = regulator_disable_regmap, +	.is_enabled = regulator_is_enabled_regmap,  	.get_mode = wm8350_dcdc_get_mode,  	.set_mode = wm8350_dcdc_set_mode,  	.get_optimum_mode = wm8350_dcdc_get_optimum_mode, -	.is_enabled = wm8350_dcdc_is_enabled,  	.set_suspend_voltage = wm8350_dcdc_set_suspend_voltage,  	.set_suspend_enable = wm8350_dcdc_set_suspend_enable,  	.set_suspend_disable = wm8350_dcdc_set_suspend_disable, @@ -1240,20 +990,21 @@ static struct regulator_ops wm8350_dcdc_ops = {  };  static struct regulator_ops wm8350_dcdc2_5_ops = { -	.enable = wm8350_dcdc_enable, -	.disable = wm8350_dcdc_disable, -	.is_enabled = wm8350_dcdc_is_enabled, +	.enable = regulator_enable_regmap, +	.disable = regulator_disable_regmap, +	.is_enabled = regulator_is_enabled_regmap,  	.set_suspend_enable = wm8350_dcdc25_set_suspend_enable,  	.set_suspend_disable = wm8350_dcdc25_set_suspend_disable,  };  static struct regulator_ops wm8350_ldo_ops = { -	.set_voltage = wm8350_ldo_set_voltage, -	.get_voltage_sel = wm8350_ldo_get_voltage_sel, +	.map_voltage = wm8350_ldo_map_voltage, +	.set_voltage_sel = regulator_set_voltage_sel_regmap, +	.get_voltage_sel = regulator_get_voltage_sel_regmap,  	.list_voltage = wm8350_ldo_list_voltage, -	.enable = wm8350_ldo_enable, -	.disable = wm8350_ldo_disable, -	.is_enabled = wm8350_ldo_is_enabled, +	.enable = regulator_enable_regmap, +	.disable = regulator_disable_regmap, +	.is_enabled = regulator_is_enabled_regmap,  	.get_mode = wm8350_ldo_get_mode,  	.set_suspend_voltage = wm8350_ldo_set_suspend_voltage,  	.set_suspend_enable = wm8350_ldo_set_suspend_enable, @@ -1277,6 +1028,12 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.irq = WM8350_IRQ_UV_DC1,  		.type = REGULATOR_VOLTAGE,  		.n_voltages = WM8350_DCDC_MAX_VSEL + 1, +		.min_uV = 850000, +		.uV_step = 25000, +		.vsel_reg = WM8350_DCDC1_CONTROL, +		.vsel_mask = WM8350_DC1_VSEL_MASK, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_DC1_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1285,6 +1042,8 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.ops = &wm8350_dcdc2_5_ops,  		.irq = WM8350_IRQ_UV_DC2,  		.type = REGULATOR_VOLTAGE, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_DC2_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1294,6 +1053,12 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.irq = WM8350_IRQ_UV_DC3,  		.type = REGULATOR_VOLTAGE,  		.n_voltages = WM8350_DCDC_MAX_VSEL + 1, +		.min_uV = 850000, +		.uV_step = 25000, +		.vsel_reg = WM8350_DCDC3_CONTROL, +		.vsel_mask = WM8350_DC3_VSEL_MASK, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_DC3_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1303,6 +1068,12 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.irq = WM8350_IRQ_UV_DC4,  		.type = REGULATOR_VOLTAGE,  		.n_voltages = WM8350_DCDC_MAX_VSEL + 1, +		.min_uV = 850000, +		.uV_step = 25000, +		.vsel_reg = WM8350_DCDC4_CONTROL, +		.vsel_mask = WM8350_DC4_VSEL_MASK, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_DC4_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1311,6 +1082,8 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.ops = &wm8350_dcdc2_5_ops,  		.irq = WM8350_IRQ_UV_DC5,  		.type = REGULATOR_VOLTAGE, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_DC5_ENA,  		.owner = THIS_MODULE,  	 },  	{ @@ -1320,6 +1093,12 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.irq = WM8350_IRQ_UV_DC6,  		.type = REGULATOR_VOLTAGE,  		.n_voltages = WM8350_DCDC_MAX_VSEL + 1, +		.min_uV = 850000, +		.uV_step = 25000, +		.vsel_reg = WM8350_DCDC6_CONTROL, +		.vsel_mask = WM8350_DC6_VSEL_MASK, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_DC6_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1329,6 +1108,10 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.irq = WM8350_IRQ_UV_LDO1,  		.type = REGULATOR_VOLTAGE,  		.n_voltages = WM8350_LDO1_VSEL_MASK + 1, +		.vsel_reg = WM8350_LDO1_CONTROL, +		.vsel_mask = WM8350_LDO1_VSEL_MASK, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_LDO1_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1338,6 +1121,10 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.irq = WM8350_IRQ_UV_LDO2,  		.type = REGULATOR_VOLTAGE,  		.n_voltages = WM8350_LDO2_VSEL_MASK + 1, +		.vsel_reg = WM8350_LDO2_CONTROL, +		.vsel_mask = WM8350_LDO2_VSEL_MASK, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_LDO2_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1347,6 +1134,10 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.irq = WM8350_IRQ_UV_LDO3,  		.type = REGULATOR_VOLTAGE,  		.n_voltages = WM8350_LDO3_VSEL_MASK + 1, +		.vsel_reg = WM8350_LDO3_CONTROL, +		.vsel_mask = WM8350_LDO3_VSEL_MASK, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_LDO3_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1356,6 +1147,10 @@ static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {  		.irq = WM8350_IRQ_UV_LDO4,  		.type = REGULATOR_VOLTAGE,  		.n_voltages = WM8350_LDO4_VSEL_MASK + 1, +		.vsel_reg = WM8350_LDO4_CONTROL, +		.vsel_mask = WM8350_LDO4_VSEL_MASK, +		.enable_reg = WM8350_DCDC_LDO_REQUESTED, +		.enable_mask = WM8350_LDO4_ENA,  		.owner = THIS_MODULE,  	},  	{ @@ -1429,6 +1224,7 @@ static int wm8350_regulator_probe(struct platform_device *pdev)  	config.dev = &pdev->dev;  	config.init_data = pdev->dev.platform_data;  	config.driver_data = dev_get_drvdata(&pdev->dev); +	config.regmap = wm8350->regmap;  	/* register regulator */  	rdev = regulator_register(&wm8350_reg[pdev->id], &config);  |