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
f27a5fb4
Commit
f27a5fb4
authored
Sep 01, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'regulator/topic/optional' into regulator-next
parents
6979380d
9efdd276
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
121 additions
and
7 deletions
+121
-7
drivers/cpufreq/cpufreq-cpu0.c
drivers/cpufreq/cpufreq-cpu0.c
+1
-1
drivers/hwmon/sht15.c
drivers/hwmon/sht15.c
+1
-1
drivers/mmc/core/core.c
drivers/mmc/core/core.c
+1
-1
drivers/mmc/host/dw_mmc.c
drivers/mmc/host/dw_mmc.c
+1
-1
drivers/mmc/host/pxamci.c
drivers/mmc/host/pxamci.c
+1
-1
drivers/mmc/host/sdhci.c
drivers/mmc/host/sdhci.c
+2
-2
drivers/regulator/core.c
drivers/regulator/core.c
+89
-0
include/linux/regulator/consumer.h
include/linux/regulator/consumer.h
+25
-0
No files found.
drivers/cpufreq/cpufreq-cpu0.c
View file @
f27a5fb4
...
@@ -197,7 +197,7 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev)
...
@@ -197,7 +197,7 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev)
cpu_dev
=
&
pdev
->
dev
;
cpu_dev
=
&
pdev
->
dev
;
cpu_dev
->
of_node
=
np
;
cpu_dev
->
of_node
=
np
;
cpu_reg
=
devm_regulator_get
(
cpu_dev
,
"cpu0"
);
cpu_reg
=
devm_regulator_get
_optional
(
cpu_dev
,
"cpu0"
);
if
(
IS_ERR
(
cpu_reg
))
{
if
(
IS_ERR
(
cpu_reg
))
{
/*
/*
* If cpu0 regulator supply node is present, but regulator is
* If cpu0 regulator supply node is present, but regulator is
...
...
drivers/hwmon/sht15.c
View file @
f27a5fb4
...
@@ -957,7 +957,7 @@ static int sht15_probe(struct platform_device *pdev)
...
@@ -957,7 +957,7 @@ static int sht15_probe(struct platform_device *pdev)
* If a regulator is available,
* If a regulator is available,
* query what the supply voltage actually is!
* query what the supply voltage actually is!
*/
*/
data
->
reg
=
devm_regulator_get
(
data
->
dev
,
"vcc"
);
data
->
reg
=
devm_regulator_get
_optional
(
data
->
dev
,
"vcc"
);
if
(
!
IS_ERR
(
data
->
reg
))
{
if
(
!
IS_ERR
(
data
->
reg
))
{
int
voltage
;
int
voltage
;
...
...
drivers/mmc/core/core.c
View file @
f27a5fb4
...
@@ -1313,7 +1313,7 @@ int mmc_regulator_get_supply(struct mmc_host *mmc)
...
@@ -1313,7 +1313,7 @@ int mmc_regulator_get_supply(struct mmc_host *mmc)
supply
=
devm_regulator_get
(
dev
,
"vmmc"
);
supply
=
devm_regulator_get
(
dev
,
"vmmc"
);
mmc
->
supply
.
vmmc
=
supply
;
mmc
->
supply
.
vmmc
=
supply
;
mmc
->
supply
.
vqmmc
=
devm_regulator_get
(
dev
,
"vqmmc"
);
mmc
->
supply
.
vqmmc
=
devm_regulator_get
_optional
(
dev
,
"vqmmc"
);
if
(
IS_ERR
(
supply
))
if
(
IS_ERR
(
supply
))
return
PTR_ERR
(
supply
);
return
PTR_ERR
(
supply
);
...
...
drivers/mmc/host/dw_mmc.c
View file @
f27a5fb4
...
@@ -2231,7 +2231,7 @@ int dw_mci_probe(struct dw_mci *host)
...
@@ -2231,7 +2231,7 @@ int dw_mci_probe(struct dw_mci *host)
}
}
}
}
host
->
vmmc
=
devm_regulator_get
(
host
->
dev
,
"vmmc"
);
host
->
vmmc
=
devm_regulator_get
_optional
(
host
->
dev
,
"vmmc"
);
if
(
IS_ERR
(
host
->
vmmc
))
{
if
(
IS_ERR
(
host
->
vmmc
))
{
ret
=
PTR_ERR
(
host
->
vmmc
);
ret
=
PTR_ERR
(
host
->
vmmc
);
if
(
ret
==
-
EPROBE_DEFER
)
if
(
ret
==
-
EPROBE_DEFER
)
...
...
drivers/mmc/host/pxamci.c
View file @
f27a5fb4
...
@@ -83,7 +83,7 @@ struct pxamci_host {
...
@@ -83,7 +83,7 @@ struct pxamci_host {
static
inline
void
pxamci_init_ocr
(
struct
pxamci_host
*
host
)
static
inline
void
pxamci_init_ocr
(
struct
pxamci_host
*
host
)
{
{
#ifdef CONFIG_REGULATOR
#ifdef CONFIG_REGULATOR
host
->
vcc
=
regulator_get
(
mmc_dev
(
host
->
mmc
),
"vmmc"
);
host
->
vcc
=
regulator_get
_optional
(
mmc_dev
(
host
->
mmc
),
"vmmc"
);
if
(
IS_ERR
(
host
->
vcc
))
if
(
IS_ERR
(
host
->
vcc
))
host
->
vcc
=
NULL
;
host
->
vcc
=
NULL
;
...
...
drivers/mmc/host/sdhci.c
View file @
f27a5fb4
...
@@ -2966,7 +2966,7 @@ int sdhci_add_host(struct sdhci_host *host)
...
@@ -2966,7 +2966,7 @@ int sdhci_add_host(struct sdhci_host *host)
mmc
->
caps
|=
MMC_CAP_NEEDS_POLL
;
mmc
->
caps
|=
MMC_CAP_NEEDS_POLL
;
/* If vqmmc regulator and no 1.8V signalling, then there's no UHS */
/* If vqmmc regulator and no 1.8V signalling, then there's no UHS */
host
->
vqmmc
=
regulator_get
(
mmc_dev
(
mmc
),
"vqmmc"
);
host
->
vqmmc
=
regulator_get
_optional
(
mmc_dev
(
mmc
),
"vqmmc"
);
if
(
IS_ERR_OR_NULL
(
host
->
vqmmc
))
{
if
(
IS_ERR_OR_NULL
(
host
->
vqmmc
))
{
if
(
PTR_ERR
(
host
->
vqmmc
)
<
0
)
{
if
(
PTR_ERR
(
host
->
vqmmc
)
<
0
)
{
pr_info
(
"%s: no vqmmc regulator found
\n
"
,
pr_info
(
"%s: no vqmmc regulator found
\n
"
,
...
@@ -3042,7 +3042,7 @@ int sdhci_add_host(struct sdhci_host *host)
...
@@ -3042,7 +3042,7 @@ int sdhci_add_host(struct sdhci_host *host)
ocr_avail
=
0
;
ocr_avail
=
0
;
host
->
vmmc
=
regulator_get
(
mmc_dev
(
mmc
),
"vmmc"
);
host
->
vmmc
=
regulator_get
_optional
(
mmc_dev
(
mmc
),
"vmmc"
);
if
(
IS_ERR_OR_NULL
(
host
->
vmmc
))
{
if
(
IS_ERR_OR_NULL
(
host
->
vmmc
))
{
if
(
PTR_ERR
(
host
->
vmmc
)
<
0
)
{
if
(
PTR_ERR
(
host
->
vmmc
)
<
0
)
{
pr_info
(
"%s: no vmmc regulator found
\n
"
,
pr_info
(
"%s: no vmmc regulator found
\n
"
,
...
...
drivers/regulator/core.c
View file @
f27a5fb4
...
@@ -1413,6 +1413,65 @@ struct regulator *regulator_get_exclusive(struct device *dev, const char *id)
...
@@ -1413,6 +1413,65 @@ struct regulator *regulator_get_exclusive(struct device *dev, const char *id)
}
}
EXPORT_SYMBOL_GPL
(
regulator_get_exclusive
);
EXPORT_SYMBOL_GPL
(
regulator_get_exclusive
);
/**
* regulator_get_optional - obtain optional access to a regulator.
* @dev: device for regulator "consumer"
* @id: Supply name or regulator ID.
*
* Returns a struct regulator corresponding to the regulator producer,
* or IS_ERR() condition containing errno. Other consumers will be
* unable to obtain this reference is held and the use count for the
* regulator will be initialised to reflect the current state of the
* regulator.
*
* This is intended for use by consumers for devices which can have
* some supplies unconnected in normal use, such as some MMC devices.
* It can allow the regulator core to provide stub supplies for other
* supplies requested using normal regulator_get() calls without
* disrupting the operation of drivers that can handle absent
* supplies.
*
* Use of supply names configured via regulator_set_device_supply() is
* strongly encouraged. It is recommended that the supply name used
* should match the name used for the supply and/or the relevant
* device pins in the datasheet.
*/
struct
regulator
*
regulator_get_optional
(
struct
device
*
dev
,
const
char
*
id
)
{
return
_regulator_get
(
dev
,
id
,
0
);
}
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() */
/* Locks held by regulator_put() */
static
void
_regulator_put
(
struct
regulator
*
regulator
)
static
void
_regulator_put
(
struct
regulator
*
regulator
)
{
{
...
@@ -1438,6 +1497,36 @@ static void _regulator_put(struct regulator *regulator)
...
@@ -1438,6 +1497,36 @@ static void _regulator_put(struct regulator *regulator)
module_put
(
rdev
->
owner
);
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_put - "free" the regulator source
* @regulator: regulator source
* @regulator: regulator source
...
...
include/linux/regulator/consumer.h
View file @
f27a5fb4
...
@@ -137,6 +137,12 @@ struct regulator *__must_check devm_regulator_get(struct device *dev,
...
@@ -137,6 +137,12 @@ struct regulator *__must_check devm_regulator_get(struct device *dev,
const
char
*
id
);
const
char
*
id
);
struct
regulator
*
__must_check
regulator_get_exclusive
(
struct
device
*
dev
,
struct
regulator
*
__must_check
regulator_get_exclusive
(
struct
device
*
dev
,
const
char
*
id
);
const
char
*
id
);
struct
regulator
*
__must_check
devm_regulator_get_exclusive
(
struct
device
*
dev
,
const
char
*
id
);
struct
regulator
*
__must_check
regulator_get_optional
(
struct
device
*
dev
,
const
char
*
id
);
struct
regulator
*
__must_check
devm_regulator_get_optional
(
struct
device
*
dev
,
const
char
*
id
);
void
regulator_put
(
struct
regulator
*
regulator
);
void
regulator_put
(
struct
regulator
*
regulator
);
void
devm_regulator_put
(
struct
regulator
*
regulator
);
void
devm_regulator_put
(
struct
regulator
*
regulator
);
...
@@ -217,6 +223,25 @@ devm_regulator_get(struct device *dev, const char *id)
...
@@ -217,6 +223,25 @@ devm_regulator_get(struct device *dev, const char *id)
return
NULL
;
return
NULL
;
}
}
static
inline
struct
regulator
*
__must_check
regulator_get_exclusive
(
struct
device
*
dev
,
const
char
*
id
)
{
return
NULL
;
}
static
inline
struct
regulator
*
__must_check
regulator_get_optional
(
struct
device
*
dev
,
const
char
*
id
)
{
return
NULL
;
}
static
inline
struct
regulator
*
__must_check
devm_regulator_get_optional
(
struct
device
*
dev
,
const
char
*
id
)
{
return
NULL
;
}
static
inline
void
regulator_put
(
struct
regulator
*
regulator
)
static
inline
void
regulator_put
(
struct
regulator
*
regulator
)
{
{
}
}
...
...
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