smb138x-charger: configure connector temp thresholds
Add a device tree property qcom,connector-temp-max-mdegc to configure the connector temperature at which mitigation should start. This will set the thresholds for when the temperature-change IRQ will fire. Change-Id: I47df477b56a6654fbf94b5bb0f7dfdfb80e2f16e Signed-off-by: Nicholas Troast <ntroast@codeaurora.org>
This commit is contained in:
parent
294cded42d
commit
82ca1cbfca
3 changed files with 59 additions and 0 deletions
|
@ -58,6 +58,12 @@ Charger specific properties:
|
||||||
Definition: Specifies the maximum charger temperature in milli-degrees
|
Definition: Specifies the maximum charger temperature in milli-degrees
|
||||||
Celsius. If unspecified a default of 80000 will be used.
|
Celsius. If unspecified a default of 80000 will be used.
|
||||||
|
|
||||||
|
- qcom,connector-temp-max-mdegc
|
||||||
|
Usage: optional
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: Specifies the maximum connector temperature in milli-degrees
|
||||||
|
Celsius. If unspecified a default value of 105000 will be used.
|
||||||
|
|
||||||
- io-channels
|
- io-channels
|
||||||
Usage: optional
|
Usage: optional
|
||||||
Value type: List of <phandle u32>
|
Value type: List of <phandle u32>
|
||||||
|
|
|
@ -135,6 +135,9 @@ struct smb_iio {
|
||||||
struct iio_channel *usbin_i_chan;
|
struct iio_channel *usbin_i_chan;
|
||||||
struct iio_channel *usbin_v_chan;
|
struct iio_channel *usbin_v_chan;
|
||||||
struct iio_channel *batt_i_chan;
|
struct iio_channel *batt_i_chan;
|
||||||
|
struct iio_channel *connector_temp_thr1_chan;
|
||||||
|
struct iio_channel *connector_temp_thr2_chan;
|
||||||
|
struct iio_channel *connector_temp_thr3_chan;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct reg_info {
|
struct reg_info {
|
||||||
|
|
|
@ -93,6 +93,7 @@ struct smb_dt_props {
|
||||||
int usb_icl_ua;
|
int usb_icl_ua;
|
||||||
int dc_icl_ua;
|
int dc_icl_ua;
|
||||||
int chg_temp_max_mdegc;
|
int chg_temp_max_mdegc;
|
||||||
|
int connector_temp_max_mdegc;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct smb138x {
|
struct smb138x {
|
||||||
|
@ -142,6 +143,12 @@ static int smb138x_parse_dt(struct smb138x *chip)
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
chip->dt.chg_temp_max_mdegc = 80000;
|
chip->dt.chg_temp_max_mdegc = 80000;
|
||||||
|
|
||||||
|
rc = of_property_read_u32(node,
|
||||||
|
"qcom,connector-temp-max-mdegc",
|
||||||
|
&chip->dt.chg_temp_max_mdegc);
|
||||||
|
if (rc < 0)
|
||||||
|
chip->dt.connector_temp_max_mdegc = 105000;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,6 +679,8 @@ static int smb138x_init_vconn_regulator(struct smb138x *chip)
|
||||||
* HARDWARE INITIALIZATION *
|
* HARDWARE INITIALIZATION *
|
||||||
***************************/
|
***************************/
|
||||||
|
|
||||||
|
#define MDEGC_3 3000
|
||||||
|
#define MDEGC_15 15000
|
||||||
static int smb138x_init_slave_hw(struct smb138x *chip)
|
static int smb138x_init_slave_hw(struct smb138x *chip)
|
||||||
{
|
{
|
||||||
struct smb_charger *chg = &chip->chg;
|
struct smb_charger *chg = &chip->chg;
|
||||||
|
@ -771,6 +780,26 @@ static int smb138x_init_slave_hw(struct smb138x *chip)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = iio_write_channel_processed(chg->iio.connector_temp_thr1_chan,
|
||||||
|
chip->dt.connector_temp_max_mdegc);
|
||||||
|
if (rc < 0) {
|
||||||
|
pr_err("Couldn't set connector temp threshold1 rc=%d\n", rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = iio_write_channel_processed(chg->iio.connector_temp_thr2_chan,
|
||||||
|
chip->dt.connector_temp_max_mdegc + MDEGC_3);
|
||||||
|
if (rc < 0) {
|
||||||
|
pr_err("Couldn't set connector temp threshold2 rc=%d\n", rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = iio_write_channel_processed(chg->iio.connector_temp_thr3_chan,
|
||||||
|
chip->dt.connector_temp_max_mdegc + MDEGC_15);
|
||||||
|
if (rc < 0) {
|
||||||
|
pr_err("Couldn't set connector temp threshold3 rc=%d\n", rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1277,6 +1306,27 @@ static int smb138x_slave_probe(struct smb138x *chip)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chg->iio.connector_temp_thr1_chan = iio_channel_get(chg->dev,
|
||||||
|
"connector_temp_thr1");
|
||||||
|
if (IS_ERR(chg->iio.connector_temp_thr1_chan)) {
|
||||||
|
rc = PTR_ERR(chg->iio.connector_temp_thr1_chan);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
chg->iio.connector_temp_thr2_chan = iio_channel_get(chg->dev,
|
||||||
|
"connector_temp_thr2");
|
||||||
|
if (IS_ERR(chg->iio.connector_temp_thr2_chan)) {
|
||||||
|
rc = PTR_ERR(chg->iio.connector_temp_thr2_chan);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
chg->iio.connector_temp_thr3_chan = iio_channel_get(chg->dev,
|
||||||
|
"connector_temp_thr3");
|
||||||
|
if (IS_ERR(chg->iio.connector_temp_thr3_chan)) {
|
||||||
|
rc = PTR_ERR(chg->iio.connector_temp_thr3_chan);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
rc = smb138x_parse_dt(chip);
|
rc = smb138x_parse_dt(chip);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
pr_err("Couldn't parse device tree rc=%d\n", rc);
|
pr_err("Couldn't parse device tree rc=%d\n", rc);
|
||||||
|
|
Loading…
Add table
Reference in a new issue