2012-03-03 15:40:02 +04:00
# include <linux/slab.h>
2012-06-19 19:43:56 +04:00
# include <linux/string.h>
2012-03-03 15:40:02 +04:00
# include <linux/platform_device.h>
# include <linux/regulator/machine.h>
# include <linux/regulator/fixed.h>
struct fixed_regulator_data {
struct fixed_voltage_config cfg ;
struct regulator_init_data init_data ;
struct platform_device pdev ;
} ;
static void regulator_fixed_release ( struct device * dev )
{
struct fixed_regulator_data * data = container_of ( dev ,
struct fixed_regulator_data , pdev . dev ) ;
2012-06-19 19:43:56 +04:00
kfree ( data - > cfg . supply_name ) ;
2012-03-03 15:40:02 +04:00
kfree ( data ) ;
}
/**
2012-06-19 19:43:56 +04:00
* regulator_register_fixed_name - register a no - op fixed regulator
2012-03-03 15:40:02 +04:00
* @ id : platform device id
2012-06-19 19:43:56 +04:00
* @ name : name to be used for the regulator
2012-03-03 15:40:02 +04:00
* @ supplies : consumers for this regulator
* @ num_supplies : number of consumers
2012-06-19 19:44:39 +04:00
* @ uv : voltage in microvolts
2012-03-03 15:40:02 +04:00
*/
2012-06-19 19:43:56 +04:00
struct platform_device * regulator_register_always_on ( int id , const char * name ,
2012-06-19 19:44:39 +04:00
struct regulator_consumer_supply * supplies , int num_supplies , int uv )
2012-03-03 15:40:02 +04:00
{
struct fixed_regulator_data * data ;
data = kzalloc ( sizeof ( * data ) , GFP_KERNEL ) ;
if ( ! data )
return NULL ;
2012-06-19 19:43:56 +04:00
data - > cfg . supply_name = kstrdup ( name , GFP_KERNEL ) ;
if ( ! data - > cfg . supply_name ) {
kfree ( data ) ;
return NULL ;
}
2012-06-19 19:44:39 +04:00
data - > cfg . microvolts = uv ;
2012-03-03 15:40:02 +04:00
data - > cfg . gpio = - EINVAL ;
data - > cfg . enabled_at_boot = 1 ;
data - > cfg . init_data = & data - > init_data ;
data - > init_data . constraints . always_on = 1 ;
data - > init_data . consumer_supplies = supplies ;
data - > init_data . num_consumer_supplies = num_supplies ;
data - > pdev . name = " reg-fixed-voltage " ;
data - > pdev . id = id ;
data - > pdev . dev . platform_data = & data - > cfg ;
data - > pdev . dev . release = regulator_fixed_release ;
platform_device_register ( & data - > pdev ) ;
return & data - > pdev ;
}