Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
420118d4
Commit
420118d4
authored
Oct 24, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'regulator/topic/alias' into regulator-next
parents
2a2bec65
32dadef2
Changes
55
Hide whitespace changes
Inline
Side-by-side
Showing
55 changed files
with
961 additions
and
1102 deletions
+961
-1102
Documentation/driver-model/devres.txt
Documentation/driver-model/devres.txt
+1
-0
arch/arm/mach-s3c64xx/mach-crag6410.c
arch/arm/mach-s3c64xx/mach-crag6410.c
+0
-12
drivers/mfd/arizona-core.c
drivers/mfd/arizona-core.c
+29
-3
drivers/mfd/mfd-core.c
drivers/mfd/mfd-core.c
+17
-5
drivers/regulator/88pm8607.c
drivers/regulator/88pm8607.c
+2
-10
drivers/regulator/Makefile
drivers/regulator/Makefile
+1
-1
drivers/regulator/aat2870-regulator.c
drivers/regulator/aat2870-regulator.c
+1
-10
drivers/regulator/ad5398.c
drivers/regulator/ad5398.c
+3
-16
drivers/regulator/anatop-regulator.c
drivers/regulator/anatop-regulator.c
+1
-2
drivers/regulator/arizona-ldo1.c
drivers/regulator/arizona-ldo1.c
+1
-11
drivers/regulator/arizona-micsupp.c
drivers/regulator/arizona-micsupp.c
+3
-11
drivers/regulator/as3711-regulator.c
drivers/regulator/as3711-regulator.c
+2
-20
drivers/regulator/core.c
drivers/regulator/core.c
+154
-171
drivers/regulator/da903x.c
drivers/regulator/da903x.c
+1
-10
drivers/regulator/da9052-regulator.c
drivers/regulator/da9052-regulator.c
+3
-11
drivers/regulator/da9055-regulator.c
drivers/regulator/da9055-regulator.c
+5
-19
drivers/regulator/devres.c
drivers/regulator/devres.c
+415
-0
drivers/regulator/fan53555.c
drivers/regulator/fan53555.c
+1
-11
drivers/regulator/internal.h
drivers/regulator/internal.h
+38
-0
drivers/regulator/isl6271a-regulator.c
drivers/regulator/isl6271a-regulator.c
+4
-20
drivers/regulator/max1586.c
drivers/regulator/max1586.c
+5
-21
drivers/regulator/max77686.c
drivers/regulator/max77686.c
+3
-20
drivers/regulator/max77693.c
drivers/regulator/max77693.c
+4
-25
drivers/regulator/max8649.c
drivers/regulator/max8649.c
+2
-12
drivers/regulator/max8660.c
drivers/regulator/max8660.c
+7
-23
drivers/regulator/max8907-regulator.c
drivers/regulator/max8907-regulator.c
+3
-20
drivers/regulator/max8973-regulator.c
drivers/regulator/max8973-regulator.c
+1
-10
drivers/regulator/max8997.c
drivers/regulator/max8997.c
+10
-29
drivers/regulator/max8998.c
drivers/regulator/max8998.c
+8
-27
drivers/regulator/mc13783-regulator.c
drivers/regulator/mc13783-regulator.c
+4
-21
drivers/regulator/mc13892-regulator.c
drivers/regulator/mc13892-regulator.c
+3
-19
drivers/regulator/palmas-regulator.c
drivers/regulator/palmas-regulator.c
+12
-30
drivers/regulator/rc5t583-regulator.c
drivers/regulator/rc5t583-regulator.c
+2
-20
drivers/regulator/s2mps11.c
drivers/regulator/s2mps11.c
+3
-20
drivers/regulator/s5m8767.c
drivers/regulator/s5m8767.c
+3
-21
drivers/regulator/ti-abb-regulator.c
drivers/regulator/ti-abb-regulator.c
+22
-57
drivers/regulator/tps51632-regulator.c
drivers/regulator/tps51632-regulator.c
+1
-10
drivers/regulator/tps62360-regulator.c
drivers/regulator/tps62360-regulator.c
+1
-16
drivers/regulator/tps65023-regulator.c
drivers/regulator/tps65023-regulator.c
+3
-19
drivers/regulator/tps6507x-regulator.c
drivers/regulator/tps6507x-regulator.c
+3
-20
drivers/regulator/tps65090-regulator.c
drivers/regulator/tps65090-regulator.c
+5
-30
drivers/regulator/tps65217-regulator.c
drivers/regulator/tps65217-regulator.c
+4
-22
drivers/regulator/tps6586x-regulator.c
drivers/regulator/tps6586x-regulator.c
+6
-25
drivers/regulator/tps65910-regulator.c
drivers/regulator/tps65910-regulator.c
+3
-20
drivers/regulator/tps65912-regulator.c
drivers/regulator/tps65912-regulator.c
+4
-20
drivers/regulator/tps80031-regulator.c
drivers/regulator/tps80031-regulator.c
+5
-25
drivers/regulator/wm831x-dcdc.c
drivers/regulator/wm831x-dcdc.c
+33
-85
drivers/regulator/wm831x-isink.c
drivers/regulator/wm831x-isink.c
+7
-18
drivers/regulator/wm831x-ldo.c
drivers/regulator/wm831x-ldo.c
+15
-48
drivers/regulator/wm8350-regulator.c
drivers/regulator/wm8350-regulator.c
+2
-4
drivers/regulator/wm8400-regulator.c
drivers/regulator/wm8400-regulator.c
+2
-11
drivers/regulator/wm8994-regulator.c
drivers/regulator/wm8994-regulator.c
+3
-11
include/linux/mfd/core.h
include/linux/mfd/core.h
+6
-0
include/linux/regulator/consumer.h
include/linux/regulator/consumer.h
+79
-0
include/linux/regulator/driver.h
include/linux/regulator/driver.h
+5
-0
No files found.
Documentation/driver-model/devres.txt
View file @
420118d4
...
...
@@ -283,6 +283,7 @@ REGULATOR
devm_regulator_get()
devm_regulator_put()
devm_regulator_bulk_get()
devm_regulator_register()
CLOCK
devm_clk_get()
...
...
arch/arm/mach-s3c64xx/mach-crag6410.c
View file @
420118d4
...
...
@@ -310,10 +310,6 @@ static struct regulator_consumer_supply wallvdd_consumers[] = {
REGULATOR_SUPPLY
(
"SPKVDDL"
,
"spi0.1"
),
REGULATOR_SUPPLY
(
"SPKVDDR"
,
"spi0.1"
),
REGULATOR_SUPPLY
(
"SPKVDDL"
,
"wm5102-codec"
),
REGULATOR_SUPPLY
(
"SPKVDDR"
,
"wm5102-codec"
),
REGULATOR_SUPPLY
(
"SPKVDDL"
,
"wm5110-codec"
),
REGULATOR_SUPPLY
(
"SPKVDDR"
,
"wm5110-codec"
),
REGULATOR_SUPPLY
(
"DC1VDD"
,
"0-0034"
),
REGULATOR_SUPPLY
(
"DC2VDD"
,
"0-0034"
),
...
...
@@ -653,14 +649,6 @@ static struct regulator_consumer_supply pvdd_1v8_consumers[] = {
REGULATOR_SUPPLY
(
"DBVDD3"
,
"spi0.1"
),
REGULATOR_SUPPLY
(
"LDOVDD"
,
"spi0.1"
),
REGULATOR_SUPPLY
(
"CPVDD"
,
"spi0.1"
),
REGULATOR_SUPPLY
(
"DBVDD2"
,
"wm5102-codec"
),
REGULATOR_SUPPLY
(
"DBVDD3"
,
"wm5102-codec"
),
REGULATOR_SUPPLY
(
"CPVDD"
,
"wm5102-codec"
),
REGULATOR_SUPPLY
(
"DBVDD2"
,
"wm5110-codec"
),
REGULATOR_SUPPLY
(
"DBVDD3"
,
"wm5110-codec"
),
REGULATOR_SUPPLY
(
"CPVDD"
,
"wm5110-codec"
),
};
static
struct
regulator_init_data
pvdd_1v8
=
{
...
...
drivers/mfd/arizona-core.c
View file @
420118d4
...
...
@@ -569,13 +569,25 @@ static struct mfd_cell early_devs[] = {
{
.
name
=
"arizona-ldo1"
},
};
static
const
char
*
wm5102_supplies
[]
=
{
"DBVDD2"
,
"DBVDD3"
,
"CPVDD"
,
"SPKVDDL"
,
"SPKVDDR"
,
};
static
struct
mfd_cell
wm5102_devs
[]
=
{
{
.
name
=
"arizona-micsupp"
},
{
.
name
=
"arizona-extcon"
},
{
.
name
=
"arizona-gpio"
},
{
.
name
=
"arizona-haptics"
},
{
.
name
=
"arizona-pwm"
},
{
.
name
=
"wm5102-codec"
},
{
.
name
=
"wm5102-codec"
,
.
parent_supplies
=
wm5102_supplies
,
.
num_parent_supplies
=
ARRAY_SIZE
(
wm5102_supplies
),
},
};
static
struct
mfd_cell
wm5110_devs
[]
=
{
...
...
@@ -584,7 +596,17 @@ static struct mfd_cell wm5110_devs[] = {
{
.
name
=
"arizona-gpio"
},
{
.
name
=
"arizona-haptics"
},
{
.
name
=
"arizona-pwm"
},
{
.
name
=
"wm5110-codec"
},
{
.
name
=
"wm5110-codec"
,
.
parent_supplies
=
wm5102_supplies
,
.
num_parent_supplies
=
ARRAY_SIZE
(
wm5102_supplies
),
},
};
static
const
char
*
wm8997_supplies
[]
=
{
"DBVDD2"
,
"CPVDD"
,
"SPKVDD"
,
};
static
struct
mfd_cell
wm8997_devs
[]
=
{
...
...
@@ -593,7 +615,11 @@ static struct mfd_cell wm8997_devs[] = {
{
.
name
=
"arizona-gpio"
},
{
.
name
=
"arizona-haptics"
},
{
.
name
=
"arizona-pwm"
},
{
.
name
=
"wm8997-codec"
},
{
.
name
=
"wm8997-codec"
,
.
parent_supplies
=
wm8997_supplies
,
.
num_parent_supplies
=
ARRAY_SIZE
(
wm8997_supplies
),
},
};
int
arizona_dev_init
(
struct
arizona
*
arizona
)
...
...
drivers/mfd/mfd-core.c
View file @
420118d4
...
...
@@ -20,6 +20,7 @@
#include <linux/module.h>
#include <linux/irqdomain.h>
#include <linux/of.h>
#include <linux/regulator/consumer.h>
static
struct
device_type
mfd_dev_type
=
{
.
name
=
"mfd_device"
,
...
...
@@ -99,6 +100,13 @@ static int mfd_add_device(struct device *parent, int id,
pdev
->
dev
.
dma_mask
=
parent
->
dma_mask
;
pdev
->
dev
.
dma_parms
=
parent
->
dma_parms
;
ret
=
devm_regulator_bulk_register_supply_alias
(
&
pdev
->
dev
,
cell
->
parent_supplies
,
parent
,
cell
->
parent_supplies
,
cell
->
num_parent_supplies
);
if
(
ret
<
0
)
goto
fail_res
;
if
(
parent
->
of_node
&&
cell
->
of_compatible
)
{
for_each_child_of_node
(
parent
->
of_node
,
np
)
{
if
(
of_device_is_compatible
(
np
,
cell
->
of_compatible
))
{
...
...
@@ -112,12 +120,12 @@ static int mfd_add_device(struct device *parent, int id,
ret
=
platform_device_add_data
(
pdev
,
cell
->
platform_data
,
cell
->
pdata_size
);
if
(
ret
)
goto
fail_
re
s
;
goto
fail_
alia
s
;
}
ret
=
mfd_platform_add_cell
(
pdev
,
cell
);
if
(
ret
)
goto
fail_
re
s
;
goto
fail_
alia
s
;
for
(
r
=
0
;
r
<
cell
->
num_resources
;
r
++
)
{
res
[
r
].
name
=
cell
->
resources
[
r
].
name
;
...
...
@@ -152,17 +160,17 @@ static int mfd_add_device(struct device *parent, int id,
if
(
!
cell
->
ignore_resource_conflicts
)
{
ret
=
acpi_check_resource_conflict
(
&
res
[
r
]);
if
(
ret
)
goto
fail_
re
s
;
goto
fail_
alia
s
;
}
}
ret
=
platform_device_add_resources
(
pdev
,
res
,
cell
->
num_resources
);
if
(
ret
)
goto
fail_
re
s
;
goto
fail_
alia
s
;
ret
=
platform_device_add
(
pdev
);
if
(
ret
)
goto
fail_
re
s
;
goto
fail_
alia
s
;
if
(
cell
->
pm_runtime_no_callbacks
)
pm_runtime_no_callbacks
(
&
pdev
->
dev
);
...
...
@@ -171,6 +179,10 @@ static int mfd_add_device(struct device *parent, int id,
return
0
;
fail_alias:
devm_regulator_bulk_unregister_supply_alias
(
&
pdev
->
dev
,
cell
->
parent_supplies
,
cell
->
num_parent_supplies
);
fail_res:
kfree
(
res
);
fail_device:
...
...
drivers/regulator/88pm8607.c
View file @
420118d4
...
...
@@ -391,7 +391,8 @@ static int pm8607_regulator_probe(struct platform_device *pdev)
else
config
.
regmap
=
chip
->
regmap_companion
;
info
->
regulator
=
regulator_register
(
&
info
->
desc
,
&
config
);
info
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
info
->
desc
,
&
config
);
if
(
IS_ERR
(
info
->
regulator
))
{
dev_err
(
&
pdev
->
dev
,
"failed to register regulator %s
\n
"
,
info
->
desc
.
name
);
...
...
@@ -402,14 +403,6 @@ static int pm8607_regulator_probe(struct platform_device *pdev)
return
0
;
}
static
int
pm8607_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
pm8607_regulator_info
*
info
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
info
->
regulator
);
return
0
;
}
static
struct
platform_device_id
pm8607_regulator_driver_ids
[]
=
{
{
.
name
=
"88pm860x-regulator"
,
...
...
@@ -428,7 +421,6 @@ static struct platform_driver pm8607_regulator_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
pm8607_regulator_probe
,
.
remove
=
pm8607_regulator_remove
,
.
id_table
=
pm8607_regulator_driver_ids
,
};
...
...
drivers/regulator/Makefile
View file @
420118d4
...
...
@@ -3,7 +3,7 @@
#
obj-$(CONFIG_REGULATOR)
+=
core.o dummy.o fixed-helper.o helpers.o
obj-$(CONFIG_REGULATOR)
+=
core.o dummy.o fixed-helper.o helpers.o
devres.o
obj-$(CONFIG_OF)
+=
of_regulator.o
obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE)
+=
fixed.o
obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER)
+=
virtual.o
...
...
drivers/regulator/aat2870-regulator.c
View file @
420118d4
...
...
@@ -176,7 +176,7 @@ static int aat2870_regulator_probe(struct platform_device *pdev)
config
.
driver_data
=
ri
;
config
.
init_data
=
dev_get_platdata
(
&
pdev
->
dev
);
rdev
=
regulator_register
(
&
ri
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ri
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"Failed to register regulator %s
\n
"
,
ri
->
desc
.
name
);
...
...
@@ -187,21 +187,12 @@ static int aat2870_regulator_probe(struct platform_device *pdev)
return
0
;
}
static
int
aat2870_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
regulator_dev
*
rdev
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
rdev
);
return
0
;
}
static
struct
platform_driver
aat2870_regulator_driver
=
{
.
driver
=
{
.
name
=
"aat2870-regulator"
,
.
owner
=
THIS_MODULE
,
},
.
probe
=
aat2870_regulator_probe
,
.
remove
=
aat2870_regulator_remove
,
};
static
int
__init
aat2870_regulator_init
(
void
)
...
...
drivers/regulator/ad5398.c
View file @
420118d4
...
...
@@ -219,7 +219,6 @@ static int ad5398_probe(struct i2c_client *client,
struct
ad5398_chip_info
*
chip
;
const
struct
ad5398_current_data_format
*
df
=
(
struct
ad5398_current_data_format
*
)
id
->
driver_data
;
int
ret
;
if
(
!
init_data
)
return
-
EINVAL
;
...
...
@@ -240,33 +239,21 @@ static int ad5398_probe(struct i2c_client *client,
chip
->
current_offset
=
df
->
current_offset
;
chip
->
current_mask
=
(
chip
->
current_level
-
1
)
<<
chip
->
current_offset
;
chip
->
rdev
=
regulator_register
(
&
ad5398_reg
,
&
config
);
chip
->
rdev
=
devm_regulator_register
(
&
client
->
dev
,
&
ad5398_reg
,
&
config
);
if
(
IS_ERR
(
chip
->
rdev
))
{
ret
=
PTR_ERR
(
chip
->
rdev
);
dev_err
(
&
client
->
dev
,
"failed to register %s %s
\n
"
,
id
->
name
,
ad5398_reg
.
name
);
goto
err
;
return
PTR_ERR
(
chip
->
rdev
)
;
}
i2c_set_clientdata
(
client
,
chip
);
dev_dbg
(
&
client
->
dev
,
"%s regulator driver is registered.
\n
"
,
id
->
name
);
return
0
;
err:
return
ret
;
}
static
int
ad5398_remove
(
struct
i2c_client
*
client
)
{
struct
ad5398_chip_info
*
chip
=
i2c_get_clientdata
(
client
);
regulator_unregister
(
chip
->
rdev
);
return
0
;
}
static
struct
i2c_driver
ad5398_driver
=
{
.
probe
=
ad5398_probe
,
.
remove
=
ad5398_remove
,
.
driver
=
{
.
name
=
"ad5398"
,
},
...
...
drivers/regulator/anatop-regulator.c
View file @
420118d4
...
...
@@ -200,7 +200,7 @@ static int anatop_regulator_probe(struct platform_device *pdev)
config
.
regmap
=
sreg
->
anatop
;
/* register regulator */
rdev
=
regulator_register
(
rdesc
,
&
config
);
rdev
=
devm_regulator_register
(
dev
,
rdesc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
dev
,
"failed to register %s
\n
"
,
rdesc
->
name
);
...
...
@@ -223,7 +223,6 @@ static int anatop_regulator_remove(struct platform_device *pdev)
struct
anatop_regulator
*
sreg
=
rdev_get_drvdata
(
rdev
);
const
char
*
name
=
sreg
->
name
;
regulator_unregister
(
rdev
);
kfree
(
name
);
return
0
;
...
...
drivers/regulator/arizona-ldo1.c
View file @
420118d4
...
...
@@ -226,7 +226,7 @@ static int arizona_ldo1_probe(struct platform_device *pdev)
else
config
.
init_data
=
&
ldo1
->
init_data
;
ldo1
->
regulator
=
regulator_register
(
desc
,
&
config
);
ldo1
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
desc
,
&
config
);
if
(
IS_ERR
(
ldo1
->
regulator
))
{
ret
=
PTR_ERR
(
ldo1
->
regulator
);
dev_err
(
arizona
->
dev
,
"Failed to register LDO1 supply: %d
\n
"
,
...
...
@@ -239,18 +239,8 @@ static int arizona_ldo1_probe(struct platform_device *pdev)
return
0
;
}
static
int
arizona_ldo1_remove
(
struct
platform_device
*
pdev
)
{
struct
arizona_ldo1
*
ldo1
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
ldo1
->
regulator
);
return
0
;
}
static
struct
platform_driver
arizona_ldo1_driver
=
{
.
probe
=
arizona_ldo1_probe
,
.
remove
=
arizona_ldo1_remove
,
.
driver
=
{
.
name
=
"arizona-ldo1"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/arizona-micsupp.c
View file @
420118d4
...
...
@@ -225,7 +225,9 @@ static int arizona_micsupp_probe(struct platform_device *pdev)
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_MIC_CHARGE_PUMP_1
,
ARIZONA_CPMIC_BYPASS
,
0
);
micsupp
->
regulator
=
regulator_register
(
&
arizona_micsupp
,
&
config
);
micsupp
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
arizona_micsupp
,
&
config
);
if
(
IS_ERR
(
micsupp
->
regulator
))
{
ret
=
PTR_ERR
(
micsupp
->
regulator
);
dev_err
(
arizona
->
dev
,
"Failed to register mic supply: %d
\n
"
,
...
...
@@ -238,18 +240,8 @@ static int arizona_micsupp_probe(struct platform_device *pdev)
return
0
;
}
static
int
arizona_micsupp_remove
(
struct
platform_device
*
pdev
)
{
struct
arizona_micsupp
*
micsupp
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
micsupp
->
regulator
);
return
0
;
}
static
struct
platform_driver
arizona_micsupp_driver
=
{
.
probe
=
arizona_micsupp_probe
,
.
remove
=
arizona_micsupp_remove
,
.
driver
=
{
.
name
=
"arizona-micsupp"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/as3711-regulator.c
View file @
420118d4
...
...
@@ -273,33 +273,16 @@ static int as3711_regulator_probe(struct platform_device *pdev)
config
.
regmap
=
as3711
->
regmap
;
config
.
of_node
=
of_node
[
id
];
rdev
=
regulator_register
(
&
ri
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ri
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"Failed to register regulator %s
\n
"
,
ri
->
desc
.
name
);
ret
=
PTR_ERR
(
rdev
);
goto
eregreg
;
return
PTR_ERR
(
rdev
);
}
reg
->
rdev
=
rdev
;
}
platform_set_drvdata
(
pdev
,
regs
);
return
0
;
eregreg:
while
(
--
id
>=
0
)
regulator_unregister
(
regs
[
id
].
rdev
);
return
ret
;
}
static
int
as3711_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
as3711_regulator
*
regs
=
platform_get_drvdata
(
pdev
);
int
id
;
for
(
id
=
0
;
id
<
AS3711_REGULATOR_NUM
;
++
id
)
regulator_unregister
(
regs
[
id
].
rdev
);
return
0
;
}
static
struct
platform_driver
as3711_regulator_driver
=
{
...
...
@@ -308,7 +291,6 @@ static struct platform_driver as3711_regulator_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
as3711_regulator_probe
,
.
remove
=
as3711_regulator_remove
,
};
static
int
__init
as3711_regulator_init
(
void
)
...
...
drivers/regulator/core.c
View file @
420118d4
...
...
@@ -36,6 +36,7 @@
#include <trace/events/regulator.h>
#include "dummy.h"
#include "internal.h"
#define rdev_crit(rdev, fmt, ...) \
pr_crit("%s: " fmt, rdev_get_name(rdev), ##__VA_ARGS__)
...
...
@@ -52,6 +53,7 @@ static DEFINE_MUTEX(regulator_list_mutex);
static
LIST_HEAD
(
regulator_list
);
static
LIST_HEAD
(
regulator_map_list
);
static
LIST_HEAD
(
regulator_ena_gpio_list
);
static
LIST_HEAD
(
regulator_supply_alias_list
);
static
bool
has_full_constraints
;
static
bool
board_wants_dummy_regulator
;
...
...
@@ -83,22 +85,16 @@ struct regulator_enable_gpio {
};
/*
* struct regulator
* struct regulator
_supply_alias
*
*
One for each consumer
device.
*
Used to map lookups for a supply onto an alternative
device.
*/
struct
regulator
{
struct
device
*
dev
;
struct
regulator_supply_alias
{
struct
list_head
list
;
unsigned
int
always_on
:
1
;
unsigned
int
bypass
:
1
;
int
uA_load
;
int
min_uV
;
int
max_uV
;
char
*
supply_name
;
struct
device_attribute
dev_attr
;
struct
regulator_dev
*
rdev
;
struct
dentry
*
debugfs
;
struct
device
*
src_dev
;
const
char
*
src_supply
;
struct
device
*
alias_dev
;
const
char
*
alias_supply
;
};
static
int
_regulator_is_enabled
(
struct
regulator_dev
*
rdev
);
...
...
@@ -1191,6 +1187,32 @@ static int _regulator_get_enable_time(struct regulator_dev *rdev)
return
rdev
->
desc
->
ops
->
enable_time
(
rdev
);
}
static
struct
regulator_supply_alias
*
regulator_find_supply_alias
(
struct
device
*
dev
,
const
char
*
supply
)
{
struct
regulator_supply_alias
*
map
;
list_for_each_entry
(
map
,
&
regulator_supply_alias_list
,
list
)
if
(
map
->
src_dev
==
dev
&&
strcmp
(
map
->
src_supply
,
supply
)
==
0
)
return
map
;
return
NULL
;
}
static
void
regulator_supply_alias
(
struct
device
**
dev
,
const
char
**
supply
)
{
struct
regulator_supply_alias
*
map
;
map
=
regulator_find_supply_alias
(
*
dev
,
*
supply
);
if
(
map
)
{
dev_dbg
(
*
dev
,
"Mapping supply %s to %s,%s
\n
"
,
*
supply
,
map
->
alias_supply
,
dev_name
(
map
->
alias_dev
));
*
dev
=
map
->
alias_dev
;
*
supply
=
map
->
alias_supply
;
}
}
static
struct
regulator_dev
*
regulator_dev_lookup
(
struct
device
*
dev
,
const
char
*
supply
,
int
*
ret
)
...
...
@@ -1200,6 +1222,8 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
struct
regulator_map
*
map
;
const
char
*
devname
=
NULL
;
regulator_supply_alias
(
&
dev
,
&
supply
);
/* first do a dt based lookup */
if
(
dev
&&
dev
->
of_node
)
{
node
=
of_get_regulator
(
dev
,
supply
);
...
...
@@ -1353,40 +1377,6 @@ struct regulator *regulator_get(struct device *dev, const char *id)
}
EXPORT_SYMBOL_GPL
(
regulator_get
);
static
void
devm_regulator_release
(
struct
device
*
dev
,
void
*
res
)
{
regulator_put
(
*
(
struct
regulator
**
)
res
);
}
/**
* devm_regulator_get - Resource managed regulator_get()
* @dev: device for regulator "consumer"
* @id: Supply name or regulator ID.
*
* Managed regulator_get(). Regulators returned from this function are
* automatically regulator_put() on driver detach. See regulator_get() for more
* information.
*/
struct
regulator
*
devm_regulator_get
(
struct
device
*
dev
,
const
char
*
id
)
{
struct
regulator
**
ptr
,
*
regulator
;
ptr
=
devres_alloc
(
devm_regulator_release
,
sizeof
(
*
ptr
),
GFP_KERNEL
);
if
(
!
ptr
)
return
ERR_PTR
(
-
ENOMEM
);
regulator
=
regulator_get
(
dev
,
id
);
if
(
!
IS_ERR
(
regulator
))
{
*
ptr
=
regulator
;
devres_add
(
dev
,
ptr
);
}
else
{
devres_free
(
ptr
);
}
return
regulator
;
}
EXPORT_SYMBOL_GPL
(
devm_regulator_get
);
/**
* regulator_get_exclusive - obtain exclusive access to a regulator.
* @dev: device for regulator "consumer"
...
...
@@ -1443,36 +1433,6 @@ struct regulator *regulator_get_optional(struct device *dev, const char *id)
}
EXPORT_SYMBOL_GPL
(
regulator_get_optional
);
/**
* devm_regulator_get_optional - Resource managed regulator_get_optional()
* @dev: device for regulator "consumer"
* @id: Supply name or regulator ID.
*
* Managed regulator_get_optional(). Regulators returned from this
* function are automatically regulator_put() on driver detach. See
* regulator_get_optional() for more information.
*/
struct
regulator
*
devm_regulator_get_optional
(
struct
device
*
dev
,
const
char
*
id
)
{
struct
regulator
**
ptr
,
*
regulator
;
ptr
=
devres_alloc
(
devm_regulator_release
,
sizeof
(
*
ptr
),
GFP_KERNEL
);
if
(
!
ptr
)
return
ERR_PTR
(
-
ENOMEM
);
regulator
=
regulator_get_optional
(
dev
,
id
);
if
(
!
IS_ERR
(
regulator
))
{
*
ptr
=
regulator
;
devres_add
(
dev
,
ptr
);
}
else
{
devres_free
(
ptr
);
}
return
regulator
;
}
EXPORT_SYMBOL_GPL
(
devm_regulator_get_optional
);
/* Locks held by regulator_put() */
static
void
_regulator_put
(
struct
regulator
*
regulator
)
{
...
...
@@ -1498,36 +1458,6 @@ static void _regulator_put(struct regulator *regulator)
module_put
(
rdev
->
owner
);
}
/**
* devm_regulator_get_exclusive - Resource managed regulator_get_exclusive()
* @dev: device for regulator "consumer"
* @id: Supply name or regulator ID.
*
* Managed regulator_get_exclusive(). Regulators returned from this function
* are automatically regulator_put() on driver detach. See regulator_get() for
* more information.
*/
struct
regulator
*
devm_regulator_get_exclusive
(
struct
device
*
dev
,
const
char
*
id
)
{
struct
regulator
**
ptr
,
*
regulator
;
ptr
=
devres_alloc
(
devm_regulator_release
,
sizeof
(
*
ptr
),
GFP_KERNEL
);
if
(
!
ptr
)
return
ERR_PTR
(
-
ENOMEM
);
regulator
=
_regulator_get
(
dev
,
id
,
1
);
if
(
!
IS_ERR
(
regulator
))
{
*
ptr
=
regulator
;
devres_add
(
dev
,
ptr
);
}
else
{
devres_free
(
ptr
);
}
return
regulator
;
}
EXPORT_SYMBOL_GPL
(
devm_regulator_get_exclusive
);
/**
* regulator_put - "free" the regulator source
* @regulator: regulator source
...
...
@@ -1544,34 +1474,133 @@ void regulator_put(struct regulator *regulator)
}
EXPORT_SYMBOL_GPL
(
regulator_put
);
static
int
devm_regulator_match
(
struct
device
*
dev
,
void
*
res
,
void
*
data
)
/**
* regulator_register_supply_alias - Provide device alias for supply lookup
*
* @dev: device that will be given as the regulator "consumer"
* @id: Supply name or regulator ID
* @alias_dev: device that should be used to lookup the supply
* @alias_id: Supply name or regulator ID that should be used to lookup the
* supply
*
* All lookups for id on dev will instead be conducted for alias_id on
* alias_dev.
*/
int
regulator_register_supply_alias
(
struct
device
*
dev
,
const
char
*
id
,
struct
device
*
alias_dev
,
const
char
*
alias_id
)
{
struct
regulator
**
r
=
res
;
if
(
!
r
||
!*
r
)
{
WARN_ON
(
!
r
||
!*
r
);
return
0
;
struct
regulator_supply_alias
*
map
;
map
=
regulator_find_supply_alias
(
dev
,
id
);
if
(
map
)
return
-
EEXIST
;
map
=
kzalloc
(
sizeof
(
struct
regulator_supply_alias
),
GFP_KERNEL
);
if
(
!
map
)
return
-
ENOMEM
;
map
->
src_dev
=
dev
;
map
->
src_supply
=
id
;
map
->
alias_dev
=
alias_dev
;
map
->
alias_supply
=
alias_id
;
list_add
(
&
map
->
list
,
&
regulator_supply_alias_list
);
pr_info
(
"Adding alias for supply %s,%s -> %s,%s
\n
"
,
id
,
dev_name
(
dev
),
alias_id
,
dev_name
(
alias_dev
));
return
0
;
}
EXPORT_SYMBOL_GPL
(
regulator_register_supply_alias
);
/**
* regulator_unregister_supply_alias - Remove device alias
*
* @dev: device that will be given as the regulator "consumer"
* @id: Supply name or regulator ID
*
* Remove a lookup alias if one exists for id on dev.
*/
void
regulator_unregister_supply_alias
(
struct
device
*
dev
,
const
char
*
id
)
{
struct
regulator_supply_alias
*
map
;
map
=
regulator_find_supply_alias
(
dev
,
id
);
if
(
map
)
{
list_del
(
&
map
->
list
);
kfree
(
map
);
}
}
EXPORT_SYMBOL_GPL
(
regulator_unregister_supply_alias
);
/**
* regulator_bulk_register_supply_alias - register multiple aliases
*
* @dev: device that will be given as the regulator "consumer"
* @id: List of supply names or regulator IDs
* @alias_dev: device that should be used to lookup the supply
* @alias_id: List of supply names or regulator IDs that should be used to
* lookup the supply
* @num_id: Number of aliases to register
*
* @return 0 on success, an errno on failure.
*
* This helper function allows drivers to register several supply
* aliases in one operation. If any of the aliases cannot be
* registered any aliases that were registered will be removed
* before returning to the caller.
*/
int
regulator_bulk_register_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
struct
device
*
alias_dev
,
const
char
**
alias_id
,
int
num_id
)
{
int
i
;
int
ret
;
for
(
i
=
0
;
i
<
num_id
;
++
i
)
{
ret
=
regulator_register_supply_alias
(
dev
,
id
[
i
],
alias_dev
,
alias_id
[
i
]);
if
(
ret
<
0
)
goto
err
;
}
return
*
r
==
data
;
return
0
;
err:
dev_err
(
dev
,
"Failed to create supply alias %s,%s -> %s,%s
\n
"
,
id
[
i
],
dev_name
(
dev
),
alias_id
[
i
],
dev_name
(
alias_dev
));
while
(
--
i
>=
0
)
regulator_unregister_supply_alias
(
dev
,
id
[
i
]);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
regulator_bulk_register_supply_alias
);
/**
* devm_regulator_put - Resource managed regulator_put()
* @regulator: regulator to free
* regulator_bulk_unregister_supply_alias - unregister multiple aliases
*
* @dev: device that will be given as the regulator "consumer"
* @id: List of supply names or regulator IDs
* @num_id: Number of aliases to unregister
*
* Deallocate a regulator allocated with devm_regulator_get(). Normally
* this function will not need to be called and the resource management
* code will ensure that the resource is freed.
* This helper function allows drivers to unregister several supply
* aliases in one operation.
*/
void
devm_regulator_put
(
struct
regulator
*
regulator
)
void
regulator_bulk_unregister_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
int
num_id
)
{
int
rc
;
int
i
;
rc
=
devres_release
(
regulator
->
dev
,
devm_regulator_release
,
devm_regulator_match
,
regulator
);
if
(
rc
!=
0
)
WARN_ON
(
rc
);
for
(
i
=
0
;
i
<
num_id
;
++
i
)
regulator_unregister_supply_alias
(
dev
,
id
[
i
]);
}
EXPORT_SYMBOL_GPL
(
devm_regulator_put
);
EXPORT_SYMBOL_GPL
(
regulator_bulk_unregister_supply_alias
);
/* Manage enable GPIO list. Same GPIO pin can be shared among regulators */
static
int
regulator_ena_gpio_request
(
struct
regulator_dev
*
rdev
,
...
...
@@ -2912,52 +2941,6 @@ int regulator_bulk_get(struct device *dev, int num_consumers,
}
EXPORT_SYMBOL_GPL
(
regulator_bulk_get
);
/**
* devm_regulator_bulk_get - managed get multiple regulator consumers
*
* @dev: Device to supply
* @num_consumers: Number of consumers to register
* @consumers: Configuration of consumers; clients are stored here.
*
* @return 0 on success, an errno on failure.
*
* This helper function allows drivers to get several regulator
* consumers in one operation with management, the regulators will
* automatically be freed when the device is unbound. If any of the
* regulators cannot be acquired then any regulators that were
* allocated will be freed before returning to the caller.
*/
int
devm_regulator_bulk_get
(
struct
device
*
dev
,
int
num_consumers
,
struct
regulator_bulk_data
*
consumers
)
{
int
i
;
int
ret
;
for
(
i
=
0
;
i
<
num_consumers
;
i
++
)
consumers
[
i
].
consumer
=
NULL
;
for
(
i
=
0
;
i
<
num_consumers
;
i
++
)
{
consumers
[
i
].
consumer
=
devm_regulator_get
(
dev
,
consumers
[
i
].
supply
);
if
(
IS_ERR
(
consumers
[
i
].
consumer
))
{
ret
=
PTR_ERR
(
consumers
[
i
].
consumer
);
dev_err
(
dev
,
"Failed to get supply '%s': %d
\n
"
,
consumers
[
i
].
supply
,
ret
);
consumers
[
i
].
consumer
=
NULL
;
goto
err
;
}
}
return
0
;
err:
for
(
i
=
0
;
i
<
num_consumers
&&
consumers
[
i
].
consumer
;
i
++
)
devm_regulator_put
(
consumers
[
i
].
consumer
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
devm_regulator_bulk_get
);
static
void
regulator_bulk_enable_async
(
void
*
data
,
async_cookie_t
cookie
)
{
struct
regulator_bulk_data
*
bulk
=
data
;
...
...
drivers/regulator/da903x.c
View file @
420118d4
...
...
@@ -463,7 +463,7 @@ static int da903x_regulator_probe(struct platform_device *pdev)
config
.
init_data
=
dev_get_platdata
(
&
pdev
->
dev
);
config
.
driver_data
=
ri
;
rdev
=
regulator_register
(
&
ri
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ri
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"failed to register regulator %s
\n
"
,
ri
->
desc
.
name
);
...
...
@@ -474,21 +474,12 @@ static int da903x_regulator_probe(struct platform_device *pdev)
return
0
;
}
static
int
da903x_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
regulator_dev
*
rdev
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
rdev
);
return
0
;
}
static
struct
platform_driver
da903x_regulator_driver
=
{
.
driver
=
{
.
name
=
"da903x-regulator"
,
.
owner
=
THIS_MODULE
,
},
.
probe
=
da903x_regulator_probe
,
.
remove
=
da903x_regulator_remove
,
};
static
int
__init
da903x_regulator_init
(
void
)
...
...
drivers/regulator/da9052-regulator.c
View file @
420118d4
...
...
@@ -389,8 +389,9 @@ static int da9052_regulator_probe(struct platform_device *pdev)
#endif
}
regulator
->
rdev
=
regulator_register
(
&
regulator
->
info
->
reg_desc
,
&
config
);
regulator
->
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulator
->
info
->
reg_desc
,
&
config
);
if
(
IS_ERR
(
regulator
->
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"failed to register regulator %s
\n
"
,
regulator
->
info
->
reg_desc
.
name
);
...
...
@@ -402,17 +403,8 @@ static int da9052_regulator_probe(struct platform_device *pdev)
return
0
;
}
static
int
da9052_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
da9052_regulator
*
regulator
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
regulator
->
rdev
);
return
0
;
}
static
struct
platform_driver
da9052_regulator_driver
=
{
.
probe
=
da9052_regulator_probe
,
.
remove
=
da9052_regulator_remove
,
.
driver
=
{
.
name
=
"da9052-regulator"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/da9055-regulator.c
View file @
420118d4
...
...
@@ -564,13 +564,13 @@ static int da9055_regulator_probe(struct platform_device *pdev)
if
(
ret
<
0
)
return
ret
;
regulator
->
rdev
=
regulator_register
(
&
regulator
->
info
->
reg_desc
,
&
config
);
regulator
->
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulator
->
info
->
reg_desc
,
&
config
);
if
(
IS_ERR
(
regulator
->
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"Failed to register regulator %s
\n
"
,
regulator
->
info
->
reg_desc
.
name
);
ret
=
PTR_ERR
(
regulator
->
rdev
);
return
ret
;
return
PTR_ERR
(
regulator
->
rdev
);
}
/* Only LDO 5 and 6 has got the over current interrupt */
...
...
@@ -588,32 +588,18 @@ static int da9055_regulator_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"Failed to request Regulator IRQ %d: %d
\n
"
,
irq
,
ret
);
goto
err_regulator
;
return
ret
;
}
}
}
platform_set_drvdata
(
pdev
,
regulator
);
return
0
;
err_regulator:
regulator_unregister
(
regulator
->
rdev
);
return
ret
;
}
static
int
da9055_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
da9055_regulator
*
regulator
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
regulator
->
rdev
);
return
0
;
}
static
struct
platform_driver
da9055_regulator_driver
=
{
.
probe
=
da9055_regulator_probe
,
.
remove
=
da9055_regulator_remove
,
.
driver
=
{
.
name
=
"da9055-regulator"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/devres.c
0 → 100644
View file @
420118d4
/*
* devres.c -- Voltage/Current Regulator framework devres implementation.
*
* Copyright 2013 Linaro Ltd
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
*/
#include <linux/kernel.h>
#include <linux/err.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/regulator/driver.h>
#include <linux/module.h>
#include "internal.h"
enum
{
NORMAL_GET
,
EXCLUSIVE_GET
,
OPTIONAL_GET
,
};
static
void
devm_regulator_release
(
struct
device
*
dev
,
void
*
res
)
{
regulator_put
(
*
(
struct
regulator
**
)
res
);
}
static
struct
regulator
*
_devm_regulator_get
(
struct
device
*
dev
,
const
char
*
id
,
int
get_type
)
{
struct
regulator
**
ptr
,
*
regulator
;
ptr
=
devres_alloc
(
devm_regulator_release
,
sizeof
(
*
ptr
),
GFP_KERNEL
);
if
(
!
ptr
)
return
ERR_PTR
(
-
ENOMEM
);
switch
(
get_type
)
{
case
NORMAL_GET
:
regulator
=
regulator_get
(
dev
,
id
);
break
;
case
EXCLUSIVE_GET
:
regulator
=
regulator_get_exclusive
(
dev
,
id
);
break
;
case
OPTIONAL_GET
:
regulator
=
regulator_get_optional
(
dev
,
id
);
break
;
default:
regulator
=
ERR_PTR
(
-
EINVAL
);
}
if
(
!
IS_ERR
(
regulator
))
{
*
ptr
=
regulator
;
devres_add
(
dev
,
ptr
);
}
else
{
devres_free
(
ptr
);
}
return
regulator
;
}
/**
* devm_regulator_get - Resource managed regulator_get()
* @dev: device for regulator "consumer"
* @id: Supply name or regulator ID.
*
* Managed regulator_get(). Regulators returned from this function are
* automatically regulator_put() on driver detach. See regulator_get() for more
* information.
*/
struct
regulator
*
devm_regulator_get
(
struct
device
*
dev
,
const
char
*
id
)
{
return
_devm_regulator_get
(
dev
,
id
,
NORMAL_GET
);
}
EXPORT_SYMBOL_GPL
(
devm_regulator_get
);
/**
* devm_regulator_get_exclusive - Resource managed regulator_get_exclusive()
* @dev: device for regulator "consumer"
* @id: Supply name or regulator ID.
*
* Managed regulator_get_exclusive(). Regulators returned from this function
* are automatically regulator_put() on driver detach. See regulator_get() for
* more information.
*/
struct
regulator
*
devm_regulator_get_exclusive
(
struct
device
*
dev
,
const
char
*
id
)
{
return
_devm_regulator_get
(
dev
,
id
,
EXCLUSIVE_GET
);
}
EXPORT_SYMBOL_GPL
(
devm_regulator_get_exclusive
);
/**
* devm_regulator_get_optional - Resource managed regulator_get_optional()
* @dev: device for regulator "consumer"
* @id: Supply name or regulator ID.
*
* Managed regulator_get_optional(). Regulators returned from this
* function are automatically regulator_put() on driver detach. See
* regulator_get_optional() for more information.
*/
struct
regulator
*
devm_regulator_get_optional
(
struct
device
*
dev
,
const
char
*
id
)
{
return
_devm_regulator_get
(
dev
,
id
,
OPTIONAL_GET
);
}
EXPORT_SYMBOL_GPL
(
devm_regulator_get_optional
);
static
int
devm_regulator_match
(
struct
device
*
dev
,
void
*
res
,
void
*
data
)
{
struct
regulator
**
r
=
res
;
if
(
!
r
||
!*
r
)
{
WARN_ON
(
!
r
||
!*
r
);
return
0
;
}
return
*
r
==
data
;
}
/**
* devm_regulator_put - Resource managed regulator_put()
* @regulator: regulator to free
*
* Deallocate a regulator allocated with devm_regulator_get(). Normally
* this function will not need to be called and the resource management
* code will ensure that the resource is freed.
*/
void
devm_regulator_put
(
struct
regulator
*
regulator
)
{
int
rc
;
rc
=
devres_release
(
regulator
->
dev
,
devm_regulator_release
,
devm_regulator_match
,
regulator
);
if
(
rc
!=
0
)
WARN_ON
(
rc
);
}
EXPORT_SYMBOL_GPL
(
devm_regulator_put
);
/**
* devm_regulator_bulk_get - managed get multiple regulator consumers
*
* @dev: Device to supply
* @num_consumers: Number of consumers to register
* @consumers: Configuration of consumers; clients are stored here.
*
* @return 0 on success, an errno on failure.
*
* This helper function allows drivers to get several regulator
* consumers in one operation with management, the regulators will
* automatically be freed when the device is unbound. If any of the
* regulators cannot be acquired then any regulators that were
* allocated will be freed before returning to the caller.
*/
int
devm_regulator_bulk_get
(
struct
device
*
dev
,
int
num_consumers
,
struct
regulator_bulk_data
*
consumers
)
{
int
i
;
int
ret
;
for
(
i
=
0
;
i
<
num_consumers
;
i
++
)
consumers
[
i
].
consumer
=
NULL
;
for
(
i
=
0
;
i
<
num_consumers
;
i
++
)
{
consumers
[
i
].
consumer
=
devm_regulator_get
(
dev
,
consumers
[
i
].
supply
);
if
(
IS_ERR
(
consumers
[
i
].
consumer
))
{
ret
=
PTR_ERR
(
consumers
[
i
].
consumer
);
dev_err
(
dev
,
"Failed to get supply '%s': %d
\n
"
,
consumers
[
i
].
supply
,
ret
);
consumers
[
i
].
consumer
=
NULL
;
goto
err
;
}
}
return
0
;
err:
for
(
i
=
0
;
i
<
num_consumers
&&
consumers
[
i
].
consumer
;
i
++
)
devm_regulator_put
(
consumers
[
i
].
consumer
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
devm_regulator_bulk_get
);
static
void
devm_rdev_release
(
struct
device
*
dev
,
void
*
res
)
{
regulator_unregister
(
*
(
struct
regulator_dev
**
)
res
);
}
/**
* devm_regulator_register - Resource managed regulator_register()
* @regulator_desc: regulator to register
* @config: runtime configuration for regulator
*
* Called by regulator drivers to register a regulator. Returns a
* valid pointer to struct regulator_dev on success or an ERR_PTR() on
* error. The regulator will automatically be released when the device
* is unbound.
*/
struct
regulator_dev
*
devm_regulator_register
(
struct
device
*
dev
,
const
struct
regulator_desc
*
regulator_desc
,
const
struct
regulator_config
*
config
)
{
struct
regulator_dev
**
ptr
,
*
rdev
;
ptr
=
devres_alloc
(
devm_rdev_release
,
sizeof
(
*
ptr
),
GFP_KERNEL
);
if
(
!
ptr
)
return
ERR_PTR
(
-
ENOMEM
);
rdev
=
regulator_register
(
regulator_desc
,
config
);
if
(
!
IS_ERR
(
rdev
))
{
*
ptr
=
rdev
;
devres_add
(
dev
,
ptr
);
}
else
{
devres_free
(
ptr
);
}
return
rdev
;
}
EXPORT_SYMBOL_GPL
(
devm_regulator_register
);
static
int
devm_rdev_match
(
struct
device
*
dev
,
void
*
res
,
void
*
data
)
{
struct
regulator_dev
**
r
=
res
;
if
(
!
r
||
!*
r
)
{
WARN_ON
(
!
r
||
!*
r
);
return
0
;
}
return
*
r
==
data
;
}
/**
* devm_regulator_unregister - Resource managed regulator_unregister()
* @regulator: regulator to free
*
* Unregister a regulator registered with devm_regulator_register().
* Normally this function will not need to be called and the resource
* management code will ensure that the resource is freed.
*/
void
devm_regulator_unregister
(
struct
device
*
dev
,
struct
regulator_dev
*
rdev
)
{
int
rc
;
rc
=
devres_release
(
dev
,
devm_rdev_release
,
devm_rdev_match
,
rdev
);
if
(
rc
!=
0
)
WARN_ON
(
rc
);
}
EXPORT_SYMBOL_GPL
(
devm_regulator_unregister
);
struct
regulator_supply_alias_match
{
struct
device
*
dev
;
const
char
*
id
;
};
static
int
devm_regulator_match_supply_alias
(
struct
device
*
dev
,
void
*
res
,
void
*
data
)
{
struct
regulator_supply_alias_match
*
match
=
res
;
struct
regulator_supply_alias_match
*
target
=
data
;
return
match
->
dev
==
target
->
dev
&&
strcmp
(
match
->
id
,
target
->
id
)
==
0
;
}
static
void
devm_regulator_destroy_supply_alias
(
struct
device
*
dev
,
void
*
res
)
{
struct
regulator_supply_alias_match
*
match
=
res
;
regulator_unregister_supply_alias
(
match
->
dev
,
match
->
id
);
}
/**
* devm_regulator_register_supply_alias - Resource managed
* regulator_register_supply_alias()
*
* @dev: device that will be given as the regulator "consumer"
* @id: Supply name or regulator ID
* @alias_dev: device that should be used to lookup the supply
* @alias_id: Supply name or regulator ID that should be used to lookup the
* supply
*
* The supply alias will automatically be unregistered when the source
* device is unbound.
*/
int
devm_regulator_register_supply_alias
(
struct
device
*
dev
,
const
char
*
id
,
struct
device
*
alias_dev
,
const
char
*
alias_id
)
{
struct
regulator_supply_alias_match
*
match
;
int
ret
;
match
=
devres_alloc
(
devm_regulator_destroy_supply_alias
,
sizeof
(
struct
regulator_supply_alias_match
),
GFP_KERNEL
);
if
(
!
match
)
return
-
ENOMEM
;
match
->
dev
=
dev
;
match
->
id
=
id
;
ret
=
regulator_register_supply_alias
(
dev
,
id
,
alias_dev
,
alias_id
);
if
(
ret
<
0
)
{
devres_free
(
match
);
return
ret
;
}
devres_add
(
dev
,
match
);
return
0
;
}
EXPORT_SYMBOL_GPL
(
devm_regulator_register_supply_alias
);
/**
* devm_regulator_unregister_supply_alias - Resource managed
* regulator_unregister_supply_alias()
*
* @dev: device that will be given as the regulator "consumer"
* @id: Supply name or regulator ID
*
* Unregister an alias registered with
* devm_regulator_register_supply_alias(). Normally this function
* will not need to be called and the resource management code
* will ensure that the resource is freed.
*/
void
devm_regulator_unregister_supply_alias
(
struct
device
*
dev
,
const
char
*
id
)
{
struct
regulator_supply_alias_match
match
;
int
rc
;
match
.
dev
=
dev
;
match
.
id
=
id
;
rc
=
devres_release
(
dev
,
devm_regulator_destroy_supply_alias
,
devm_regulator_match_supply_alias
,
&
match
);
if
(
rc
!=
0
)
WARN_ON
(
rc
);
}
EXPORT_SYMBOL_GPL
(
devm_regulator_unregister_supply_alias
);
/**
* devm_regulator_bulk_register_supply_alias - Managed register
* multiple aliases
*
* @dev: device that will be given as the regulator "consumer"
* @id: List of supply names or regulator IDs
* @alias_dev: device that should be used to lookup the supply
* @alias_id: List of supply names or regulator IDs that should be used to
* lookup the supply
* @num_id: Number of aliases to register
*
* @return 0 on success, an errno on failure.
*
* This helper function allows drivers to register several supply
* aliases in one operation, the aliases will be automatically
* unregisters when the source device is unbound. If any of the
* aliases cannot be registered any aliases that were registered
* will be removed before returning to the caller.
*/
int
devm_regulator_bulk_register_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
struct
device
*
alias_dev
,
const
char
**
alias_id
,
int
num_id
)
{
int
i
;
int
ret
;
for
(
i
=
0
;
i
<
num_id
;
++
i
)
{
ret
=
devm_regulator_register_supply_alias
(
dev
,
id
[
i
],
alias_dev
,
alias_id
[
i
]);
if
(
ret
<
0
)
goto
err
;
}
return
0
;
err:
dev_err
(
dev
,
"Failed to create supply alias %s,%s -> %s,%s
\n
"
,
id
[
i
],
dev_name
(
dev
),
alias_id
[
i
],
dev_name
(
alias_dev
));
while
(
--
i
>=
0
)
devm_regulator_unregister_supply_alias
(
dev
,
id
[
i
]);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
devm_regulator_bulk_register_supply_alias
);
/**
* devm_regulator_bulk_unregister_supply_alias - Managed unregister
* multiple aliases
*
* @dev: device that will be given as the regulator "consumer"
* @id: List of supply names or regulator IDs
* @num_id: Number of aliases to unregister
*
* Unregister aliases registered with
* devm_regulator_bulk_register_supply_alias(). Normally this function
* will not need to be called and the resource management code
* will ensure that the resource is freed.
*/
void
devm_regulator_bulk_unregister_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
int
num_id
)
{
int
i
;
for
(
i
=
0
;
i
<
num_id
;
++
i
)
devm_regulator_unregister_supply_alias
(
dev
,
id
[
i
]);
}
EXPORT_SYMBOL_GPL
(
devm_regulator_bulk_unregister_supply_alias
);
drivers/regulator/fan53555.c
View file @
420118d4
...
...
@@ -218,9 +218,8 @@ static int fan53555_regulator_register(struct fan53555_device_info *di,
rdesc
->
vsel_mask
=
VSEL_NSEL_MASK
;
rdesc
->
owner
=
THIS_MODULE
;
di
->
rdev
=
regulator_register
(
&
di
->
desc
,
config
);
di
->
rdev
=
devm_regulator_register
(
di
->
dev
,
&
di
->
desc
,
config
);
return
PTR_ERR_OR_ZERO
(
di
->
rdev
);
}
static
struct
regmap_config
fan53555_regmap_config
=
{
...
...
@@ -291,14 +290,6 @@ static int fan53555_regulator_probe(struct i2c_client *client,
}
static
int
fan53555_regulator_remove
(
struct
i2c_client
*
client
)
{
struct
fan53555_device_info
*
di
=
i2c_get_clientdata
(
client
);
regulator_unregister
(
di
->
rdev
);
return
0
;
}
static
const
struct
i2c_device_id
fan53555_id
[]
=
{
{
"fan53555"
,
-
1
},
{
},
...
...
@@ -309,7 +300,6 @@ static struct i2c_driver fan53555_regulator_driver = {
.
name
=
"fan53555-regulator"
,
},
.
probe
=
fan53555_regulator_probe
,
.
remove
=
fan53555_regulator_remove
,
.
id_table
=
fan53555_id
,
};
...
...
drivers/regulator/internal.h
0 → 100644
View file @
420118d4
/*
* internal.h -- Voltage/Current Regulator framework internal code
*
* Copyright 2007, 2008 Wolfson Microelectronics PLC.
* Copyright 2008 SlimLogic Ltd.
*
* Author: Liam Girdwood <lrg@slimlogic.co.uk>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
*/
#ifndef __REGULATOR_INTERNAL_H
#define __REGULATOR_INTERNAL_H
/*
* struct regulator
*
* One for each consumer device.
*/
struct
regulator
{
struct
device
*
dev
;
struct
list_head
list
;
unsigned
int
always_on
:
1
;
unsigned
int
bypass
:
1
;
int
uA_load
;
int
min_uV
;
int
max_uV
;
char
*
supply_name
;
struct
device_attribute
dev_attr
;
struct
regulator_dev
*
rdev
;
struct
dentry
*
debugfs
;
};
#endif
drivers/regulator/isl6271a-regulator.c
View file @
420118d4
...
...
@@ -112,7 +112,7 @@ static int isl6271a_probe(struct i2c_client *i2c,
struct
regulator_config
config
=
{
};
struct
regulator_init_data
*
init_data
=
dev_get_platdata
(
&
i2c
->
dev
);
struct
isl_pmic
*
pmic
;
int
err
,
i
;
int
i
;
if
(
!
i2c_check_functionality
(
i2c
->
adapter
,
I2C_FUNC_SMBUS_BYTE_DATA
))
return
-
EIO
;
...
...
@@ -133,32 +133,17 @@ static int isl6271a_probe(struct i2c_client *i2c,
config
.
init_data
=
NULL
;
config
.
driver_data
=
pmic
;
pmic
->
rdev
[
i
]
=
regulator_register
(
&
isl_rd
[
i
],
&
config
);
pmic
->
rdev
[
i
]
=
devm_regulator_register
(
&
i2c
->
dev
,
&
isl_rd
[
i
],
&
config
);
if
(
IS_ERR
(
pmic
->
rdev
[
i
]))
{
dev_err
(
&
i2c
->
dev
,
"failed to register %s
\n
"
,
id
->
name
);
err
=
PTR_ERR
(
pmic
->
rdev
[
i
]);
goto
error
;
return
PTR_ERR
(
pmic
->
rdev
[
i
]);
}
}
i2c_set_clientdata
(
i2c
,
pmic
);
return
0
;
error:
while
(
--
i
>=
0
)
regulator_unregister
(
pmic
->
rdev
[
i
]);
return
err
;
}
static
int
isl6271a_remove
(
struct
i2c_client
*
i2c
)
{
struct
isl_pmic
*
pmic
=
i2c_get_clientdata
(
i2c
);
int
i
;
for
(
i
=
0
;
i
<
3
;
i
++
)
regulator_unregister
(
pmic
->
rdev
[
i
]);
return
0
;
}
static
const
struct
i2c_device_id
isl6271a_id
[]
=
{
...
...
@@ -174,7 +159,6 @@ static struct i2c_driver isl6271a_i2c_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
isl6271a_probe
,
.
remove
=
isl6271a_remove
,
.
id_table
=
isl6271a_id
,
};
...
...
drivers/regulator/max1586.c
View file @
420118d4
...
...
@@ -166,7 +166,7 @@ static int max1586_pmic_probe(struct i2c_client *client,
struct
max1586_platform_data
*
pdata
=
dev_get_platdata
(
&
client
->
dev
);
struct
regulator_config
config
=
{
};
struct
max1586_data
*
max1586
;
int
i
,
id
,
ret
=
-
ENOMEM
;
int
i
,
id
;
max1586
=
devm_kzalloc
(
&
client
->
dev
,
sizeof
(
struct
max1586_data
)
+
sizeof
(
struct
regulator_dev
*
)
*
(
MAX1586_V6
+
1
),
...
...
@@ -193,7 +193,7 @@ static int max1586_pmic_probe(struct i2c_client *client,
continue
;
if
(
id
<
MAX1586_V3
||
id
>
MAX1586_V6
)
{
dev_err
(
&
client
->
dev
,
"invalid regulator id %d
\n
"
,
id
);
goto
err
;
return
-
EINVAL
;
}
if
(
id
==
MAX1586_V3
)
{
...
...
@@ -207,33 +207,18 @@ static int max1586_pmic_probe(struct i2c_client *client,
config
.
init_data
=
pdata
->
subdevs
[
i
].
platform_data
;
config
.
driver_data
=
max1586
;
rdev
[
i
]
=
regulator_register
(
&
max1586_reg
[
id
],
&
config
);
rdev
[
i
]
=
devm_regulator_register
(
&
client
->
dev
,
&
max1586_reg
[
id
],
&
config
);
if
(
IS_ERR
(
rdev
[
i
]))
{
ret
=
PTR_ERR
(
rdev
[
i
]);
dev_err
(
&
client
->
dev
,
"failed to register %s
\n
"
,
max1586_reg
[
id
].
name
);
goto
err
;
return
PTR_ERR
(
rdev
[
i
])
;
}
}
i2c_set_clientdata
(
client
,
max1586
);
dev_info
(
&
client
->
dev
,
"Maxim 1586 regulator driver loaded
\n
"
);
return
0
;
err:
while
(
--
i
>=
0
)
regulator_unregister
(
rdev
[
i
]);
return
ret
;
}
static
int
max1586_pmic_remove
(
struct
i2c_client
*
client
)
{
struct
max1586_data
*
max1586
=
i2c_get_clientdata
(
client
);
int
i
;
for
(
i
=
0
;
i
<=
MAX1586_V6
;
i
++
)
regulator_unregister
(
max1586
->
rdev
[
i
]);
return
0
;
}
static
const
struct
i2c_device_id
max1586_id
[]
=
{
...
...
@@ -244,7 +229,6 @@ MODULE_DEVICE_TABLE(i2c, max1586_id);
static
struct
i2c_driver
max1586_pmic_driver
=
{
.
probe
=
max1586_pmic_probe
,
.
remove
=
max1586_pmic_remove
,
.
driver
=
{
.
name
=
"max1586"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/max77686.c
View file @
420118d4
...
...
@@ -478,31 +478,15 @@ static int max77686_pmic_probe(struct platform_device *pdev)
config
.
of_node
=
pdata
->
regulators
[
i
].
of_node
;
max77686
->
opmode
[
i
]
=
regulators
[
i
].
enable_mask
;
max77686
->
rdev
[
i
]
=
regulator_register
(
&
regulators
[
i
],
&
config
);
max77686
->
rdev
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulators
[
i
],
&
config
);
if
(
IS_ERR
(
max77686
->
rdev
[
i
]))
{
ret
=
PTR_ERR
(
max77686
->
rdev
[
i
]);
dev_err
(
&
pdev
->
dev
,
"regulator init failed for %d
\n
"
,
i
);
max77686
->
rdev
[
i
]
=
NULL
;
goto
err
;
return
PTR_ERR
(
max77686
->
rdev
[
i
]);
}
}
return
0
;
err:
while
(
--
i
>=
0
)
regulator_unregister
(
max77686
->
rdev
[
i
]);
return
ret
;
}
static
int
max77686_pmic_remove
(
struct
platform_device
*
pdev
)
{
struct
max77686_data
*
max77686
=
platform_get_drvdata
(
pdev
);
int
i
;
for
(
i
=
0
;
i
<
MAX77686_REGULATORS
;
i
++
)
regulator_unregister
(
max77686
->
rdev
[
i
]);
return
0
;
}
...
...
@@ -518,7 +502,6 @@ static struct platform_driver max77686_pmic_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
max77686_pmic_probe
,
.
remove
=
max77686_pmic_remove
,
.
id_table
=
max77686_pmic_id
,
};
...
...
drivers/regulator/max77693.c
View file @
420118d4
...
...
@@ -230,7 +230,7 @@ static int max77693_pmic_probe(struct platform_device *pdev)
struct
max77693_dev
*
iodev
=
dev_get_drvdata
(
pdev
->
dev
.
parent
);
struct
max77693_pmic_dev
*
max77693_pmic
;
struct
max77693_regulator_data
*
rdata
=
NULL
;
int
num_rdata
,
i
,
ret
;
int
num_rdata
,
i
;
struct
regulator_config
config
;
num_rdata
=
max77693_pmic_init_rdata
(
&
pdev
->
dev
,
&
rdata
);
...
...
@@ -266,35 +266,15 @@ static int max77693_pmic_probe(struct platform_device *pdev)
config
.
init_data
=
rdata
[
i
].
initdata
;
config
.
of_node
=
rdata
[
i
].
of_node
;
max77693_pmic
->
rdev
[
i
]
=
regulator_register
(
&
regulators
[
id
]
,
&
config
);
max77693_pmic
->
rdev
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulators
[
id
],
&
config
);
if
(
IS_ERR
(
max77693_pmic
->
rdev
[
i
]))
{
ret
=
PTR_ERR
(
max77693_pmic
->
rdev
[
i
]);
dev_err
(
max77693_pmic
->
dev
,
"Failed to initialize regulator-%d
\n
"
,
id
);
max77693_pmic
->
rdev
[
i
]
=
NULL
;
goto
err
;
return
PTR_ERR
(
max77693_pmic
->
rdev
[
i
]);
}
}
return
0
;
err:
while
(
--
i
>=
0
)
regulator_unregister
(
max77693_pmic
->
rdev
[
i
]);
return
ret
;
}
static
int
max77693_pmic_remove
(
struct
platform_device
*
pdev
)
{
struct
max77693_pmic_dev
*
max77693_pmic
=
platform_get_drvdata
(
pdev
);
struct
regulator_dev
**
rdev
=
max77693_pmic
->
rdev
;
int
i
;
for
(
i
=
0
;
i
<
max77693_pmic
->
num_regulators
;
i
++
)
if
(
rdev
[
i
])
regulator_unregister
(
rdev
[
i
]);
return
0
;
}
...
...
@@ -311,7 +291,6 @@ static struct platform_driver max77693_pmic_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
max77693_pmic_probe
,
.
remove
=
max77693_pmic_remove
,
.
id_table
=
max77693_pmic_id
,
};
...
...
drivers/regulator/max8649.c
View file @
420118d4
...
...
@@ -234,7 +234,8 @@ static int max8649_regulator_probe(struct i2c_client *client,
config
.
driver_data
=
info
;
config
.
regmap
=
info
->
regmap
;
info
->
regulator
=
regulator_register
(
&
dcdc_desc
,
&
config
);
info
->
regulator
=
devm_regulator_register
(
&
client
->
dev
,
&
dcdc_desc
,
&
config
);
if
(
IS_ERR
(
info
->
regulator
))
{
dev_err
(
info
->
dev
,
"failed to register regulator %s
\n
"
,
dcdc_desc
.
name
);
...
...
@@ -244,16 +245,6 @@ static int max8649_regulator_probe(struct i2c_client *client,
return
0
;
}
static
int
max8649_regulator_remove
(
struct
i2c_client
*
client
)
{
struct
max8649_regulator_info
*
info
=
i2c_get_clientdata
(
client
);
if
(
info
)
regulator_unregister
(
info
->
regulator
);
return
0
;
}
static
const
struct
i2c_device_id
max8649_id
[]
=
{
{
"max8649"
,
0
},
{
}
...
...
@@ -262,7 +253,6 @@ MODULE_DEVICE_TABLE(i2c, max8649_id);
static
struct
i2c_driver
max8649_driver
=
{
.
probe
=
max8649_regulator_probe
,
.
remove
=
max8649_regulator_remove
,
.
driver
=
{
.
name
=
"max8649"
,
},
...
...
drivers/regulator/max8660.c
View file @
420118d4
...
...
@@ -439,7 +439,7 @@ static int max8660_probe(struct i2c_client *client,
for
(
i
=
0
;
i
<
pdata
->
num_subdevs
;
i
++
)
{
if
(
!
pdata
->
subdevs
[
i
].
platform_data
)
goto
err_ou
t
;
return
re
t
;
boot_on
=
pdata
->
subdevs
[
i
].
platform_data
->
constraints
.
boot_on
;
...
...
@@ -465,7 +465,7 @@ static int max8660_probe(struct i2c_client *client,
case
MAX8660_V7
:
if
(
type
==
MAX8661
)
{
dev_err
(
dev
,
"Regulator not on this chip!
\n
"
);
goto
err_out
;
return
-
EINVAL
;
}
if
(
boot_on
)
...
...
@@ -475,7 +475,7 @@ static int max8660_probe(struct i2c_client *client,
default:
dev_err
(
dev
,
"invalid regulator %s
\n
"
,
pdata
->
subdevs
[
i
].
name
);
goto
err_ou
t
;
return
re
t
;
}
}
...
...
@@ -489,33 +489,18 @@ static int max8660_probe(struct i2c_client *client,
config
.
of_node
=
of_node
[
i
];
config
.
driver_data
=
max8660
;
rdev
[
i
]
=
regulator_register
(
&
max8660_reg
[
id
],
&
config
);
rdev
[
i
]
=
devm_regulator_register
(
&
client
->
dev
,
&
max8660_reg
[
id
],
&
config
);
if
(
IS_ERR
(
rdev
[
i
]))
{
ret
=
PTR_ERR
(
rdev
[
i
]);
dev_err
(
dev
,
"failed to register %s
\n
"
,
dev_err
(
&
client
->
dev
,
"failed to register %s
\n
"
,
max8660_reg
[
id
].
name
);
goto
err_unregister
;
return
PTR_ERR
(
rdev
[
i
])
;
}
}
i2c_set_clientdata
(
client
,
max8660
);
return
0
;
err_unregister:
while
(
--
i
>=
0
)
regulator_unregister
(
rdev
[
i
]);
err_out:
return
ret
;
}
static
int
max8660_remove
(
struct
i2c_client
*
client
)
{
struct
max8660
*
max8660
=
i2c_get_clientdata
(
client
);
int
i
;
for
(
i
=
0
;
i
<
MAX8660_V_END
;
i
++
)
regulator_unregister
(
max8660
->
rdev
[
i
]);
return
0
;
}
static
const
struct
i2c_device_id
max8660_id
[]
=
{
...
...
@@ -527,7 +512,6 @@ MODULE_DEVICE_TABLE(i2c, max8660_id);
static
struct
i2c_driver
max8660_driver
=
{
.
probe
=
max8660_probe
,
.
remove
=
max8660_remove
,
.
driver
=
{
.
name
=
"max8660"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/max8907-regulator.c
View file @
420118d4
...
...
@@ -350,33 +350,17 @@ static int max8907_regulator_probe(struct platform_device *pdev)
pmic
->
desc
[
i
].
ops
=
&
max8907_out5v_hwctl_ops
;
}
pmic
->
rdev
[
i
]
=
regulator_register
(
&
pmic
->
desc
[
i
],
&
config
);
pmic
->
rdev
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
&
pmic
->
desc
[
i
],
&
config
);
if
(
IS_ERR
(
pmic
->
rdev
[
i
]))
{
dev_err
(
&
pdev
->
dev
,
"failed to register %s regulator
\n
"
,
pmic
->
desc
[
i
].
name
);
ret
=
PTR_ERR
(
pmic
->
rdev
[
i
]);
goto
err_unregister_regulator
;
return
PTR_ERR
(
pmic
->
rdev
[
i
]);
}
}
return
0
;
err_unregister_regulator:
while
(
--
i
>=
0
)
regulator_unregister
(
pmic
->
rdev
[
i
]);
return
ret
;
}
static
int
max8907_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
max8907_regulator
*
pmic
=
platform_get_drvdata
(
pdev
);
int
i
;
for
(
i
=
0
;
i
<
MAX8907_NUM_REGULATORS
;
i
++
)
regulator_unregister
(
pmic
->
rdev
[
i
]);
return
0
;
}
static
struct
platform_driver
max8907_regulator_driver
=
{
...
...
@@ -385,7 +369,6 @@ static struct platform_driver max8907_regulator_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
max8907_regulator_probe
,
.
remove
=
max8907_regulator_remove
,
};
static
int
__init
max8907_regulator_init
(
void
)
...
...
drivers/regulator/max8973-regulator.c
View file @
420118d4
...
...
@@ -467,7 +467,7 @@ static int max8973_probe(struct i2c_client *client,
config
.
regmap
=
max
->
regmap
;
/* Register the regulators */
rdev
=
regulator_register
(
&
max
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
client
->
dev
,
&
max
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
ret
=
PTR_ERR
(
rdev
);
dev_err
(
max
->
dev
,
"regulator register failed, err %d
\n
"
,
ret
);
...
...
@@ -478,14 +478,6 @@ static int max8973_probe(struct i2c_client *client,
return
0
;
}
static
int
max8973_remove
(
struct
i2c_client
*
client
)
{
struct
max8973_chip
*
max
=
i2c_get_clientdata
(
client
);
regulator_unregister
(
max
->
rdev
);
return
0
;
}
static
const
struct
i2c_device_id
max8973_id
[]
=
{
{.
name
=
"max8973"
,},
{},
...
...
@@ -499,7 +491,6 @@ static struct i2c_driver max8973_i2c_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
max8973_probe
,
.
remove
=
max8973_remove
,
.
id_table
=
max8973_id
,
};
...
...
drivers/regulator/max8997.c
View file @
420118d4
...
...
@@ -1081,7 +1081,7 @@ static int max8997_pmic_probe(struct platform_device *pdev)
pdata
->
buck1_voltage
[
i
]
+
buck1245_voltage_map_desc
.
step
);
if
(
ret
<
0
)
goto
err_ou
t
;
return
re
t
;
max8997
->
buck2_vol
[
i
]
=
ret
=
max8997_get_voltage_proper_val
(
...
...
@@ -1090,7 +1090,7 @@ static int max8997_pmic_probe(struct platform_device *pdev)
pdata
->
buck2_voltage
[
i
]
+
buck1245_voltage_map_desc
.
step
);
if
(
ret
<
0
)
goto
err_ou
t
;
return
re
t
;
max8997
->
buck5_vol
[
i
]
=
ret
=
max8997_get_voltage_proper_val
(
...
...
@@ -1099,7 +1099,7 @@ static int max8997_pmic_probe(struct platform_device *pdev)
pdata
->
buck5_voltage
[
i
]
+
buck1245_voltage_map_desc
.
step
);
if
(
ret
<
0
)
goto
err_ou
t
;
return
re
t
;
if
(
max_buck1
<
max8997
->
buck1_vol
[
i
])
max_buck1
=
max8997
->
buck1_vol
[
i
];
...
...
@@ -1143,24 +1143,23 @@ static int max8997_pmic_probe(struct platform_device *pdev)
!
gpio_is_valid
(
pdata
->
buck125_gpios
[
1
])
||
!
gpio_is_valid
(
pdata
->
buck125_gpios
[
2
]))
{
dev_err
(
&
pdev
->
dev
,
"GPIO NOT VALID
\n
"
);
ret
=
-
EINVAL
;
goto
err_out
;
return
-
EINVAL
;
}
ret
=
devm_gpio_request
(
&
pdev
->
dev
,
pdata
->
buck125_gpios
[
0
],
"MAX8997 SET1"
);
if
(
ret
)
goto
err_ou
t
;
return
re
t
;
ret
=
devm_gpio_request
(
&
pdev
->
dev
,
pdata
->
buck125_gpios
[
1
],
"MAX8997 SET2"
);
if
(
ret
)
goto
err_ou
t
;
return
re
t
;
ret
=
devm_gpio_request
(
&
pdev
->
dev
,
pdata
->
buck125_gpios
[
2
],
"MAX8997 SET3"
);
if
(
ret
)
goto
err_ou
t
;
return
re
t
;
gpio_direction_output
(
pdata
->
buck125_gpios
[
0
],
(
max8997
->
buck125_gpioindex
>>
2
)
...
...
@@ -1205,33 +1204,16 @@ static int max8997_pmic_probe(struct platform_device *pdev)
config
.
driver_data
=
max8997
;
config
.
of_node
=
pdata
->
regulators
[
i
].
reg_node
;
rdev
[
i
]
=
regulator_register
(
&
regulators
[
id
],
&
config
);
rdev
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulators
[
id
],
&
config
);
if
(
IS_ERR
(
rdev
[
i
]))
{
ret
=
PTR_ERR
(
rdev
[
i
]);
dev_err
(
max8997
->
dev
,
"regulator init failed for %d
\n
"
,
id
);
rdev
[
i
]
=
NULL
;
goto
err
;
return
PTR_ERR
(
rdev
[
i
]);
}
}
return
0
;
err:
while
(
--
i
>=
0
)
regulator_unregister
(
rdev
[
i
]);
err_out:
return
ret
;
}
static
int
max8997_pmic_remove
(
struct
platform_device
*
pdev
)
{
struct
max8997_data
*
max8997
=
platform_get_drvdata
(
pdev
);
struct
regulator_dev
**
rdev
=
max8997
->
rdev
;
int
i
;
for
(
i
=
0
;
i
<
max8997
->
num_regulators
;
i
++
)
regulator_unregister
(
rdev
[
i
]);
return
0
;
}
static
const
struct
platform_device_id
max8997_pmic_id
[]
=
{
...
...
@@ -1246,7 +1228,6 @@ static struct platform_driver max8997_pmic_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
max8997_pmic_probe
,
.
remove
=
max8997_pmic_remove
,
.
id_table
=
max8997_pmic_id
,
};
...
...
drivers/regulator/max8998.c
View file @
420118d4
...
...
@@ -790,16 +790,14 @@ static int max8998_pmic_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"MAX8998 SET1 GPIO defined as 0 !
\n
"
);
WARN_ON
(
!
pdata
->
buck1_set1
);
ret
=
-
EIO
;
goto
err_out
;
return
-
EIO
;
}
/* Check if SET2 is not equal to 0 */
if
(
!
pdata
->
buck1_set2
)
{
dev_err
(
&
pdev
->
dev
,
"MAX8998 SET2 GPIO defined as 0 !
\n
"
);
WARN_ON
(
!
pdata
->
buck1_set2
);
ret
=
-
EIO
;
goto
err_out
;
return
-
EIO
;
}
gpio_request
(
pdata
->
buck1_set1
,
"MAX8998 BUCK1_SET1"
);
...
...
@@ -823,7 +821,7 @@ static int max8998_pmic_probe(struct platform_device *pdev)
ret
=
max8998_write_reg
(
i2c
,
MAX8998_REG_BUCK1_VOLTAGE1
+
v
,
i
);
if
(
ret
)
goto
err_ou
t
;
return
re
t
;
}
}
...
...
@@ -833,8 +831,7 @@ static int max8998_pmic_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"MAX8998 SET3 GPIO defined as 0 !
\n
"
);
WARN_ON
(
!
pdata
->
buck2_set3
);
ret
=
-
EIO
;
goto
err_out
;
return
-
EIO
;
}
gpio_request
(
pdata
->
buck2_set3
,
"MAX8998 BUCK2_SET3"
);
gpio_direction_output
(
pdata
->
buck2_set3
,
...
...
@@ -852,7 +849,7 @@ static int max8998_pmic_probe(struct platform_device *pdev)
ret
=
max8998_write_reg
(
i2c
,
MAX8998_REG_BUCK2_VOLTAGE1
+
v
,
i
);
if
(
ret
)
goto
err_ou
t
;
return
re
t
;
}
}
...
...
@@ -875,33 +872,18 @@ static int max8998_pmic_probe(struct platform_device *pdev)
config
.
init_data
=
pdata
->
regulators
[
i
].
initdata
;
config
.
driver_data
=
max8998
;
rdev
[
i
]
=
regulator_register
(
&
regulators
[
index
],
&
config
);
rdev
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulators
[
index
],
&
config
);
if
(
IS_ERR
(
rdev
[
i
]))
{
ret
=
PTR_ERR
(
rdev
[
i
]);
dev_err
(
max8998
->
dev
,
"regulator %s init failed (%d)
\n
"
,
regulators
[
index
].
name
,
ret
);
rdev
[
i
]
=
NULL
;
goto
err
;
return
ret
;
}
}
return
0
;
err:
while
(
--
i
>=
0
)
regulator_unregister
(
rdev
[
i
]);
err_out:
return
ret
;
}
static
int
max8998_pmic_remove
(
struct
platform_device
*
pdev
)
{
struct
max8998_data
*
max8998
=
platform_get_drvdata
(
pdev
);
struct
regulator_dev
**
rdev
=
max8998
->
rdev
;
int
i
;
for
(
i
=
0
;
i
<
max8998
->
num_regulators
;
i
++
)
regulator_unregister
(
rdev
[
i
]);
return
0
;
}
...
...
@@ -918,7 +900,6 @@ static struct platform_driver max8998_pmic_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
max8998_pmic_probe
,
.
remove
=
max8998_pmic_remove
,
.
id_table
=
max8998_pmic_id
,
};
...
...
drivers/regulator/mc13783-regulator.c
View file @
420118d4
...
...
@@ -400,7 +400,7 @@ static int mc13783_regulator_probe(struct platform_device *pdev)
dev_get_platdata
(
&
pdev
->
dev
);
struct
mc13xxx_regulator_init_data
*
mc13xxx_data
;
struct
regulator_config
config
=
{
};
int
i
,
ret
,
num_regulators
;
int
i
,
num_regulators
;
num_regulators
=
mc13xxx_get_num_regulators_dt
(
pdev
);
...
...
@@ -444,31 +444,15 @@ static int mc13783_regulator_probe(struct platform_device *pdev)
config
.
driver_data
=
priv
;
config
.
of_node
=
node
;
priv
->
regulators
[
i
]
=
regulator_register
(
desc
,
&
config
);
priv
->
regulators
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
desc
,
&
config
);
if
(
IS_ERR
(
priv
->
regulators
[
i
]))
{
dev_err
(
&
pdev
->
dev
,
"failed to register regulator %s
\n
"
,
mc13783_regulators
[
i
].
desc
.
name
);
ret
=
PTR_ERR
(
priv
->
regulators
[
i
]);
goto
err
;
return
PTR_ERR
(
priv
->
regulators
[
i
]);
}
}
return
0
;
err:
while
(
--
i
>=
0
)
regulator_unregister
(
priv
->
regulators
[
i
]);
return
ret
;
}
static
int
mc13783_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
mc13xxx_regulator_priv
*
priv
=
platform_get_drvdata
(
pdev
);
int
i
;
for
(
i
=
0
;
i
<
priv
->
num_regulators
;
i
++
)
regulator_unregister
(
priv
->
regulators
[
i
]);
return
0
;
}
...
...
@@ -477,7 +461,6 @@ static struct platform_driver mc13783_regulator_driver = {
.
name
=
"mc13783-regulator"
,
.
owner
=
THIS_MODULE
,
},
.
remove
=
mc13783_regulator_remove
,
.
probe
=
mc13783_regulator_probe
,
};
...
...
drivers/regulator/mc13892-regulator.c
View file @
420118d4
...
...
@@ -611,43 +611,27 @@ static int mc13892_regulator_probe(struct platform_device *pdev)
config
.
driver_data
=
priv
;
config
.
of_node
=
node
;
priv
->
regulators
[
i
]
=
regulator_register
(
desc
,
&
config
);
priv
->
regulators
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
desc
,
&
config
);
if
(
IS_ERR
(
priv
->
regulators
[
i
]))
{
dev_err
(
&
pdev
->
dev
,
"failed to register regulator %s
\n
"
,
mc13892_regulators
[
i
].
desc
.
name
);
ret
=
PTR_ERR
(
priv
->
regulators
[
i
]);
goto
err
;
return
PTR_ERR
(
priv
->
regulators
[
i
]);
}
}
return
0
;
err:
while
(
--
i
>=
0
)
regulator_unregister
(
priv
->
regulators
[
i
]);
return
ret
;
err_unlock:
mc13xxx_unlock
(
mc13892
);
return
ret
;
}
static
int
mc13892_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
mc13xxx_regulator_priv
*
priv
=
platform_get_drvdata
(
pdev
);
int
i
;
for
(
i
=
0
;
i
<
priv
->
num_regulators
;
i
++
)
regulator_unregister
(
priv
->
regulators
[
i
]);
return
0
;
}
static
struct
platform_driver
mc13892_regulator_driver
=
{
.
driver
=
{
.
name
=
"mc13892-regulator"
,
.
owner
=
THIS_MODULE
,
},
.
remove
=
mc13892_regulator_remove
,
.
probe
=
mc13892_regulator_probe
,
};
...
...
drivers/regulator/palmas-regulator.c
View file @
420118d4
...
...
@@ -856,7 +856,7 @@ static int palmas_regulators_probe(struct platform_device *pdev)
if
(
ret
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"reading TSTEP reg failed: %d
\n
"
,
ret
);
goto
err_unregister_regulator
;
return
ret
;
}
pmic
->
desc
[
id
].
ramp_delay
=
palmas_smps_ramp_delay
[
reg
&
0x3
];
...
...
@@ -868,7 +868,7 @@ static int palmas_regulators_probe(struct platform_device *pdev)
reg_init
=
pdata
->
reg_init
[
id
];
ret
=
palmas_smps_init
(
palmas
,
id
,
reg_init
);
if
(
ret
)
goto
err_unregister_regulator
;
return
ret
;
}
/* Register the regulators */
...
...
@@ -909,7 +909,7 @@ static int palmas_regulators_probe(struct platform_device *pdev)
ret
=
palmas_smps_read
(
pmic
->
palmas
,
addr
,
&
reg
);
if
(
ret
)
goto
err_unregister_regulator
;
return
ret
;
if
(
reg
&
PALMAS_SMPS12_VOLTAGE_RANGE
)
pmic
->
range
[
id
]
=
1
;
...
...
@@ -925,7 +925,7 @@ static int palmas_regulators_probe(struct platform_device *pdev)
addr
=
palmas_regs_info
[
id
].
ctrl_addr
;
ret
=
palmas_smps_read
(
pmic
->
palmas
,
addr
,
&
reg
);
if
(
ret
)
goto
err_unregister_regulator
;
return
ret
;
pmic
->
current_reg_mode
[
id
]
=
reg
&
PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK
;
}
...
...
@@ -941,13 +941,13 @@ static int palmas_regulators_probe(struct platform_device *pdev)
pmic
->
desc
[
id
].
supply_name
=
palmas_regs_info
[
id
].
sname
;
config
.
of_node
=
palmas_matches
[
id
].
of_node
;
rdev
=
regulator_register
(
&
pmic
->
desc
[
id
],
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
pmic
->
desc
[
id
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"failed to register %s regulator
\n
"
,
pdev
->
name
);
ret
=
PTR_ERR
(
rdev
);
goto
err_unregister_regulator
;
return
PTR_ERR
(
rdev
);
}
/* Save regulator for cleanup */
...
...
@@ -1015,13 +1015,13 @@ static int palmas_regulators_probe(struct platform_device *pdev)
pmic
->
desc
[
id
].
supply_name
=
palmas_regs_info
[
id
].
sname
;
config
.
of_node
=
palmas_matches
[
id
].
of_node
;
rdev
=
regulator_register
(
&
pmic
->
desc
[
id
],
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
pmic
->
desc
[
id
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"failed to register %s regulator
\n
"
,
pdev
->
name
);
ret
=
PTR_ERR
(
rdev
);
goto
err_unregister_regulator
;
return
PTR_ERR
(
rdev
);
}
/* Save regulator for cleanup */
...
...
@@ -1037,31 +1037,14 @@ static int palmas_regulators_probe(struct platform_device *pdev)
else
ret
=
palmas_extreg_init
(
palmas
,
id
,
reg_init
);
if
(
ret
)
{
regulator_unregister
(
pmic
->
rdev
[
id
]);
goto
err_unregister_regulator
;
}
if
(
ret
)
return
ret
;
}
}
}
return
0
;
err_unregister_regulator:
while
(
--
id
>=
0
)
regulator_unregister
(
pmic
->
rdev
[
id
]);
return
ret
;
}
static
int
palmas_regulators_remove
(
struct
platform_device
*
pdev
)
{
struct
palmas_pmic
*
pmic
=
platform_get_drvdata
(
pdev
);
int
id
;
for
(
id
=
0
;
id
<
PALMAS_NUM_REGS
;
id
++
)
regulator_unregister
(
pmic
->
rdev
[
id
]);
return
0
;
}
static
struct
of_device_id
of_palmas_match_tbl
[]
=
{
...
...
@@ -1083,7 +1066,6 @@ static struct platform_driver palmas_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
palmas_regulators_probe
,
.
remove
=
palmas_regulators_remove
,
};
static
int
__init
palmas_init
(
void
)
...
...
drivers/regulator/rc5t583-regulator.c
View file @
420118d4
...
...
@@ -173,33 +173,16 @@ static int rc5t583_regulator_probe(struct platform_device *pdev)
config
.
driver_data
=
reg
;
config
.
regmap
=
rc5t583
->
regmap
;
rdev
=
regulator_register
(
&
ri
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ri
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"Failed to register regulator %s
\n
"
,
ri
->
desc
.
name
);
ret
=
PTR_ERR
(
rdev
);
goto
clean_exit
;
return
PTR_ERR
(
rdev
);
}
reg
->
rdev
=
rdev
;
}
platform_set_drvdata
(
pdev
,
regs
);
return
0
;
clean_exit:
while
(
--
id
>=
0
)
regulator_unregister
(
regs
[
id
].
rdev
);
return
ret
;
}
static
int
rc5t583_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
rc5t583_regulator
*
regs
=
platform_get_drvdata
(
pdev
);
int
id
;
for
(
id
=
0
;
id
<
RC5T583_REGULATOR_MAX
;
++
id
)
regulator_unregister
(
regs
[
id
].
rdev
);
return
0
;
}
static
struct
platform_driver
rc5t583_regulator_driver
=
{
...
...
@@ -208,7 +191,6 @@ static struct platform_driver rc5t583_regulator_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
rc5t583_regulator_probe
,
.
remove
=
rc5t583_regulator_remove
,
};
static
int
__init
rc5t583_regulator_init
(
void
)
...
...
drivers/regulator/s2mps11.c
View file @
420118d4
...
...
@@ -448,32 +448,16 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
config
.
of_node
=
rdata
[
i
].
of_node
;
}
s2mps11
->
rdev
[
i
]
=
regulator_register
(
&
regulators
[
i
],
&
config
);
s2mps11
->
rdev
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulators
[
i
],
&
config
);
if
(
IS_ERR
(
s2mps11
->
rdev
[
i
]))
{
ret
=
PTR_ERR
(
s2mps11
->
rdev
[
i
]);
dev_err
(
&
pdev
->
dev
,
"regulator init failed for %d
\n
"
,
i
);
s2mps11
->
rdev
[
i
]
=
NULL
;
goto
err
;
return
ret
;
}
}
return
0
;
err:
for
(
i
=
0
;
i
<
S2MPS11_REGULATOR_MAX
;
i
++
)
regulator_unregister
(
s2mps11
->
rdev
[
i
]);
return
ret
;
}
static
int
s2mps11_pmic_remove
(
struct
platform_device
*
pdev
)
{
struct
s2mps11_info
*
s2mps11
=
platform_get_drvdata
(
pdev
);
int
i
;
for
(
i
=
0
;
i
<
S2MPS11_REGULATOR_MAX
;
i
++
)
regulator_unregister
(
s2mps11
->
rdev
[
i
]);
return
0
;
}
...
...
@@ -489,7 +473,6 @@ static struct platform_driver s2mps11_pmic_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
s2mps11_pmic_probe
,
.
remove
=
s2mps11_pmic_remove
,
.
id_table
=
s2mps11_pmic_id
,
};
...
...
drivers/regulator/s5m8767.c
View file @
420118d4
...
...
@@ -910,33 +910,16 @@ static int s5m8767_pmic_probe(struct platform_device *pdev)
config
.
regmap
=
iodev
->
regmap
;
config
.
of_node
=
pdata
->
regulators
[
i
].
reg_node
;
rdev
[
i
]
=
regulator_register
(
&
regulators
[
id
],
&
config
);
rdev
[
i
]
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulators
[
id
],
&
config
);
if
(
IS_ERR
(
rdev
[
i
]))
{
ret
=
PTR_ERR
(
rdev
[
i
]);
dev_err
(
s5m8767
->
dev
,
"regulator init failed for %d
\n
"
,
id
);
rdev
[
i
]
=
NULL
;
goto
err
;
return
ret
;
}
}
return
0
;
err:
for
(
i
=
0
;
i
<
s5m8767
->
num_regulators
;
i
++
)
regulator_unregister
(
rdev
[
i
]);
return
ret
;
}
static
int
s5m8767_pmic_remove
(
struct
platform_device
*
pdev
)
{
struct
s5m8767_info
*
s5m8767
=
platform_get_drvdata
(
pdev
);
struct
regulator_dev
**
rdev
=
s5m8767
->
rdev
;
int
i
;
for
(
i
=
0
;
i
<
s5m8767
->
num_regulators
;
i
++
)
regulator_unregister
(
rdev
[
i
]);
return
0
;
}
...
...
@@ -952,7 +935,6 @@ static struct platform_driver s5m8767_pmic_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
s5m8767_pmic_probe
,
.
remove
=
s5m8767_pmic_remove
,
.
id_table
=
s5m8767_pmic_id
,
};
...
...
drivers/regulator/ti-abb-regulator.c
View file @
420118d4
...
...
@@ -708,39 +708,31 @@ static int ti_abb_probe(struct platform_device *pdev)
match
=
of_match_device
(
ti_abb_of_match
,
dev
);
if
(
!
match
)
{
/* We do not expect this to happen */
ret
=
-
ENODEV
;
dev_err
(
dev
,
"%s: Unable to match device
\n
"
,
__func__
);
goto
err
;
return
-
ENODEV
;
}
if
(
!
match
->
data
)
{
ret
=
-
EINVAL
;
dev_err
(
dev
,
"%s: Bad data in match
\n
"
,
__func__
);
goto
err
;
return
-
EINVAL
;
}
abb
=
devm_kzalloc
(
dev
,
sizeof
(
struct
ti_abb
),
GFP_KERNEL
);
if
(
!
abb
)
{
dev_err
(
dev
,
"%s: Unable to allocate ABB struct
\n
"
,
__func__
);
ret
=
-
ENOMEM
;
goto
err
;
}
if
(
!
abb
)
return
-
ENOMEM
;
abb
->
regs
=
match
->
data
;
/* Map ABB resources */
pname
=
"base-address"
;
res
=
platform_get_resource_byname
(
pdev
,
IORESOURCE_MEM
,
pname
);
abb
->
base
=
devm_ioremap_resource
(
dev
,
res
);
if
(
IS_ERR
(
abb
->
base
))
{
ret
=
PTR_ERR
(
abb
->
base
);
goto
err
;
}
if
(
IS_ERR
(
abb
->
base
))
return
PTR_ERR
(
abb
->
base
);
pname
=
"int-address"
;
res
=
platform_get_resource_byname
(
pdev
,
IORESOURCE_MEM
,
pname
);
if
(
!
res
)
{
dev_err
(
dev
,
"Missing '%s' IO resource
\n
"
,
pname
);
ret
=
-
ENODEV
;
goto
err
;
return
-
ENODEV
;
}
/*
* We may have shared interrupt register offsets which are
...
...
@@ -750,8 +742,7 @@ static int ti_abb_probe(struct platform_device *pdev)
resource_size
(
res
));
if
(
!
abb
->
int_base
)
{
dev_err
(
dev
,
"Unable to map '%s'
\n
"
,
pname
);
ret
=
-
ENOMEM
;
goto
err
;
return
-
ENOMEM
;
}
/* Map Optional resources */
...
...
@@ -771,17 +762,14 @@ static int ti_abb_probe(struct platform_device *pdev)
resource_size
(
res
));
if
(
!
abb
->
efuse_base
)
{
dev_err
(
dev
,
"Unable to map '%s'
\n
"
,
pname
);
ret
=
-
ENOMEM
;
goto
err
;
return
-
ENOMEM
;
}
pname
=
"ldo-address"
;
res
=
platform_get_resource_byname
(
pdev
,
IORESOURCE_MEM
,
pname
);
abb
->
ldo_base
=
devm_ioremap_resource
(
dev
,
res
);
if
(
IS_ERR
(
abb
->
ldo_base
))
{
ret
=
PTR_ERR
(
abb
->
ldo_base
);
goto
err
;
}
if
(
IS_ERR
(
abb
->
ldo_base
))
return
PTR_ERR
(
abb
->
ldo_base
);
/* IF ldo_base is set, the following are mandatory */
pname
=
"ti,ldovbb-override-mask"
;
...
...
@@ -790,12 +778,11 @@ static int ti_abb_probe(struct platform_device *pdev)
&
abb
->
ldovbb_override_mask
);
if
(
ret
)
{
dev_err
(
dev
,
"Missing '%s' (%d)
\n
"
,
pname
,
ret
);
goto
err
;
return
ret
;
}
if
(
!
abb
->
ldovbb_override_mask
)
{
dev_err
(
dev
,
"Invalid property:'%s' set as 0!
\n
"
,
pname
);
ret
=
-
EINVAL
;
goto
err
;
return
-
EINVAL
;
}
pname
=
"ti,ldovbb-vset-mask"
;
...
...
@@ -804,12 +791,11 @@ static int ti_abb_probe(struct platform_device *pdev)
&
abb
->
ldovbb_vset_mask
);
if
(
ret
)
{
dev_err
(
dev
,
"Missing '%s' (%d)
\n
"
,
pname
,
ret
);
goto
err
;
return
ret
;
}
if
(
!
abb
->
ldovbb_vset_mask
)
{
dev_err
(
dev
,
"Invalid property:'%s' set as 0!
\n
"
,
pname
);
ret
=
-
EINVAL
;
goto
err
;
return
-
EINVAL
;
}
skip_opt:
...
...
@@ -819,31 +805,29 @@ static int ti_abb_probe(struct platform_device *pdev)
&
abb
->
txdone_mask
);
if
(
ret
)
{
dev_err
(
dev
,
"Missing '%s' (%d)
\n
"
,
pname
,
ret
);
goto
err
;
return
ret
;
}
if
(
!
abb
->
txdone_mask
)
{
dev_err
(
dev
,
"Invalid property:'%s' set as 0!
\n
"
,
pname
);
ret
=
-
EINVAL
;
goto
err
;
return
-
EINVAL
;
}
initdata
=
of_get_regulator_init_data
(
dev
,
pdev
->
dev
.
of_node
);
if
(
!
initdata
)
{
ret
=
-
ENOMEM
;
dev_err
(
dev
,
"%s: Unable to alloc regulator init data
\n
"
,
__func__
);
goto
err
;
return
-
ENOMEM
;
}
/* init ABB opp_sel table */
ret
=
ti_abb_init_table
(
dev
,
abb
,
initdata
);
if
(
ret
)
goto
err
;
return
ret
;
/* init ABB timing */
ret
=
ti_abb_init_timings
(
dev
,
abb
);
if
(
ret
)
goto
err
;
return
ret
;
desc
=
&
abb
->
rdesc
;
desc
->
name
=
dev_name
(
dev
);
...
...
@@ -861,12 +845,12 @@ static int ti_abb_probe(struct platform_device *pdev)
config
.
driver_data
=
abb
;
config
.
of_node
=
pdev
->
dev
.
of_node
;
rdev
=
regulator_register
(
desc
,
&
config
);
rdev
=
devm_regulator_register
(
dev
,
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
ret
=
PTR_ERR
(
rdev
);
dev_err
(
dev
,
"%s: failed to register regulator(%d)
\n
"
,
__func__
,
ret
);
goto
err
;
return
ret
;
}
platform_set_drvdata
(
pdev
,
rdev
);
...
...
@@ -874,31 +858,12 @@ static int ti_abb_probe(struct platform_device *pdev)
ti_abb_rmw
(
abb
->
regs
->
sr2_en_mask
,
1
,
abb
->
regs
->
setup_reg
,
abb
->
base
);
return
0
;
err:
dev_err
(
dev
,
"%s: Failed to initialize(%d)
\n
"
,
__func__
,
ret
);
return
ret
;
}
/**
* ti_abb_remove() - cleanups
* @pdev: ABB platform device
*
* Return: 0
*/
static
int
ti_abb_remove
(
struct
platform_device
*
pdev
)
{
struct
regulator_dev
*
rdev
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
rdev
);
return
0
;
}
MODULE_ALIAS
(
"platform:ti_abb"
);
static
struct
platform_driver
ti_abb_driver
=
{
.
probe
=
ti_abb_probe
,
.
remove
=
ti_abb_remove
,
.
driver
=
{
.
name
=
"ti_abb"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/tps51632-regulator.c
View file @
420118d4
...
...
@@ -343,7 +343,7 @@ static int tps51632_probe(struct i2c_client *client,
config
.
regmap
=
tps
->
regmap
;
config
.
of_node
=
client
->
dev
.
of_node
;
rdev
=
regulator_register
(
&
tps
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
client
->
dev
,
&
tps
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
tps
->
dev
,
"regulator register failed
\n
"
);
return
PTR_ERR
(
rdev
);
...
...
@@ -353,14 +353,6 @@ static int tps51632_probe(struct i2c_client *client,
return
0
;
}
static
int
tps51632_remove
(
struct
i2c_client
*
client
)
{
struct
tps51632_chip
*
tps
=
i2c_get_clientdata
(
client
);
regulator_unregister
(
tps
->
rdev
);
return
0
;
}
static
const
struct
i2c_device_id
tps51632_id
[]
=
{
{.
name
=
"tps51632"
,},
{},
...
...
@@ -375,7 +367,6 @@ static struct i2c_driver tps51632_i2c_driver = {
.
of_match_table
=
of_match_ptr
(
tps51632_of_match
),
},
.
probe
=
tps51632_probe
,
.
remove
=
tps51632_remove
,
.
id_table
=
tps51632_id
,
};
...
...
drivers/regulator/tps62360-regulator.c
View file @
420118d4
...
...
@@ -476,7 +476,7 @@ static int tps62360_probe(struct i2c_client *client,
config
.
of_node
=
client
->
dev
.
of_node
;
/* Register the regulators */
rdev
=
regulator_register
(
&
tps
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
client
->
dev
,
&
tps
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
tps
->
dev
,
"%s(): regulator register failed with err %s
\n
"
,
...
...
@@ -488,20 +488,6 @@ static int tps62360_probe(struct i2c_client *client,
return
0
;
}
/**
* tps62360_remove - tps62360 driver i2c remove handler
* @client: i2c driver client device structure
*
* Unregister TPS driver as an i2c client device driver
*/
static
int
tps62360_remove
(
struct
i2c_client
*
client
)
{
struct
tps62360_chip
*
tps
=
i2c_get_clientdata
(
client
);
regulator_unregister
(
tps
->
rdev
);
return
0
;
}
static
void
tps62360_shutdown
(
struct
i2c_client
*
client
)
{
struct
tps62360_chip
*
tps
=
i2c_get_clientdata
(
client
);
...
...
@@ -535,7 +521,6 @@ static struct i2c_driver tps62360_i2c_driver = {
.
of_match_table
=
of_match_ptr
(
tps62360_of_match
),
},
.
probe
=
tps62360_probe
,
.
remove
=
tps62360_remove
,
.
shutdown
=
tps62360_shutdown
,
.
id_table
=
tps62360_id
,
};
...
...
drivers/regulator/tps65023-regulator.c
View file @
420118d4
...
...
@@ -277,12 +277,12 @@ static int tps_65023_probe(struct i2c_client *client,
config
.
regmap
=
tps
->
regmap
;
/* Register the regulators */
rdev
=
regulator_register
(
&
tps
->
desc
[
i
],
&
config
);
rdev
=
devm_regulator_register
(
&
client
->
dev
,
&
tps
->
desc
[
i
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
client
->
dev
,
"failed to register %s
\n
"
,
id
->
name
);
error
=
PTR_ERR
(
rdev
);
goto
fail
;
return
PTR_ERR
(
rdev
);
}
/* Save regulator for cleanup */
...
...
@@ -296,21 +296,6 @@ static int tps_65023_probe(struct i2c_client *client,
TPS65023_REG_CTRL2_CORE_ADJ
,
TPS65023_REG_CTRL2_CORE_ADJ
);
return
0
;
fail:
while
(
--
i
>=
0
)
regulator_unregister
(
tps
->
rdev
[
i
]);
return
error
;
}
static
int
tps_65023_remove
(
struct
i2c_client
*
client
)
{
struct
tps_pmic
*
tps
=
i2c_get_clientdata
(
client
);
int
i
;
for
(
i
=
0
;
i
<
TPS65023_NUM_REGULATOR
;
i
++
)
regulator_unregister
(
tps
->
rdev
[
i
]);
return
0
;
}
static
const
struct
tps_info
tps65020_regs
[]
=
{
...
...
@@ -430,7 +415,6 @@ static struct i2c_driver tps_65023_i2c_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
tps_65023_probe
,
.
remove
=
tps_65023_remove
,
.
id_table
=
tps_65023_id
,
};
...
...
drivers/regulator/tps6507x-regulator.c
View file @
420118d4
...
...
@@ -508,13 +508,13 @@ static int tps6507x_pmic_probe(struct platform_device *pdev)
config
.
of_node
=
tps6507x_reg_matches
[
i
].
of_node
;
}
rdev
=
regulator_register
(
&
tps
->
desc
[
i
],
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
tps
->
desc
[
i
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
tps6507x_dev
->
dev
,
"failed to register %s regulator
\n
"
,
pdev
->
name
);
error
=
PTR_ERR
(
rdev
);
goto
fail
;
return
PTR_ERR
(
rdev
);
}
/* Save regulator for cleanup */
...
...
@@ -525,22 +525,6 @@ static int tps6507x_pmic_probe(struct platform_device *pdev)
platform_set_drvdata
(
pdev
,
tps6507x_dev
);
return
0
;
fail:
while
(
--
i
>=
0
)
regulator_unregister
(
tps
->
rdev
[
i
]);
return
error
;
}
static
int
tps6507x_pmic_remove
(
struct
platform_device
*
pdev
)
{
struct
tps6507x_dev
*
tps6507x_dev
=
platform_get_drvdata
(
pdev
);
struct
tps6507x_pmic
*
tps
=
tps6507x_dev
->
pmic
;
int
i
;
for
(
i
=
0
;
i
<
TPS6507X_NUM_REGULATOR
;
i
++
)
regulator_unregister
(
tps
->
rdev
[
i
]);
return
0
;
}
static
struct
platform_driver
tps6507x_pmic_driver
=
{
...
...
@@ -549,7 +533,6 @@ static struct platform_driver tps6507x_pmic_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
tps6507x_pmic_probe
,
.
remove
=
tps6507x_pmic_remove
,
};
static
int
__init
tps6507x_pmic_init
(
void
)
...
...
drivers/regulator/tps65090-regulator.c
View file @
420118d4
...
...
@@ -279,7 +279,7 @@ static int tps65090_regulator_probe(struct platform_device *pdev)
if
(
ret
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"failed disable ext control
\n
"
);
goto
scrub
;
return
ret
;
}
}
}
...
...
@@ -296,12 +296,11 @@ static int tps65090_regulator_probe(struct platform_device *pdev)
else
config
.
of_node
=
NULL
;
rdev
=
regulator_register
(
ri
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
ri
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"failed to register regulator %s
\n
"
,
ri
->
desc
->
name
);
ret
=
PTR_ERR
(
rdev
);
goto
scrub
;
return
PTR_ERR
(
rdev
);
}
ri
->
rdev
=
rdev
;
...
...
@@ -309,36 +308,13 @@ static int tps65090_regulator_probe(struct platform_device *pdev)
if
(
tps_pdata
&&
is_dcdc
(
num
)
&&
tps_pdata
->
reg_init_data
&&
tps_pdata
->
enable_ext_control
)
{
ret
=
tps65090_config_ext_control
(
ri
,
true
);
if
(
ret
<
0
)
{
/* Increment num to get unregister rdev */
num
++
;
goto
scrub
;
}
if
(
ret
<
0
)
return
ret
;
}
}
platform_set_drvdata
(
pdev
,
pmic
);
return
0
;
scrub:
while
(
--
num
>=
0
)
{
ri
=
&
pmic
[
num
];
regulator_unregister
(
ri
->
rdev
);
}
return
ret
;
}
static
int
tps65090_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
tps65090_regulator
*
pmic
=
platform_get_drvdata
(
pdev
);
struct
tps65090_regulator
*
ri
;
int
num
;
for
(
num
=
0
;
num
<
TPS65090_REGULATOR_MAX
;
++
num
)
{
ri
=
&
pmic
[
num
];
regulator_unregister
(
ri
->
rdev
);
}
return
0
;
}
static
struct
platform_driver
tps65090_regulator_driver
=
{
...
...
@@ -347,7 +323,6 @@ static struct platform_driver tps65090_regulator_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
tps65090_regulator_probe
,
.
remove
=
tps65090_regulator_remove
,
};
static
int
__init
tps65090_regulator_init
(
void
)
...
...
drivers/regulator/tps65217-regulator.c
View file @
420118d4
...
...
@@ -233,7 +233,7 @@ static int tps65217_regulator_probe(struct platform_device *pdev)
struct
regulator_init_data
*
reg_data
;
struct
regulator_dev
*
rdev
;
struct
regulator_config
config
=
{
};
int
i
,
ret
;
int
i
;
if
(
tps
->
dev
->
of_node
)
pdata
=
tps65217_parse_dt
(
pdev
);
...
...
@@ -269,35 +269,18 @@ static int tps65217_regulator_probe(struct platform_device *pdev)
if
(
tps
->
dev
->
of_node
)
config
.
of_node
=
pdata
->
of_node
[
i
];
rdev
=
regulator_register
(
&
regulators
[
i
],
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulators
[
i
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
tps
->
dev
,
"failed to register %s regulator
\n
"
,
pdev
->
name
);
ret
=
PTR_ERR
(
rdev
);
goto
err_unregister_regulator
;
return
PTR_ERR
(
rdev
);
}
/* Save regulator for cleanup */
tps
->
rdev
[
i
]
=
rdev
;
}
return
0
;
err_unregister_regulator:
while
(
--
i
>=
0
)
regulator_unregister
(
tps
->
rdev
[
i
]);
return
ret
;
}
static
int
tps65217_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
tps65217
*
tps
=
platform_get_drvdata
(
pdev
);
unsigned
int
i
;
for
(
i
=
0
;
i
<
TPS65217_NUM_REGULATOR
;
i
++
)
regulator_unregister
(
tps
->
rdev
[
i
]);
return
0
;
}
static
struct
platform_driver
tps65217_regulator_driver
=
{
...
...
@@ -305,7 +288,6 @@ static struct platform_driver tps65217_regulator_driver = {
.
name
=
"tps65217-pmic"
,
},
.
probe
=
tps65217_regulator_probe
,
.
remove
=
tps65217_regulator_remove
,
};
static
int
__init
tps65217_regulator_init
(
void
)
...
...
drivers/regulator/tps6586x-regulator.c
View file @
420118d4
...
...
@@ -379,15 +379,14 @@ static int tps6586x_regulator_probe(struct platform_device *pdev)
ri
=
find_regulator_info
(
id
);
if
(
!
ri
)
{
dev_err
(
&
pdev
->
dev
,
"invalid regulator ID specified
\n
"
);
err
=
-
EINVAL
;
goto
fail
;
return
-
EINVAL
;
}
err
=
tps6586x_regulator_preinit
(
pdev
->
dev
.
parent
,
ri
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"regulator %d preinit failed, e %d
\n
"
,
id
,
err
);
goto
fail
;
return
err
;
}
config
.
dev
=
pdev
->
dev
.
parent
;
...
...
@@ -397,12 +396,12 @@ static int tps6586x_regulator_probe(struct platform_device *pdev)
if
(
tps6586x_reg_matches
)
config
.
of_node
=
tps6586x_reg_matches
[
id
].
of_node
;
rdev
[
id
]
=
regulator_register
(
&
ri
->
desc
,
&
config
);
rdev
[
id
]
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ri
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
[
id
]))
{
dev_err
(
&
pdev
->
dev
,
"failed to register regulator %s
\n
"
,
ri
->
desc
.
name
);
err
=
PTR_ERR
(
rdev
[
id
]);
goto
fail
;
return
PTR_ERR
(
rdev
[
id
]);
}
if
(
reg_data
)
{
...
...
@@ -411,30 +410,13 @@ static int tps6586x_regulator_probe(struct platform_device *pdev)
if
(
err
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"Slew rate config failed, e %d
\n
"
,
err
);
regulator_unregister
(
rdev
[
id
]);
goto
fail
;
return
err
;
}
}
}
platform_set_drvdata
(
pdev
,
rdev
);
return
0
;
fail:
while
(
--
id
>=
0
)
regulator_unregister
(
rdev
[
id
]);
return
err
;
}
static
int
tps6586x_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
regulator_dev
**
rdev
=
platform_get_drvdata
(
pdev
);
int
id
=
TPS6586X_ID_MAX_REGULATOR
;
while
(
--
id
>=
0
)
regulator_unregister
(
rdev
[
id
]);
return
0
;
}
static
struct
platform_driver
tps6586x_regulator_driver
=
{
...
...
@@ -443,7 +425,6 @@ static struct platform_driver tps6586x_regulator_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
tps6586x_regulator_probe
,
.
remove
=
tps6586x_regulator_remove
,
};
static
int
__init
tps6586x_regulator_init
(
void
)
...
...
drivers/regulator/tps65910-regulator.c
View file @
420118d4
...
...
@@ -1177,35 +1177,19 @@ static int tps65910_probe(struct platform_device *pdev)
if
(
tps65910_reg_matches
)
config
.
of_node
=
tps65910_reg_matches
[
i
].
of_node
;
rdev
=
regulator_register
(
&
pmic
->
desc
[
i
],
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
pmic
->
desc
[
i
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
tps65910
->
dev
,
"failed to register %s regulator
\n
"
,
pdev
->
name
);
err
=
PTR_ERR
(
rdev
);
goto
err_unregister_regulator
;
return
PTR_ERR
(
rdev
);
}
/* Save regulator for cleanup */
pmic
->
rdev
[
i
]
=
rdev
;
}
return
0
;
err_unregister_regulator:
while
(
--
i
>=
0
)
regulator_unregister
(
pmic
->
rdev
[
i
]);
return
err
;
}
static
int
tps65910_remove
(
struct
platform_device
*
pdev
)
{
struct
tps65910_reg
*
pmic
=
platform_get_drvdata
(
pdev
);
int
i
;
for
(
i
=
0
;
i
<
pmic
->
num_regulators
;
i
++
)
regulator_unregister
(
pmic
->
rdev
[
i
]);
return
0
;
}
static
void
tps65910_shutdown
(
struct
platform_device
*
pdev
)
...
...
@@ -1244,7 +1228,6 @@ static struct platform_driver tps65910_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
tps65910_probe
,
.
remove
=
tps65910_remove
,
.
shutdown
=
tps65910_shutdown
,
};
...
...
drivers/regulator/tps65912-regulator.c
View file @
420118d4
...
...
@@ -461,7 +461,7 @@ static int tps65912_probe(struct platform_device *pdev)
struct
regulator_dev
*
rdev
;
struct
tps65912_reg
*
pmic
;
struct
tps65912_board
*
pmic_plat_data
;
int
i
,
err
;
int
i
;
pmic_plat_data
=
dev_get_platdata
(
tps65912
->
dev
);
if
(
!
pmic_plat_data
)
...
...
@@ -504,34 +504,19 @@ static int tps65912_probe(struct platform_device *pdev)
config
.
init_data
=
reg_data
;
config
.
driver_data
=
pmic
;
rdev
=
regulator_register
(
&
pmic
->
desc
[
i
],
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
pmic
->
desc
[
i
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
tps65912
->
dev
,
"failed to register %s regulator
\n
"
,
pdev
->
name
);
err
=
PTR_ERR
(
rdev
);
goto
err
;
return
PTR_ERR
(
rdev
);
}
/* Save regulator for cleanup */
pmic
->
rdev
[
i
]
=
rdev
;
}
return
0
;
err:
while
(
--
i
>=
0
)
regulator_unregister
(
pmic
->
rdev
[
i
]);
return
err
;
}
static
int
tps65912_remove
(
struct
platform_device
*
pdev
)
{
struct
tps65912_reg
*
tps65912_reg
=
platform_get_drvdata
(
pdev
);
int
i
;
for
(
i
=
0
;
i
<
TPS65912_NUM_REGULATOR
;
i
++
)
regulator_unregister
(
tps65912_reg
->
rdev
[
i
]);
return
0
;
}
static
struct
platform_driver
tps65912_driver
=
{
...
...
@@ -540,7 +525,6 @@ static struct platform_driver tps65912_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
tps65912_probe
,
.
remove
=
tps65912_remove
,
};
static
int
__init
tps65912_init
(
void
)
...
...
drivers/regulator/tps80031-regulator.c
View file @
420118d4
...
...
@@ -719,7 +719,7 @@ static int tps80031_regulator_probe(struct platform_device *pdev)
if
(
ret
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"regulator config failed, e %d
\n
"
,
ret
);
goto
fail
;
return
ret
;
}
ret
=
tps80031_power_req_config
(
pdev
->
dev
.
parent
,
...
...
@@ -727,41 +727,22 @@ static int tps80031_regulator_probe(struct platform_device *pdev)
if
(
ret
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"pwr_req config failed, err %d
\n
"
,
ret
);
goto
fail
;
return
ret
;
}
}
rdev
=
regulator_register
(
&
ri
->
rinfo
->
desc
,
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ri
->
rinfo
->
desc
,
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"register regulator failed %s
\n
"
,
ri
->
rinfo
->
desc
.
name
);
ret
=
PTR_ERR
(
rdev
);
goto
fail
;
return
PTR_ERR
(
rdev
);
}
ri
->
rdev
=
rdev
;
}
platform_set_drvdata
(
pdev
,
pmic
);
return
0
;
fail:
while
(
--
num
>=
0
)
{
ri
=
&
pmic
[
num
];
regulator_unregister
(
ri
->
rdev
);
}
return
ret
;
}
static
int
tps80031_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
tps80031_regulator
*
pmic
=
platform_get_drvdata
(
pdev
);
struct
tps80031_regulator
*
ri
=
NULL
;
int
num
;
for
(
num
=
0
;
num
<
TPS80031_REGULATOR_MAX
;
++
num
)
{
ri
=
&
pmic
[
num
];
regulator_unregister
(
ri
->
rdev
);
}
return
0
;
}
static
struct
platform_driver
tps80031_regulator_driver
=
{
...
...
@@ -770,7 +751,6 @@ static struct platform_driver tps80031_regulator_driver = {
.
owner
=
THIS_MODULE
,
},
.
probe
=
tps80031_regulator_probe
,
.
remove
=
tps80031_regulator_remove
,
};
static
int
__init
tps80031_regulator_init
(
void
)
...
...
drivers/regulator/wm831x-dcdc.c
View file @
420118d4
...
...
@@ -387,8 +387,9 @@ static struct regulator_ops wm831x_buckv_ops = {
* Set up DVS control. We just log errors since we can still run
* (with reduced performance) if we fail.
*/
static
void
wm831x_buckv_dvs_init
(
struct
wm831x_dcdc
*
dcdc
,
struct
wm831x_buckv_pdata
*
pdata
)
static
void
wm831x_buckv_dvs_init
(
struct
platform_device
*
pdev
,
struct
wm831x_dcdc
*
dcdc
,
struct
wm831x_buckv_pdata
*
pdata
)
{
struct
wm831x
*
wm831x
=
dcdc
->
wm831x
;
int
ret
;
...
...
@@ -402,9 +403,9 @@ static void wm831x_buckv_dvs_init(struct wm831x_dcdc *dcdc,
*/
dcdc
->
dvs_gpio_state
=
pdata
->
dvs_init_state
;
ret
=
gpio_request_one
(
pdata
->
dvs_gpio
,
dcdc
->
dvs_gpio_state
?
GPIOF_INIT_HIGH
:
0
,
"DCDC DVS"
);
ret
=
devm_gpio_request_one
(
&
pdev
->
dev
,
pdata
->
dvs_gpio
,
dcdc
->
dvs_gpio_state
?
GPIOF_INIT_HIGH
:
0
,
"DCDC DVS"
);
if
(
ret
<
0
)
{
dev_err
(
wm831x
->
dev
,
"Failed to get %s DVS GPIO: %d
\n
"
,
dcdc
->
name
,
ret
);
...
...
@@ -513,7 +514,8 @@ static int wm831x_buckv_probe(struct platform_device *pdev)
dcdc
->
dvs_vsel
=
ret
&
WM831X_DC1_DVS_VSEL_MASK
;
if
(
pdata
&&
pdata
->
dcdc
[
id
])
wm831x_buckv_dvs_init
(
dcdc
,
pdata
->
dcdc
[
id
]
->
driver_data
);
wm831x_buckv_dvs_init
(
pdev
,
dcdc
,
pdata
->
dcdc
[
id
]
->
driver_data
);
config
.
dev
=
pdev
->
dev
.
parent
;
if
(
pdata
)
...
...
@@ -521,7 +523,8 @@ static int wm831x_buckv_probe(struct platform_device *pdev)
config
.
driver_data
=
dcdc
;
config
.
regmap
=
wm831x
->
regmap
;
dcdc
->
regulator
=
regulator_register
(
&
dcdc
->
desc
,
&
config
);
dcdc
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
dcdc
->
desc
,
&
config
);
if
(
IS_ERR
(
dcdc
->
regulator
))
{
ret
=
PTR_ERR
(
dcdc
->
regulator
);
dev_err
(
wm831x
->
dev
,
"Failed to register DCDC%d: %d
\n
"
,
...
...
@@ -530,57 +533,35 @@ static int wm831x_buckv_probe(struct platform_device *pdev)
}
irq
=
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
));
ret
=
request_threaded_irq
(
irq
,
NULL
,
wm831x_dcdc_uv_irq
,
IRQF_TRIGGER_RISING
,
dcdc
->
name
,
dcdc
);
ret
=
devm_request_threaded_irq
(
&
pdev
->
dev
,
irq
,
NULL
,
wm831x_dcdc_uv_irq
,
IRQF_TRIGGER_RISING
,
dcdc
->
name
,
dcdc
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"Failed to request UV IRQ %d: %d
\n
"
,
irq
,
ret
);
goto
err
_regulator
;
goto
err
;
}
irq
=
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"HC"
));
ret
=
request_threaded_irq
(
irq
,
NULL
,
wm831x_dcdc_oc_irq
,
IRQF_TRIGGER_RISING
,
dcdc
->
name
,
dcdc
);
ret
=
devm_request_threaded_irq
(
&
pdev
->
dev
,
irq
,
NULL
,
wm831x_dcdc_oc_irq
,
IRQF_TRIGGER_RISING
,
dcdc
->
name
,
dcdc
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"Failed to request HC IRQ %d: %d
\n
"
,
irq
,
ret
);
goto
err
_uv
;
goto
err
;
}
platform_set_drvdata
(
pdev
,
dcdc
);
return
0
;
err_uv:
free_irq
(
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
)),
dcdc
);
err_regulator:
regulator_unregister
(
dcdc
->
regulator
);
err:
if
(
dcdc
->
dvs_gpio
)
gpio_free
(
dcdc
->
dvs_gpio
);
return
ret
;
}
static
int
wm831x_buckv_remove
(
struct
platform_device
*
pdev
)
{
struct
wm831x_dcdc
*
dcdc
=
platform_get_drvdata
(
pdev
);
struct
wm831x
*
wm831x
=
dcdc
->
wm831x
;
free_irq
(
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"HC"
)),
dcdc
);
free_irq
(
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
)),
dcdc
);
regulator_unregister
(
dcdc
->
regulator
);
if
(
dcdc
->
dvs_gpio
)
gpio_free
(
dcdc
->
dvs_gpio
);
return
0
;
}
static
struct
platform_driver
wm831x_buckv_driver
=
{
.
probe
=
wm831x_buckv_probe
,
.
remove
=
wm831x_buckv_remove
,
.
driver
=
{
.
name
=
"wm831x-buckv"
,
.
owner
=
THIS_MODULE
,
...
...
@@ -681,7 +662,8 @@ static int wm831x_buckp_probe(struct platform_device *pdev)
config
.
driver_data
=
dcdc
;
config
.
regmap
=
wm831x
->
regmap
;
dcdc
->
regulator
=
regulator_register
(
&
dcdc
->
desc
,
&
config
);
dcdc
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
dcdc
->
desc
,
&
config
);
if
(
IS_ERR
(
dcdc
->
regulator
))
{
ret
=
PTR_ERR
(
dcdc
->
regulator
);
dev_err
(
wm831x
->
dev
,
"Failed to register DCDC%d: %d
\n
"
,
...
...
@@ -690,38 +672,25 @@ static int wm831x_buckp_probe(struct platform_device *pdev)
}
irq
=
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
));
ret
=
request_threaded_irq
(
irq
,
NULL
,
wm831x_dcdc_uv_irq
,
IRQF_TRIGGER_RISING
,
dcdc
->
name
,
dcdc
);
ret
=
devm_request_threaded_irq
(
&
pdev
->
dev
,
irq
,
NULL
,
wm831x_dcdc_uv_irq
,
IRQF_TRIGGER_RISING
,
dcdc
->
name
,
dcdc
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"Failed to request UV IRQ %d: %d
\n
"
,
irq
,
ret
);
goto
err
_regulator
;
goto
err
;
}
platform_set_drvdata
(
pdev
,
dcdc
);
return
0
;
err_regulator:
regulator_unregister
(
dcdc
->
regulator
);
err:
return
ret
;
}
static
int
wm831x_buckp_remove
(
struct
platform_device
*
pdev
)
{
struct
wm831x_dcdc
*
dcdc
=
platform_get_drvdata
(
pdev
);
free_irq
(
wm831x_irq
(
dcdc
->
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
)),
dcdc
);
regulator_unregister
(
dcdc
->
regulator
);
return
0
;
}
static
struct
platform_driver
wm831x_buckp_driver
=
{
.
probe
=
wm831x_buckp_probe
,
.
remove
=
wm831x_buckp_remove
,
.
driver
=
{
.
name
=
"wm831x-buckp"
,
.
owner
=
THIS_MODULE
,
...
...
@@ -813,7 +782,8 @@ static int wm831x_boostp_probe(struct platform_device *pdev)
config
.
driver_data
=
dcdc
;
config
.
regmap
=
wm831x
->
regmap
;
dcdc
->
regulator
=
regulator_register
(
&
dcdc
->
desc
,
&
config
);
dcdc
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
dcdc
->
desc
,
&
config
);
if
(
IS_ERR
(
dcdc
->
regulator
))
{
ret
=
PTR_ERR
(
dcdc
->
regulator
);
dev_err
(
wm831x
->
dev
,
"Failed to register DCDC%d: %d
\n
"
,
...
...
@@ -822,39 +792,26 @@ static int wm831x_boostp_probe(struct platform_device *pdev)
}
irq
=
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
));
ret
=
request_threaded_irq
(
irq
,
NULL
,
wm831x_dcdc_uv_irq
,
IRQF_TRIGGER_RISING
,
dcdc
->
name
,
dcdc
);
ret
=
devm_request_threaded_irq
(
&
pdev
->
dev
,
irq
,
NULL
,
wm831x_dcdc_uv_irq
,
IRQF_TRIGGER_RISING
,
dcdc
->
name
,
dcdc
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"Failed to request UV IRQ %d: %d
\n
"
,
irq
,
ret
);
goto
err
_regulator
;
goto
err
;
}
platform_set_drvdata
(
pdev
,
dcdc
);
return
0
;
err_regulator:
regulator_unregister
(
dcdc
->
regulator
);
err:
return
ret
;
}
static
int
wm831x_boostp_remove
(
struct
platform_device
*
pdev
)
{
struct
wm831x_dcdc
*
dcdc
=
platform_get_drvdata
(
pdev
);
free_irq
(
wm831x_irq
(
dcdc
->
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
)),
dcdc
);
regulator_unregister
(
dcdc
->
regulator
);
return
0
;
}
static
struct
platform_driver
wm831x_boostp_driver
=
{
.
probe
=
wm831x_boostp_probe
,
.
remove
=
wm831x_boostp_remove
,
.
driver
=
{
.
name
=
"wm831x-boostp"
,
.
owner
=
THIS_MODULE
,
...
...
@@ -914,7 +871,8 @@ static int wm831x_epe_probe(struct platform_device *pdev)
config
.
driver_data
=
dcdc
;
config
.
regmap
=
wm831x
->
regmap
;
dcdc
->
regulator
=
regulator_register
(
&
dcdc
->
desc
,
&
config
);
dcdc
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
dcdc
->
desc
,
&
config
);
if
(
IS_ERR
(
dcdc
->
regulator
))
{
ret
=
PTR_ERR
(
dcdc
->
regulator
);
dev_err
(
wm831x
->
dev
,
"Failed to register EPE%d: %d
\n
"
,
...
...
@@ -930,18 +888,8 @@ static int wm831x_epe_probe(struct platform_device *pdev)
return
ret
;
}
static
int
wm831x_epe_remove
(
struct
platform_device
*
pdev
)
{
struct
wm831x_dcdc
*
dcdc
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
dcdc
->
regulator
);
return
0
;
}
static
struct
platform_driver
wm831x_epe_driver
=
{
.
probe
=
wm831x_epe_probe
,
.
remove
=
wm831x_epe_remove
,
.
driver
=
{
.
name
=
"wm831x-epe"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/wm831x-isink.c
View file @
420118d4
...
...
@@ -194,7 +194,8 @@ static int wm831x_isink_probe(struct platform_device *pdev)
config
.
init_data
=
pdata
->
isink
[
id
];
config
.
driver_data
=
isink
;
isink
->
regulator
=
regulator_register
(
&
isink
->
desc
,
&
config
);
isink
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
isink
->
desc
,
&
config
);
if
(
IS_ERR
(
isink
->
regulator
))
{
ret
=
PTR_ERR
(
isink
->
regulator
);
dev_err
(
wm831x
->
dev
,
"Failed to register ISINK%d: %d
\n
"
,
...
...
@@ -203,38 +204,26 @@ static int wm831x_isink_probe(struct platform_device *pdev)
}
irq
=
wm831x_irq
(
wm831x
,
platform_get_irq
(
pdev
,
0
));
ret
=
request_threaded_irq
(
irq
,
NULL
,
wm831x_isink_irq
,
IRQF_TRIGGER_RISING
,
isink
->
name
,
isink
);
ret
=
devm_request_threaded_irq
(
&
pdev
->
dev
,
irq
,
NULL
,
wm831x_isink_irq
,
IRQF_TRIGGER_RISING
,
isink
->
name
,
isink
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"Failed to request ISINK IRQ %d: %d
\n
"
,
irq
,
ret
);
goto
err
_regulator
;
goto
err
;
}
platform_set_drvdata
(
pdev
,
isink
);
return
0
;
err_regulator:
regulator_unregister
(
isink
->
regulator
);
err:
return
ret
;
}
static
int
wm831x_isink_remove
(
struct
platform_device
*
pdev
)
{
struct
wm831x_isink
*
isink
=
platform_get_drvdata
(
pdev
);
free_irq
(
wm831x_irq
(
isink
->
wm831x
,
platform_get_irq
(
pdev
,
0
)),
isink
);
regulator_unregister
(
isink
->
regulator
);
return
0
;
}
static
struct
platform_driver
wm831x_isink_driver
=
{
.
probe
=
wm831x_isink_probe
,
.
remove
=
wm831x_isink_remove
,
.
driver
=
{
.
name
=
"wm831x-isink"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/wm831x-ldo.c
View file @
420118d4
...
...
@@ -279,7 +279,8 @@ static int wm831x_gp_ldo_probe(struct platform_device *pdev)
config
.
driver_data
=
ldo
;
config
.
regmap
=
wm831x
->
regmap
;
ldo
->
regulator
=
regulator_register
(
&
ldo
->
desc
,
&
config
);
ldo
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ldo
->
desc
,
&
config
);
if
(
IS_ERR
(
ldo
->
regulator
))
{
ret
=
PTR_ERR
(
ldo
->
regulator
);
dev_err
(
wm831x
->
dev
,
"Failed to register LDO%d: %d
\n
"
,
...
...
@@ -288,39 +289,26 @@ static int wm831x_gp_ldo_probe(struct platform_device *pdev)
}
irq
=
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
));
ret
=
request_threaded_irq
(
irq
,
NULL
,
wm831x_ldo_uv_irq
,
IRQF_TRIGGER_RISING
,
ldo
->
name
,
ldo
);
ret
=
devm_request_threaded_irq
(
&
pdev
->
dev
,
irq
,
NULL
,
wm831x_ldo_uv_irq
,
IRQF_TRIGGER_RISING
,
ldo
->
name
,
ldo
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"Failed to request UV IRQ %d: %d
\n
"
,
irq
,
ret
);
goto
err
_regulator
;
goto
err
;
}
platform_set_drvdata
(
pdev
,
ldo
);
return
0
;
err_regulator:
regulator_unregister
(
ldo
->
regulator
);
err:
return
ret
;
}
static
int
wm831x_gp_ldo_remove
(
struct
platform_device
*
pdev
)
{
struct
wm831x_ldo
*
ldo
=
platform_get_drvdata
(
pdev
);
free_irq
(
wm831x_irq
(
ldo
->
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
)),
ldo
);
regulator_unregister
(
ldo
->
regulator
);
return
0
;
}
static
struct
platform_driver
wm831x_gp_ldo_driver
=
{
.
probe
=
wm831x_gp_ldo_probe
,
.
remove
=
wm831x_gp_ldo_remove
,
.
driver
=
{
.
name
=
"wm831x-ldo"
,
.
owner
=
THIS_MODULE
,
...
...
@@ -505,7 +493,8 @@ static int wm831x_aldo_probe(struct platform_device *pdev)
config
.
driver_data
=
ldo
;
config
.
regmap
=
wm831x
->
regmap
;
ldo
->
regulator
=
regulator_register
(
&
ldo
->
desc
,
&
config
);
ldo
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ldo
->
desc
,
&
config
);
if
(
IS_ERR
(
ldo
->
regulator
))
{
ret
=
PTR_ERR
(
ldo
->
regulator
);
dev_err
(
wm831x
->
dev
,
"Failed to register LDO%d: %d
\n
"
,
...
...
@@ -514,38 +503,25 @@ static int wm831x_aldo_probe(struct platform_device *pdev)
}
irq
=
wm831x_irq
(
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
));
ret
=
request_threaded_irq
(
irq
,
NULL
,
wm831x_ldo_uv_irq
,
IRQF_TRIGGER_RISING
,
ldo
->
name
,
ldo
);
ret
=
devm_request_threaded_irq
(
&
pdev
->
dev
,
irq
,
NULL
,
wm831x_ldo_uv_irq
,
IRQF_TRIGGER_RISING
,
ldo
->
name
,
ldo
);
if
(
ret
!=
0
)
{
dev_err
(
&
pdev
->
dev
,
"Failed to request UV IRQ %d: %d
\n
"
,
irq
,
ret
);
goto
err
_regulator
;
goto
err
;
}
platform_set_drvdata
(
pdev
,
ldo
);
return
0
;
err_regulator:
regulator_unregister
(
ldo
->
regulator
);
err:
return
ret
;
}
static
int
wm831x_aldo_remove
(
struct
platform_device
*
pdev
)
{
struct
wm831x_ldo
*
ldo
=
platform_get_drvdata
(
pdev
);
free_irq
(
wm831x_irq
(
ldo
->
wm831x
,
platform_get_irq_byname
(
pdev
,
"UV"
)),
ldo
);
regulator_unregister
(
ldo
->
regulator
);
return
0
;
}
static
struct
platform_driver
wm831x_aldo_driver
=
{
.
probe
=
wm831x_aldo_probe
,
.
remove
=
wm831x_aldo_remove
,
.
driver
=
{
.
name
=
"wm831x-aldo"
,
.
owner
=
THIS_MODULE
,
...
...
@@ -663,7 +639,8 @@ static int wm831x_alive_ldo_probe(struct platform_device *pdev)
config
.
driver_data
=
ldo
;
config
.
regmap
=
wm831x
->
regmap
;
ldo
->
regulator
=
regulator_register
(
&
ldo
->
desc
,
&
config
);
ldo
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
ldo
->
desc
,
&
config
);
if
(
IS_ERR
(
ldo
->
regulator
))
{
ret
=
PTR_ERR
(
ldo
->
regulator
);
dev_err
(
wm831x
->
dev
,
"Failed to register LDO%d: %d
\n
"
,
...
...
@@ -679,18 +656,8 @@ static int wm831x_alive_ldo_probe(struct platform_device *pdev)
return
ret
;
}
static
int
wm831x_alive_ldo_remove
(
struct
platform_device
*
pdev
)
{
struct
wm831x_ldo
*
ldo
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
ldo
->
regulator
);
return
0
;
}
static
struct
platform_driver
wm831x_alive_ldo_driver
=
{
.
probe
=
wm831x_alive_ldo_probe
,
.
remove
=
wm831x_alive_ldo_remove
,
.
driver
=
{
.
name
=
"wm831x-alive-ldo"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/regulator/wm8350-regulator.c
View file @
420118d4
...
...
@@ -1206,7 +1206,8 @@ static int wm8350_regulator_probe(struct platform_device *pdev)
config
.
regmap
=
wm8350
->
regmap
;
/* register regulator */
rdev
=
regulator_register
(
&
wm8350_reg
[
pdev
->
id
],
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
wm8350_reg
[
pdev
->
id
],
&
config
);
if
(
IS_ERR
(
rdev
))
{
dev_err
(
&
pdev
->
dev
,
"failed to register %s
\n
"
,
wm8350_reg
[
pdev
->
id
].
name
);
...
...
@@ -1217,7 +1218,6 @@ static int wm8350_regulator_probe(struct platform_device *pdev)
ret
=
wm8350_register_irq
(
wm8350
,
wm8350_reg
[
pdev
->
id
].
irq
,
pmic_uv_handler
,
0
,
"UV"
,
rdev
);
if
(
ret
<
0
)
{
regulator_unregister
(
rdev
);
dev_err
(
&
pdev
->
dev
,
"failed to register regulator %s IRQ
\n
"
,
wm8350_reg
[
pdev
->
id
].
name
);
return
ret
;
...
...
@@ -1233,8 +1233,6 @@ static int wm8350_regulator_remove(struct platform_device *pdev)
wm8350_free_irq
(
wm8350
,
wm8350_reg
[
pdev
->
id
].
irq
,
rdev
);
regulator_unregister
(
rdev
);
return
0
;
}
...
...
drivers/regulator/wm8400-regulator.c
View file @
420118d4
...
...
@@ -219,7 +219,8 @@ static int wm8400_regulator_probe(struct platform_device *pdev)
config
.
driver_data
=
wm8400
;
config
.
regmap
=
wm8400
->
regmap
;
rdev
=
regulator_register
(
&
regulators
[
pdev
->
id
],
&
config
);
rdev
=
devm_regulator_register
(
&
pdev
->
dev
,
&
regulators
[
pdev
->
id
],
&
config
);
if
(
IS_ERR
(
rdev
))
return
PTR_ERR
(
rdev
);
...
...
@@ -228,21 +229,11 @@ static int wm8400_regulator_probe(struct platform_device *pdev)
return
0
;
}
static
int
wm8400_regulator_remove
(
struct
platform_device
*
pdev
)
{
struct
regulator_dev
*
rdev
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
rdev
);
return
0
;
}
static
struct
platform_driver
wm8400_regulator_driver
=
{
.
driver
=
{
.
name
=
"wm8400-regulator"
,
},
.
probe
=
wm8400_regulator_probe
,
.
remove
=
wm8400_regulator_remove
,
};
/**
...
...
drivers/regulator/wm8994-regulator.c
View file @
420118d4
...
...
@@ -165,7 +165,9 @@ static int wm8994_ldo_probe(struct platform_device *pdev)
ldo
->
init_data
=
*
pdata
->
ldo
[
id
].
init_data
;
}
ldo
->
regulator
=
regulator_register
(
&
wm8994_ldo_desc
[
id
],
&
config
);
ldo
->
regulator
=
devm_regulator_register
(
&
pdev
->
dev
,
&
wm8994_ldo_desc
[
id
],
&
config
);
if
(
IS_ERR
(
ldo
->
regulator
))
{
ret
=
PTR_ERR
(
ldo
->
regulator
);
dev_err
(
wm8994
->
dev
,
"Failed to register LDO%d: %d
\n
"
,
...
...
@@ -181,18 +183,8 @@ static int wm8994_ldo_probe(struct platform_device *pdev)
return
ret
;
}
static
int
wm8994_ldo_remove
(
struct
platform_device
*
pdev
)
{
struct
wm8994_ldo
*
ldo
=
platform_get_drvdata
(
pdev
);
regulator_unregister
(
ldo
->
regulator
);
return
0
;
}
static
struct
platform_driver
wm8994_ldo_driver
=
{
.
probe
=
wm8994_ldo_probe
,
.
remove
=
wm8994_ldo_remove
,
.
driver
=
{
.
name
=
"wm8994-ldo"
,
.
owner
=
THIS_MODULE
,
...
...
include/linux/mfd/core.h
View file @
420118d4
...
...
@@ -59,6 +59,12 @@ struct mfd_cell {
* pm_runtime_no_callbacks().
*/
bool
pm_runtime_no_callbacks
;
/* A list of regulator supplies that should be mapped to the MFD
* device rather than the child device when requested
*/
const
char
**
parent_supplies
;
int
num_parent_supplies
;
};
/*
...
...
include/linux/regulator/consumer.h
View file @
420118d4
...
...
@@ -146,6 +146,32 @@ struct regulator *__must_check devm_regulator_get_optional(struct device *dev,
void
regulator_put
(
struct
regulator
*
regulator
);
void
devm_regulator_put
(
struct
regulator
*
regulator
);
int
regulator_register_supply_alias
(
struct
device
*
dev
,
const
char
*
id
,
struct
device
*
alias_dev
,
const
char
*
alias_id
);
void
regulator_unregister_supply_alias
(
struct
device
*
dev
,
const
char
*
id
);
int
regulator_bulk_register_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
struct
device
*
alias_dev
,
const
char
**
alias_id
,
int
num_id
);
void
regulator_bulk_unregister_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
int
num_id
);
int
devm_regulator_register_supply_alias
(
struct
device
*
dev
,
const
char
*
id
,
struct
device
*
alias_dev
,
const
char
*
alias_id
);
void
devm_regulator_unregister_supply_alias
(
struct
device
*
dev
,
const
char
*
id
);
int
devm_regulator_bulk_register_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
struct
device
*
alias_dev
,
const
char
**
alias_id
,
int
num_id
);
void
devm_regulator_bulk_unregister_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
int
num_id
);
/* regulator output control and status */
int
__must_check
regulator_enable
(
struct
regulator
*
regulator
);
int
regulator_disable
(
struct
regulator
*
regulator
);
...
...
@@ -250,6 +276,59 @@ static inline void devm_regulator_put(struct regulator *regulator)
{
}
static
inline
int
regulator_register_supply_alias
(
struct
device
*
dev
,
const
char
*
id
,
struct
device
*
alias_dev
,
const
char
*
alias_id
)
{
return
0
;
}
static
inline
void
regulator_unregister_supply_alias
(
struct
device
*
dev
,
const
char
*
id
)
{
}
static
inline
int
regulator_bulk_register_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
struct
device
*
alias_dev
,
const
char
**
alias_id
,
int
num_id
)
{
return
0
;
}
static
inline
void
regulator_bulk_unregister_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
int
num_id
)
{
}
static
inline
int
devm_regulator_register_supply_alias
(
struct
device
*
dev
,
const
char
*
id
,
struct
device
*
alias_dev
,
const
char
*
alias_id
)
{
return
0
;
}
static
inline
void
devm_regulator_unregister_supply_alias
(
struct
device
*
dev
,
const
char
*
id
)
{
}
static
inline
int
devm_regulator_bulk_register_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
struct
device
*
alias_dev
,
const
char
**
alias_id
,
int
num_id
)
{
return
0
;
}
static
inline
void
devm_regulator_bulk_unregister_supply_alias
(
struct
device
*
dev
,
const
char
**
id
,
int
num_id
)
{
}
static
inline
int
regulator_enable
(
struct
regulator
*
regulator
)
{
return
0
;
...
...
include/linux/regulator/driver.h
View file @
420118d4
...
...
@@ -336,7 +336,12 @@ struct regulator_dev {
struct
regulator_dev
*
regulator_register
(
const
struct
regulator_desc
*
regulator_desc
,
const
struct
regulator_config
*
config
);
struct
regulator_dev
*
devm_regulator_register
(
struct
device
*
dev
,
const
struct
regulator_desc
*
regulator_desc
,
const
struct
regulator_config
*
config
);
void
regulator_unregister
(
struct
regulator_dev
*
rdev
);
void
devm_regulator_unregister
(
struct
device
*
dev
,
struct
regulator_dev
*
rdev
);
int
regulator_notifier_call_chain
(
struct
regulator_dev
*
rdev
,
unsigned
long
event
,
void
*
data
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment