From 2d3acf441378142418aad092ff39aeedeb2389b9 Mon Sep 17 00:00:00 2001 From: lixp5 Date: Wed, 28 Nov 2018 14:50:17 +0800 Subject: [PATCH] ASoC: cs35l41: Add a file node for TCMD to read CS35L41_GPIO_STATUS1 TCMD needs to check the connectivity of the CDC_LP_GATE line by reading GPIO1 status, and CS35L41_GPIO_STATUS1 indicates the status of GPIO1. Change-Id: I4a563cc228a455f9995fc92bfcf4b11cdfd6136b Reviewed-on: https://gerrit.mot.com/1274600 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Seungyoon Lee Submit-Approved: Jira Key --- sound/soc/codecs/cs35l41-i2c.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/sound/soc/codecs/cs35l41-i2c.c b/sound/soc/codecs/cs35l41-i2c.c index 2f4422a58af6..cb1e13995315 100644 --- a/sound/soc/codecs/cs35l41-i2c.c +++ b/sound/soc/codecs/cs35l41-i2c.c @@ -55,6 +55,35 @@ static const struct i2c_device_id cs35l41_id_i2c[] = { MODULE_DEVICE_TABLE(i2c, cs35l41_id_i2c); +static ssize_t gpio_status_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + u32 int_status = 0; + struct cs35l41_private *cs35l41 = dev_get_drvdata(dev); + + if (cs35l41 != NULL) + { + regmap_read(cs35l41->regmap, CS35L41_GPIO_STATUS1, &int_status); + dev_err(cs35l41->dev, "gpio_status_show read regmap:%d\n", int_status); + } + else + { + dev_err(cs35l41->dev, "gpio_status_show cs35l41 not init\n"); + } + + return snprintf(buf, PAGE_SIZE, "%d\n", int_status); +} + +static DEVICE_ATTR(gpio_status, S_IRUGO, gpio_status_show, NULL); + +static struct attribute *gpio_status_attrs[] = { + &dev_attr_gpio_status.attr, + NULL, +}; + +static struct attribute_group gpio_status_attr_group = { + .attrs = gpio_status_attrs, +}; + static int cs35l41_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -82,6 +111,10 @@ static int cs35l41_i2c_probe(struct i2c_client *client, return ret; } + ret = sysfs_create_group(&cs35l41->dev->kobj, &gpio_status_attr_group); + if (ret < 0) + dev_err(cs35l41->dev, "sysfs group creation failed, ret = %d\n", ret); + return cs35l41_probe(cs35l41, pdata); }