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

Commit b253a938 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "spi: spi_qsd: Fix the register peek/poke debug feature"

parents 62468c9c 8cb9120c
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -1830,15 +1830,15 @@ err_setup_exit:

static int debugfs_iomem_x32_set(void *data, u64 val)
{
	struct msm_spi_regs *debugfs_spi_regs = (struct msm_spi_regs *)data;
	struct msm_spi *dd = debugfs_spi_regs->dd;
	struct msm_spi_debugfs_data *reg = (struct msm_spi_debugfs_data *)data;
	struct msm_spi *dd = reg->dd;
	int ret;

	ret = pm_runtime_get_sync(dd->dev);
	if (ret < 0)
		return ret;

	writel_relaxed(val, (dd->base + debugfs_spi_regs->offset));
	writel_relaxed(val, (dd->base + reg->offset));
	/* Ensure the previous write completed. */
	mb();

@@ -1849,14 +1849,14 @@ static int debugfs_iomem_x32_set(void *data, u64 val)

static int debugfs_iomem_x32_get(void *data, u64 *val)
{
	struct msm_spi_regs *debugfs_spi_regs = (struct msm_spi_regs *)data;
	struct msm_spi *dd = debugfs_spi_regs->dd;
	struct msm_spi_debugfs_data *reg = (struct msm_spi_debugfs_data *)data;
	struct msm_spi *dd = reg->dd;
	int ret;

	ret = pm_runtime_get_sync(dd->dev);
	if (ret < 0)
		return ret;
	*val = readl_relaxed(dd->base + debugfs_spi_regs->offset);
	*val = readl_relaxed(dd->base + reg->offset);
	/* Ensure the previous read completed. */
	mb();

@@ -1870,18 +1870,21 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_iomem_x32, debugfs_iomem_x32_get,

static void spi_debugfs_init(struct msm_spi *dd)
{
	dd->dent_spi = debugfs_create_dir(dev_name(dd->dev), NULL);
	char dir_name[20];

	scnprintf(dir_name, sizeof(dir_name), "%s_dbg", dev_name(dd->dev));
	dd->dent_spi = debugfs_create_dir(dir_name, NULL);
	if (dd->dent_spi) {
		int i;

		for (i = 0; i < ARRAY_SIZE(debugfs_spi_regs); i++) {
			debugfs_spi_regs[i].dd = dd;
			dd->reg_data[i].offset = debugfs_spi_regs[i].offset;
			dd->reg_data[i].dd = dd;
			dd->debugfs_spi_regs[i] =
			   debugfs_create_file(
			       debugfs_spi_regs[i].name,
			       debugfs_spi_regs[i].mode,
			       dd->dent_spi,
			       debugfs_spi_regs+i,
			       dd->dent_spi, &dd->reg_data[i],
			       &fops_iomem_x32);
		}
	}
+35 −38
Original line number Diff line number Diff line
@@ -214,52 +214,48 @@ struct spi_cs_gpio {
};

#ifdef CONFIG_DEBUG_FS
struct msm_spi_debugfs_data {
	int offset;
	struct msm_spi *dd;
};
/* Used to create debugfs entries */
static struct msm_spi_regs{
	const char *name;
	mode_t mode;
	int offset;
	struct msm_spi *dd;
} debugfs_spi_regs[] = {
	{"config",                S_IRUGO | S_IWUSR, SPI_CONFIG, NULL},
	{"io_control",            S_IRUGO | S_IWUSR, SPI_IO_CONTROL, NULL},
	{"io_modes",              S_IRUGO | S_IWUSR, SPI_IO_MODES, NULL},
	{"sw_reset",                        S_IWUSR, SPI_SW_RESET, NULL},
	{"time_out_current",      S_IRUGO,           SPI_TIME_OUT_CURRENT,
									NULL},
	{"mx_output_count",       S_IRUGO | S_IWUSR, SPI_MX_OUTPUT_COUNT,
									NULL},
	{"mx_output_cnt_current", S_IRUGO,           SPI_MX_OUTPUT_CNT_CURRENT,
									NULL},
	{"mx_input_count",        S_IRUGO | S_IWUSR, SPI_MX_INPUT_COUNT, NULL},
	{"mx_input_cnt_current",  S_IRUGO,           SPI_MX_INPUT_CNT_CURRENT,
									NULL},
	{"mx_read_count",         S_IRUGO | S_IWUSR, SPI_MX_READ_COUNT, NULL},
	{"mx_read_cnt_current",   S_IRUGO,           SPI_MX_READ_CNT_CURRENT,
									NULL},
	{"operational",           S_IRUGO | S_IWUSR, SPI_OPERATIONAL, NULL},
	{"error_flags",           S_IRUGO | S_IWUSR, SPI_ERROR_FLAGS, NULL},
	{"error_flags_en",        S_IRUGO | S_IWUSR, SPI_ERROR_FLAGS_EN, NULL},
	{"deassert_wait",         S_IRUGO | S_IWUSR, SPI_DEASSERT_WAIT, NULL},
	{"output_debug",          S_IRUGO,           SPI_OUTPUT_DEBUG, NULL},
	{"input_debug",           S_IRUGO,           SPI_INPUT_DEBUG, NULL},
	{"test_ctrl",             S_IRUGO | S_IWUSR, SPI_TEST_CTRL, NULL},
	{"output_fifo",                     S_IWUSR, SPI_OUTPUT_FIFO, NULL},
	{"input_fifo" ,           S_IRUSR,           SPI_INPUT_FIFO, NULL},
	{"spi_state",             S_IRUGO | S_IWUSR, SPI_STATE, NULL},
	{"config",                S_IRUGO | S_IWUSR, SPI_CONFIG },
	{"io_control",            S_IRUGO | S_IWUSR, SPI_IO_CONTROL },
	{"io_modes",              S_IRUGO | S_IWUSR, SPI_IO_MODES },
	{"sw_reset",                        S_IWUSR, SPI_SW_RESET },
	{"time_out_current",      S_IRUGO,           SPI_TIME_OUT_CURRENT },
	{"mx_output_count",       S_IRUGO | S_IWUSR, SPI_MX_OUTPUT_COUNT },
	{"mx_output_cnt_current", S_IRUGO,
						SPI_MX_OUTPUT_CNT_CURRENT },
	{"mx_input_count",        S_IRUGO | S_IWUSR, SPI_MX_INPUT_COUNT },
	{"mx_input_cnt_current",  S_IRUGO,           SPI_MX_INPUT_CNT_CURRENT },
	{"mx_read_count",         S_IRUGO | S_IWUSR, SPI_MX_READ_COUNT, },
	{"mx_read_cnt_current",   S_IRUGO,           SPI_MX_READ_CNT_CURRENT },
	{"operational",           S_IRUGO | S_IWUSR, SPI_OPERATIONAL },
	{"error_flags",           S_IRUGO | S_IWUSR, SPI_ERROR_FLAGS },
	{"error_flags_en",        S_IRUGO | S_IWUSR, SPI_ERROR_FLAGS_EN },
	{"deassert_wait",         S_IRUGO | S_IWUSR, SPI_DEASSERT_WAIT },
	{"output_debug",          S_IRUGO,           SPI_OUTPUT_DEBUG },
	{"input_debug",           S_IRUGO,           SPI_INPUT_DEBUG },
	{"test_ctrl",             S_IRUGO | S_IWUSR, SPI_TEST_CTRL },
	{"output_fifo",                     S_IWUSR, SPI_OUTPUT_FIFO },
	{"input_fifo" ,           S_IRUSR,           SPI_INPUT_FIFO },
	{"spi_state",             S_IRUGO | S_IWUSR, SPI_STATE },
#if defined(CONFIG_SPI_QSD) || defined(CONFIG_SPI_QSD_MODULE)
	{"fifo_word_cnt",         S_IRUGO,           SPI_FIFO_WORD_CNT, NULL},
	{"fifo_word_cnt",         S_IRUGO,           SPI_FIFO_WORD_CNT },
#else
	{"qup_config",            S_IRUGO | S_IWUSR, QUP_CONFIG, NULL},
	{"qup_error_flags",       S_IRUGO | S_IWUSR, QUP_ERROR_FLAGS, NULL},
	{"qup_error_flags_en",    S_IRUGO | S_IWUSR, QUP_ERROR_FLAGS_EN, NULL},
	{"mx_write_cnt",          S_IRUGO | S_IWUSR, QUP_MX_WRITE_COUNT, NULL},
	{"mx_write_cnt_current",  S_IRUGO,           QUP_MX_WRITE_CNT_CURRENT,
									NULL},
	{"output_fifo_word_cnt",  S_IRUGO,           SPI_OUTPUT_FIFO_WORD_CNT,
									NULL},
	{"input_fifo_word_cnt",   S_IRUGO,           SPI_INPUT_FIFO_WORD_CNT,
									NULL},
	{"qup_config",            S_IRUGO | S_IWUSR, QUP_CONFIG },
	{"qup_error_flags",       S_IRUGO | S_IWUSR, QUP_ERROR_FLAGS },
	{"qup_error_flags_en",    S_IRUGO | S_IWUSR, QUP_ERROR_FLAGS_EN },
	{"mx_write_cnt",          S_IRUGO | S_IWUSR, QUP_MX_WRITE_COUNT },
	{"mx_write_cnt_current",  S_IRUGO,           QUP_MX_WRITE_CNT_CURRENT },
	{"output_fifo_word_cnt",  S_IRUGO,           SPI_OUTPUT_FIFO_WORD_CNT },
	{"input_fifo_word_cnt",   S_IRUGO,           SPI_INPUT_FIFO_WORD_CNT },
#endif
};
#endif
@@ -349,6 +345,7 @@ struct msm_spi {
#ifdef CONFIG_DEBUG_FS
	struct dentry *dent_spi;
	struct dentry *debugfs_spi_regs[ARRAY_SIZE(debugfs_spi_regs)];
	struct msm_spi_debugfs_data reg_data[ARRAY_SIZE(debugfs_spi_regs)];
#endif
	struct msm_spi_platform_data *pdata; /* Platform data */
	/* When set indicates multiple transfers in a single message */