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

Commit 3e9fb17a authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "dcc_v2: Control the cti trigger of each link list individually"

parents 34eb83e3 e5615101
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
 */

#include <linux/module.h>
@@ -157,7 +157,7 @@ struct dcc_drvdata {
	uint32_t		*nr_config;
	uint32_t		nr_link_list;
	uint8_t			curr_list;
	uint8_t			cti_trig;
	uint8_t			*cti_trig;
	uint8_t			loopoff;
};

@@ -776,7 +776,7 @@ static int dcc_enable(struct dcc_drvdata *drvdata)
		}

		/* 5. Configure trigger */
		dcc_writel(drvdata, BIT(9) | ((drvdata->cti_trig << 8) |
		dcc_writel(drvdata, BIT(9) | ((drvdata->cti_trig[list] << 8) |
			   (drvdata->data_sink[list] << 4) |
			   (drvdata->func_type[list])), DCC_LL_CFG(list));
	}
@@ -1485,7 +1485,8 @@ static ssize_t cti_trig_show(struct device *dev,
{
	struct dcc_drvdata *drvdata = dev_get_drvdata(dev);

	return scnprintf(buf, PAGE_SIZE, "%d\n", drvdata->cti_trig);
	return scnprintf(buf, PAGE_SIZE, "%d\n",
			drvdata->cti_trig[drvdata->curr_list]);
}

static ssize_t cti_trig_store(struct device *dev,
@@ -1513,9 +1514,11 @@ static ssize_t cti_trig_store(struct device *dev,
	}

	if (val)
		drvdata->cti_trig = 1;
		drvdata->cti_trig[drvdata->curr_list] = 1;
	else
		drvdata->cti_trig = 0;
		drvdata->cti_trig[drvdata->curr_list] = 0;

	ret = size;
out:
	mutex_unlock(&drvdata->mutex);
	return ret;
@@ -1864,6 +1867,10 @@ static int dcc_probe(struct platform_device *pdev)
			sizeof(uint32_t), GFP_KERNEL);
	if (!drvdata->nr_config)
		return -ENOMEM;
	drvdata->cti_trig = devm_kzalloc(dev, drvdata->nr_link_list *
			sizeof(uint8_t), GFP_KERNEL);
	if (!drvdata->cti_trig)
		return -ENOMEM;
	drvdata->cfg_head = devm_kzalloc(dev, drvdata->nr_link_list *
			sizeof(struct list_head), GFP_KERNEL);
	if (!drvdata->cfg_head)