qti_glink_charger: Add sys node to pass TCMD to ADSP

Add TCMD sys node to deliver PMIC register address and register
value to ADSP by glink.

Change-Id: I475b55b67939704968dda09337a314df9c7a9a1b
Signed-off-by: zhuwg1 <zhuwg1@motorola.com>
Reviewed-on: https://gerrit.mot.com/1925839
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Yonghua Yan <yanyh2@motorola.com>
Reviewed-by: Jianqi Yang <yangj@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
zhuwg1 committed 2021-04-20 02:10:23 -05:00
1 parent c0f3607d09
commit 7b32d40c56
1 file changed
+97
@@ -66,6 +66,8 @@ enum oem_property_type {
OEM_PROP_FACTORY_VERSION,
OEM_PROP_TCMD,
OEM_PROP_PMIC_ICL,
OEM_PROP_REG_ADDRESS,
OEM_PROP_REG_DATA,
OEM_PROP_MAX,
};
@@ -769,6 +771,83 @@ static DEVICE_ATTR(force_pmic_icl, 0664,
force_pmic_icl_show,
force_pmic_icl_store);
static ssize_t addr_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
unsigned long r;
u16 addr;
struct qti_charger *chg = dev_get_drvdata(dev);
if (!chg) {
pr_err("QTI: chip not valid\n");
return -ENODEV;
}
r = kstrtou16(buf, 0, &addr);
if (r) {
mmi_err(chg, "Invalid reg_address = 0x%x\n", addr);
return -EINVAL;
}
r = qti_charger_write(chg, OEM_PROP_REG_ADDRESS,
&addr,
sizeof(addr));
return r ? r : count;
}
static DEVICE_ATTR_WO(addr);
static ssize_t data_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
unsigned long r;
u8 data;
struct qti_charger *chg = dev_get_drvdata(dev);
if (!chg) {
pr_err("QTI: chip not valid\n");
return -ENODEV;
}
r = kstrtou8(buf, 0, &data);
if (r) {
mmi_err(chg, "Invalid reg_data = 0x%x\n", data);
return -EINVAL;
}
r = qti_charger_write(chg, OEM_PROP_REG_DATA,
&data,
sizeof(data));
return r ? r : count;
}
static ssize_t data_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
u8 data;
struct qti_charger *chg = dev_get_drvdata(dev);
if (!chg) {
pr_err("QTI: chip not valid\n");
return -ENODEV;
}
qti_charger_read(chg, OEM_PROP_REG_DATA,
&data,
sizeof(data));
return scnprintf(buf, CHG_SHOW_MAX_SIZE, "%x\n", data);
}
static DEVICE_ATTR(data, 0664,
data_show,
data_store);
static int qti_charger_init(struct qti_charger *chg)
{
int rc;
@@ -846,6 +925,20 @@ static int qti_charger_init(struct qti_charger *chg)
"Couldn't create force_pmic_icl\n");
}
rc = device_create_file(chg->dev,
&dev_attr_addr);
if (rc) {
mmi_err(chg,
"Couldn't create addr\n");
}
rc = device_create_file(chg->dev,
&dev_attr_data);
if (rc) {
mmi_err(chg,
"Couldn't create data\n");
}
return 0;
}
@@ -861,6 +954,10 @@ static void qti_charger_deinit(struct qti_charger *chg)
device_remove_file(chg->dev, &dev_attr_tcmd);
device_remove_file(chg->dev, &dev_attr_force_pmic_icl);
device_remove_file(chg->dev, &dev_attr_addr);
device_remove_file(chg->dev, &dev_attr_data);
/* unregister driver from mmi charger */
rc = mmi_unregister_charger_driver(chg->driver);
if (rc) {