diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-04 07:52:06 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-04 07:52:06 -0800 | 
| commit | c8bf9fec478bb8d3c66067be2aaa4082b83da46c (patch) | |
| tree | 0fd9761ba12f5f58a3435e9b3bc5a285d552f0c4 /drivers/regulator/virtual.c | |
| parent | a2e28fc1164e56d37a56e3c53bd3e5a64462fd02 (diff) | |
| parent | 1ad02bbce64e5226b0582af85df4e481e2f6b7b9 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6: (27 commits)
  Regulators: wm8400 - cleanup platform driver data handling
  Regulators: wm8994 - clean up driver data after removal
  Regulators: wm831x-xxx - clean up driver data after removal
  Regulators: pcap-regulator - clean up driver data after removal
  Regulators: max8660 - annotate probe and remove methods
  Regulators: max1586 - annotate probe and remove methods
  Regulators: lp3971 - fail if platform data was not supplied
  Regulators: tps6507x-regulator - mark probe method as __devinit
  Regulators: tps65023-regulator - mark probe method as __devinit
  Regulators: twl-regulator - mark probe function as __devinit
  Regulators: fixed - annotate probe and remove methods
  Regulators: ab3100 - fix probe and remove annotations
  Regulators: virtual - use sysfs attribute groups
  twl6030: regulator: Configure STATE register instead of REMAP
  regulator: Provide optional dummy regulator for consumers
  regulator: Assume regulators are enabled if they don't report anything
  regulator: Convert fixed voltage regulator to use enable_time()
  regulator: Add WM8994 regulator support
  regulator: enable max8649 regulator driver
  regulator: trivial: fix typos in user-visible Kconfig text
  ...
Diffstat (limited to 'drivers/regulator/virtual.c')
| -rw-r--r-- | drivers/regulator/virtual.c | 64 | 
1 files changed, 33 insertions, 31 deletions
| diff --git a/drivers/regulator/virtual.c b/drivers/regulator/virtual.c index addc032c84bf..d96cecaac73d 100644 --- a/drivers/regulator/virtual.c +++ b/drivers/regulator/virtual.c @@ -19,7 +19,7 @@  struct virtual_consumer_data {  	struct mutex lock;  	struct regulator *regulator; -	int enabled; +	bool enabled;  	int min_uV;  	int max_uV;  	int min_uA; @@ -49,7 +49,7 @@ static void update_voltage_constraints(struct device *dev,  		dev_dbg(dev, "Enabling regulator\n");  		ret = regulator_enable(data->regulator);  		if (ret == 0) -			data->enabled = 1; +			data->enabled = true;  		else  			dev_err(dev, "regulator_enable() failed: %d\n",  				ret); @@ -59,7 +59,7 @@ static void update_voltage_constraints(struct device *dev,  		dev_dbg(dev, "Disabling regulator\n");  		ret = regulator_disable(data->regulator);  		if (ret == 0) -			data->enabled = 0; +			data->enabled = false;  		else  			dev_err(dev, "regulator_disable() failed: %d\n",  				ret); @@ -89,7 +89,7 @@ static void update_current_limit_constraints(struct device *dev,  		dev_dbg(dev, "Enabling regulator\n");  		ret = regulator_enable(data->regulator);  		if (ret == 0) -			data->enabled = 1; +			data->enabled = true;  		else  			dev_err(dev, "regulator_enable() failed: %d\n",  				ret); @@ -99,7 +99,7 @@ static void update_current_limit_constraints(struct device *dev,  		dev_dbg(dev, "Disabling regulator\n");  		ret = regulator_disable(data->regulator);  		if (ret == 0) -			data->enabled = 0; +			data->enabled = false;  		else  			dev_err(dev, "regulator_disable() failed: %d\n",  				ret); @@ -270,24 +270,28 @@ static DEVICE_ATTR(min_microamps, 0666, show_min_uA, set_min_uA);  static DEVICE_ATTR(max_microamps, 0666, show_max_uA, set_max_uA);  static DEVICE_ATTR(mode, 0666, show_mode, set_mode); -static struct device_attribute *attributes[] = { -	&dev_attr_min_microvolts, -	&dev_attr_max_microvolts, -	&dev_attr_min_microamps, -	&dev_attr_max_microamps, -	&dev_attr_mode, +static struct attribute *regulator_virtual_attributes[] = { +	&dev_attr_min_microvolts.attr, +	&dev_attr_max_microvolts.attr, +	&dev_attr_min_microamps.attr, +	&dev_attr_max_microamps.attr, +	&dev_attr_mode.attr, +	NULL  }; -static int regulator_virtual_consumer_probe(struct platform_device *pdev) +static const struct attribute_group regulator_virtual_attr_group = { +	.attrs	= regulator_virtual_attributes, +}; + +static int __devinit regulator_virtual_probe(struct platform_device *pdev)  {  	char *reg_id = pdev->dev.platform_data;  	struct virtual_consumer_data *drvdata; -	int ret, i; +	int ret;  	drvdata = kzalloc(sizeof(struct virtual_consumer_data), GFP_KERNEL); -	if (drvdata == NULL) { +	if (drvdata == NULL)  		return -ENOMEM; -	}  	mutex_init(&drvdata->lock); @@ -299,13 +303,12 @@ static int regulator_virtual_consumer_probe(struct platform_device *pdev)  		goto err;  	} -	for (i = 0; i < ARRAY_SIZE(attributes); i++) { -		ret = device_create_file(&pdev->dev, attributes[i]); -		if (ret != 0) { -			dev_err(&pdev->dev, "Failed to create attr %d: %d\n", -				i, ret); -			goto err_regulator; -		} +	ret = sysfs_create_group(&pdev->dev.kobj, +				 ®ulator_virtual_attr_group); +	if (ret != 0) { +		dev_err(&pdev->dev, +			"Failed to create attribute group: %d\n", ret); +		goto err_regulator;  	}  	drvdata->mode = regulator_get_mode(drvdata->regulator); @@ -317,37 +320,36 @@ static int regulator_virtual_consumer_probe(struct platform_device *pdev)  err_regulator:  	regulator_put(drvdata->regulator);  err: -	for (i = 0; i < ARRAY_SIZE(attributes); i++) -		device_remove_file(&pdev->dev, attributes[i]);  	kfree(drvdata);  	return ret;  } -static int regulator_virtual_consumer_remove(struct platform_device *pdev) +static int __devexit regulator_virtual_remove(struct platform_device *pdev)  {  	struct virtual_consumer_data *drvdata = platform_get_drvdata(pdev); -	int i; -	for (i = 0; i < ARRAY_SIZE(attributes); i++) -		device_remove_file(&pdev->dev, attributes[i]); +	sysfs_remove_group(&pdev->dev.kobj, ®ulator_virtual_attr_group); +  	if (drvdata->enabled)  		regulator_disable(drvdata->regulator);  	regulator_put(drvdata->regulator);  	kfree(drvdata); +	platform_set_drvdata(pdev, NULL); +  	return 0;  }  static struct platform_driver regulator_virtual_consumer_driver = { -	.probe		= regulator_virtual_consumer_probe, -	.remove		= regulator_virtual_consumer_remove, +	.probe		= regulator_virtual_probe, +	.remove		= __devexit_p(regulator_virtual_remove),  	.driver		= {  		.name		= "reg-virt-consumer", +		.owner		= THIS_MODULE,  	},  }; -  static int __init regulator_virtual_consumer_init(void)  {  	return platform_driver_register(®ulator_virtual_consumer_driver); | 
