ab8500-btemp: Adaptation to AB8505 and AB9540 platforms
Add AB9540 and AB8505 support to ABx500 BTEMP driver. Signed-off-by: Rajkumar Kasirajan <rajkumar.kasirajan@stericsson.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Reviewed-by: Michel JAOUEN <michel.jaouen@stericsson.com> Reviewed-by: Marcus COOPER <marcus.xm.cooper@stericsson.com> Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com> Tested-by: Michel JAOUEN <michel.jaouen@stericsson.com> Tested-by: Jonas ABERG <jonas.aberg@stericsson.com>
This commit is contained in:
parent
75f2a219ff
commit
e6aac611b8
|
@ -39,6 +39,9 @@
|
||||||
#define BTEMP_BATCTRL_CURR_SRC_7UA 7
|
#define BTEMP_BATCTRL_CURR_SRC_7UA 7
|
||||||
#define BTEMP_BATCTRL_CURR_SRC_20UA 20
|
#define BTEMP_BATCTRL_CURR_SRC_20UA 20
|
||||||
|
|
||||||
|
#define BTEMP_BATCTRL_CURR_SRC_16UA 16
|
||||||
|
#define BTEMP_BATCTRL_CURR_SRC_18UA 18
|
||||||
|
|
||||||
#define to_ab8500_btemp_device_info(x) container_of((x), \
|
#define to_ab8500_btemp_device_info(x) container_of((x), \
|
||||||
struct ab8500_btemp, btemp_psy);
|
struct ab8500_btemp, btemp_psy);
|
||||||
|
|
||||||
|
@ -212,10 +215,18 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
|
||||||
|
|
||||||
/* Only do this for batteries with internal NTC */
|
/* Only do this for batteries with internal NTC */
|
||||||
if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && enable) {
|
if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && enable) {
|
||||||
|
|
||||||
|
if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
|
||||||
|
if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_16UA)
|
||||||
|
curr = BAT_CTRL_16U_ENA;
|
||||||
|
else
|
||||||
|
curr = BAT_CTRL_18U_ENA;
|
||||||
|
} else {
|
||||||
if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_7UA)
|
if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_7UA)
|
||||||
curr = BAT_CTRL_7U_ENA;
|
curr = BAT_CTRL_7U_ENA;
|
||||||
else
|
else
|
||||||
curr = BAT_CTRL_20U_ENA;
|
curr = BAT_CTRL_20U_ENA;
|
||||||
|
}
|
||||||
|
|
||||||
dev_dbg(di->dev, "Set BATCTRL %duA\n", di->curr_source);
|
dev_dbg(di->dev, "Set BATCTRL %duA\n", di->curr_source);
|
||||||
|
|
||||||
|
@ -246,11 +257,22 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
|
||||||
} else if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && !enable) {
|
} else if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && !enable) {
|
||||||
dev_dbg(di->dev, "Disable BATCTRL curr source\n");
|
dev_dbg(di->dev, "Disable BATCTRL curr source\n");
|
||||||
|
|
||||||
|
if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
|
||||||
/* Write 0 to the curr bits */
|
/* Write 0 to the curr bits */
|
||||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
ret = abx500_mask_and_set_register_interruptible(
|
||||||
|
di->dev,
|
||||||
|
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||||
|
BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA,
|
||||||
|
~(BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA));
|
||||||
|
} else {
|
||||||
|
/* Write 0 to the curr bits */
|
||||||
|
ret = abx500_mask_and_set_register_interruptible(
|
||||||
|
di->dev,
|
||||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||||
BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
|
BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
|
||||||
~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
|
~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
|
||||||
|
}
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(di->dev, "%s failed disabling current source\n",
|
dev_err(di->dev, "%s failed disabling current source\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
@ -292,11 +314,20 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
|
||||||
* if we got an error above
|
* if we got an error above
|
||||||
*/
|
*/
|
||||||
disable_curr_source:
|
disable_curr_source:
|
||||||
|
if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
|
||||||
|
/* Write 0 to the curr bits */
|
||||||
|
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||||
|
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||||
|
BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA,
|
||||||
|
~(BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA));
|
||||||
|
} else {
|
||||||
/* Write 0 to the curr bits */
|
/* Write 0 to the curr bits */
|
||||||
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
ret = abx500_mask_and_set_register_interruptible(di->dev,
|
||||||
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
|
||||||
BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
|
BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
|
||||||
~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
|
~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
|
||||||
|
}
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(di->dev, "%s failed disabling current source\n",
|
dev_err(di->dev, "%s failed disabling current source\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
@ -510,8 +541,11 @@ static int ab8500_btemp_id(struct ab8500_btemp *di)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
u8 i;
|
u8 i;
|
||||||
|
if (is_ab9540(di->parent) || is_ab8505(di->parent))
|
||||||
|
di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA;
|
||||||
|
else
|
||||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA;
|
di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA;
|
||||||
|
|
||||||
di->bm->batt_id = BATTERY_UNKNOWN;
|
di->bm->batt_id = BATTERY_UNKNOWN;
|
||||||
|
|
||||||
res = ab8500_btemp_get_batctrl_res(di);
|
res = ab8500_btemp_get_batctrl_res(di);
|
||||||
|
@ -549,9 +583,14 @@ static int ab8500_btemp_id(struct ab8500_btemp *di)
|
||||||
*/
|
*/
|
||||||
if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL &&
|
if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL &&
|
||||||
di->bm->batt_id == 1) {
|
di->bm->batt_id == 1) {
|
||||||
|
if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
|
||||||
|
dev_dbg(di->dev, "Set BATCTRL current source to 16uA\n");
|
||||||
|
di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA;
|
||||||
|
} else {
|
||||||
dev_dbg(di->dev, "Set BATCTRL current source to 20uA\n");
|
dev_dbg(di->dev, "Set BATCTRL current source to 20uA\n");
|
||||||
di->curr_source = BTEMP_BATCTRL_CURR_SRC_20UA;
|
di->curr_source = BTEMP_BATCTRL_CURR_SRC_20UA;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return di->bm->batt_id;
|
return di->bm->batt_id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -226,6 +226,8 @@
|
||||||
/* BatCtrl Current Source Constants */
|
/* BatCtrl Current Source Constants */
|
||||||
#define BAT_CTRL_7U_ENA 0x01
|
#define BAT_CTRL_7U_ENA 0x01
|
||||||
#define BAT_CTRL_20U_ENA 0x02
|
#define BAT_CTRL_20U_ENA 0x02
|
||||||
|
#define BAT_CTRL_18U_ENA 0x01
|
||||||
|
#define BAT_CTRL_16U_ENA 0x02
|
||||||
#define BAT_CTRL_CMP_ENA 0x04
|
#define BAT_CTRL_CMP_ENA 0x04
|
||||||
#define FORCE_BAT_CTRL_CMP_HIGH 0x08
|
#define FORCE_BAT_CTRL_CMP_HIGH 0x08
|
||||||
#define BAT_CTRL_PULL_UP_ENA 0x10
|
#define BAT_CTRL_PULL_UP_ENA 0x10
|
||||||
|
|
Loading…
Reference in New Issue