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

Commit 1247cf7a authored by Jeremy Kerr's avatar Jeremy Kerr Committed by Greg Kroah-Hartman
Browse files

drivers/fsi/gpio: Add tracepoints for GPIO master



Trace low level input/output GPIO operations.

Signed-off-by: default avatarJeremy Kerr <jk@ozlabs.org>
Signed-off-by: default avatarChristopher Bostic <cbostic@linux.vnet.ibm.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ac0385d9
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -61,6 +61,9 @@ struct fsi_master_gpio {
	struct gpio_desc	*gpio_mux;	/* Mux control */
};

#define CREATE_TRACE_POINTS
#include <trace/events/fsi_master_gpio.h>

#define to_fsi_master_gpio(m) container_of(m, struct fsi_master_gpio, master)

struct fsi_gpio_msg {
@@ -126,6 +129,8 @@ static void serial_in(struct fsi_master_gpio *master, struct fsi_gpio_msg *msg,
		msg->msg |= ~in_bit & 0x1;	/* Data is active low */
	}
	msg->bits += num_bits;

	trace_fsi_master_gpio_in(master, num_bits, msg->msg);
}

static void serial_out(struct fsi_master_gpio *master,
@@ -137,6 +142,8 @@ static void serial_out(struct fsi_master_gpio *master,
	uint64_t last_bit = ~0;
	int next_bit;

	trace_fsi_master_gpio_out(master, cmd->bits, cmd->msg);

	if (!cmd->bits) {
		dev_warn(master->dev, "trying to output 0 bits\n");
		return;
@@ -458,6 +465,8 @@ static int fsi_master_gpio_break(struct fsi_master *_master, int link)
	if (link != 0)
		return -ENODEV;

	trace_fsi_master_gpio_break(master);

	set_sda_output(master, 1);
	sda_out(master, 1);
	clock_toggle(master, FSI_PRE_BREAK_CLOCKS);
+68 −0
Original line number Diff line number Diff line

#undef TRACE_SYSTEM
#define TRACE_SYSTEM fsi_master_gpio

#if !defined(_TRACE_FSI_MASTER_GPIO_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_FSI_MASTER_GPIO_H

#include <linux/tracepoint.h>

TRACE_EVENT(fsi_master_gpio_in,
	TP_PROTO(const struct fsi_master_gpio *master, int bits, uint64_t msg),
	TP_ARGS(master, bits, msg),
	TP_STRUCT__entry(
		__field(int,	master_idx)
		__field(int,	bits)
		__field(uint64_t, msg)
	),
	TP_fast_assign(
		__entry->master_idx = master->master.idx;
		__entry->bits = bits;
		__entry->msg  = msg & ((1ull<<bits) - 1);
	),
	TP_printk("fsi-gpio%d => %0*llx[%d]",
		__entry->master_idx,
		(__entry->bits + 3) / 4,
		__entry->msg,
		__entry->bits
	)
);

TRACE_EVENT(fsi_master_gpio_out,
	TP_PROTO(const struct fsi_master_gpio *master, int bits, uint64_t msg),
	TP_ARGS(master, bits, msg),
	TP_STRUCT__entry(
		__field(int,	master_idx)
		__field(int,	bits)
		__field(uint64_t, msg)
	),
	TP_fast_assign(
		__entry->master_idx = master->master.idx;
		__entry->bits = bits;
		__entry->msg  = msg & ((1ull<<bits) - 1);
	),
	TP_printk("fsi-gpio%d <= %0*llx[%d]",
		__entry->master_idx,
		(__entry->bits + 3) / 4,
		__entry->msg,
		__entry->bits
	)
);

TRACE_EVENT(fsi_master_gpio_break,
	TP_PROTO(const struct fsi_master_gpio *master),
	TP_ARGS(master),
	TP_STRUCT__entry(
		__field(int,	master_idx)
	),
	TP_fast_assign(
		__entry->master_idx = master->master.idx;
	),
	TP_printk("fsi-gpio%d ----break---",
		__entry->master_idx
	)
);

#endif /* _TRACE_FSI_MASTER_GPIO_H */

#include <trace/define_trace.h>