Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f369a540 authored by Mao Jinlong's avatar Mao Jinlong
Browse files

soc: qcom: dcc_v2: Add read_write dt config support for dcc_v2



Add read_write dt config to support the configure that read an
address's value and then modify the address's value in device tree.

Change-Id: I85c37ed739af8739b87e4dd817dd2e2faf74555f
Signed-off-by: default avatarMao Jinlong <jinlmao@codeaurora.org>
parent c3ba5d3a
Loading
Loading
Loading
Loading
+30 −15
Original line number Diff line number Diff line
@@ -1273,27 +1273,16 @@ static ssize_t loop_store(struct device *dev,
}
static DEVICE_ATTR_WO(loop);

static ssize_t rd_mod_wr_store(struct device *dev,
				    struct device_attribute *attr,
				    const char *buf, size_t size)
static int dcc_rd_mod_wr_add(struct dcc_drvdata *drvdata, unsigned int mask,
			  unsigned int val)
{
	int ret = size;
	int nval;
	unsigned int mask, val;
	struct dcc_drvdata *drvdata = dev_get_drvdata(dev);
	int ret = 0;
	struct dcc_config_entry *entry;

	mutex_lock(&drvdata->mutex);

	nval = sscanf(buf, "%x %x", &mask, &val);

	if (nval <= 1 || nval > 2) {
		ret = -EINVAL;
		goto err;
	}

	if (drvdata->curr_list >= DCC_MAX_LINK_LIST) {
		dev_err(dev, "Select link list to program using curr_list\n");
		dev_err(drvdata->dev, "Select link list to program using curr_list\n");
		ret = -EINVAL;
		goto err;
	}
@@ -1320,6 +1309,28 @@ static ssize_t rd_mod_wr_store(struct device *dev,
	mutex_unlock(&drvdata->mutex);
	return ret;
}

static ssize_t rd_mod_wr_store(struct device *dev,
				    struct device_attribute *attr,
				    const char *buf, size_t size)
{
	int ret;
	int nval;
	unsigned int mask, val;
	struct dcc_drvdata *drvdata = dev_get_drvdata(dev);

	nval = sscanf(buf, "%x %x", &mask, &val);

	if (nval <= 1 || nval > 2)
		return -EINVAL;

	ret = dcc_rd_mod_wr_add(drvdata, mask, val);
	if (ret)
		return ret;

	return size;

}
static DEVICE_ATTR_WO(rd_mod_wr);

static int dcc_add_write(struct dcc_drvdata *drvdata, unsigned int addr,
@@ -1637,6 +1648,10 @@ static int dcc_dt_parse(struct dcc_drvdata *drvdata, struct device_node *np)
				ret = dcc_config_add(drvdata, val1,
							val2, apb_bus);
				break;
			case DCC_READ_WRITE:
				ret = dcc_rd_mod_wr_add(drvdata, val1,
							val2);
				break;
			case DCC_WRITE:
				ret = dcc_add_write(drvdata, val1,
							val2, apb_bus);