Linux Input/HID development
 help / color / mirror / Atom feed
* Re: [PATCH 1/7] Input: libps2 - attach ps2dev instances as serio port's drvdata
From: Raul E Rangel @ 2023-05-18 17:20 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <20230511185252.386941-2-dmitry.torokhov@gmail.com>

On Thu, May 11, 2023 at 11:52:41AM -0700, Dmitry Torokhov wrote:
> In preparation of having unified interrupt handler for PS/2 devices,
> instead of attaching instances of psmouse and atkbd structures as serio's
> driver data, switch to attaching ps2dev instances.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>  drivers/input/keyboard/atkbd.c     | 23 +++++++++++++-------
>  drivers/input/mouse/psmouse-base.c | 35 +++++++++++++++++-------------
>  drivers/input/mouse/psmouse.h      |  2 ++
>  drivers/input/mouse/synaptics.c    | 10 ++++-----
>  drivers/input/mouse/trackpoint.c   |  2 +-
>  drivers/input/serio/libps2.c       |  1 +
>  6 files changed, 44 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
> index 246958795f60..2fb2ad73e796 100644
> --- a/drivers/input/keyboard/atkbd.c
> +++ b/drivers/input/keyboard/atkbd.c
> @@ -309,12 +309,19 @@ static ssize_t atkbd_show_function_row_physmap(struct atkbd *atkbd, char *buf)
>  	return vivaldi_function_row_physmap_show(&atkbd->vdata, buf);
>  }
>  
> +static struct atkbd *atkbd_from_serio(struct serio *serio)
> +{
> +	struct ps2dev *ps2dev = serio_get_drvdata(serio);
> +
> +	return container_of(ps2dev, struct atkbd, ps2dev);
> +}
> +
>  static umode_t atkbd_attr_is_visible(struct kobject *kobj,
>  				struct attribute *attr, int i)
>  {
>  	struct device *dev = kobj_to_dev(kobj);
>  	struct serio *serio = to_serio_port(dev);
> -	struct atkbd *atkbd = serio_get_drvdata(serio);
> +	struct atkbd *atkbd = atkbd_from_serio(serio);
>  
>  	if (attr == &atkbd_attr_function_row_physmap.attr &&
>  	    !atkbd->vdata.num_function_row_keys)
> @@ -399,7 +406,7 @@ static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code
>  static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
>  				   unsigned int flags)
>  {
> -	struct atkbd *atkbd = serio_get_drvdata(serio);
> +	struct atkbd *atkbd = atkbd_from_serio(serio);
>  	struct input_dev *dev = atkbd->dev;
>  	unsigned int code = data;
>  	int scroll = 0, hscroll = 0, click = -1;
> @@ -909,7 +916,7 @@ static int atkbd_reset_state(struct atkbd *atkbd)
>  
>  static void atkbd_cleanup(struct serio *serio)
>  {
> -	struct atkbd *atkbd = serio_get_drvdata(serio);
> +	struct atkbd *atkbd = atkbd_from_serio(serio);
>  
>  	atkbd_disable(atkbd);
>  	ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF);
> @@ -922,7 +929,7 @@ static void atkbd_cleanup(struct serio *serio)
>  
>  static void atkbd_disconnect(struct serio *serio)
>  {
> -	struct atkbd *atkbd = serio_get_drvdata(serio);
> +	struct atkbd *atkbd = atkbd_from_serio(serio);
>  
>  	atkbd_disable(atkbd);
>  
> @@ -1188,7 +1195,7 @@ static void atkbd_set_device_attrs(struct atkbd *atkbd)
>  
>  static void atkbd_parse_fwnode_data(struct serio *serio)
>  {
> -	struct atkbd *atkbd = serio_get_drvdata(serio);
> +	struct atkbd *atkbd = atkbd_from_serio(serio);
>  	struct device *dev = &serio->dev;
>  	int n;
>  
> @@ -1295,7 +1302,7 @@ static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
>  
>  static int atkbd_reconnect(struct serio *serio)
>  {
> -	struct atkbd *atkbd = serio_get_drvdata(serio);
> +	struct atkbd *atkbd = atkbd_from_serio(serio);
>  	struct serio_driver *drv = serio->drv;
>  	int retval = -1;
>  
> @@ -1389,7 +1396,7 @@ static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
>  				ssize_t (*handler)(struct atkbd *, char *))
>  {
>  	struct serio *serio = to_serio_port(dev);
> -	struct atkbd *atkbd = serio_get_drvdata(serio);
> +	struct atkbd *atkbd = atkbd_from_serio(serio);
>  
>  	return handler(atkbd, buf);
>  }
> @@ -1398,7 +1405,7 @@ static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t
>  				ssize_t (*handler)(struct atkbd *, const char *, size_t))
>  {
>  	struct serio *serio = to_serio_port(dev);
> -	struct atkbd *atkbd = serio_get_drvdata(serio);
> +	struct atkbd *atkbd = atkbd_from_serio(serio);
>  	int retval;
>  
>  	retval = mutex_lock_interruptible(&atkbd->mutex);
> diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
> index c9a7e87b273e..ed5376099fba 100644
> --- a/drivers/input/mouse/psmouse-base.c
> +++ b/drivers/input/mouse/psmouse-base.c
> @@ -116,6 +116,13 @@ static DEFINE_MUTEX(psmouse_mutex);
>  
>  static struct workqueue_struct *kpsmoused_wq;
>  
> +struct psmouse *psmouse_from_serio(struct serio *serio)
> +{
> +	struct ps2dev *ps2dev = serio_get_drvdata(serio);
> +
> +	return container_of(ps2dev, struct psmouse, ps2dev);
> +}
> +
>  void psmouse_report_standard_buttons(struct input_dev *dev, u8 buttons)
>  {
>  	input_report_key(dev, BTN_LEFT,   buttons & BIT(0));
> @@ -336,7 +343,7 @@ static void psmouse_handle_oob_data(struct psmouse *psmouse, u8 data)
>  static irqreturn_t psmouse_interrupt(struct serio *serio,
>  				     u8 data, unsigned int flags)
>  {
> -	struct psmouse *psmouse = serio_get_drvdata(serio);
> +	struct psmouse *psmouse = psmouse_from_serio(serio);
>  
>  	if (psmouse->state == PSMOUSE_IGNORE)
>  		goto out;
> @@ -1344,7 +1351,7 @@ static void psmouse_resync(struct work_struct *work)
>  		goto out;
>  
>  	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
> -		parent = serio_get_drvdata(serio->parent);
> +		parent = psmouse_from_serio(serio->parent);
>  		psmouse_deactivate(parent);
>  	}
>  
> @@ -1428,13 +1435,13 @@ static void psmouse_resync(struct work_struct *work)
>   */
>  static void psmouse_cleanup(struct serio *serio)
>  {
> -	struct psmouse *psmouse = serio_get_drvdata(serio);
> +	struct psmouse *psmouse = psmouse_from_serio(serio);
>  	struct psmouse *parent = NULL;
>  
>  	mutex_lock(&psmouse_mutex);
>  
>  	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
> -		parent = serio_get_drvdata(serio->parent);
> +		parent = psmouse_from_serio(serio->parent);
>  		psmouse_deactivate(parent);
>  	}
>  
> @@ -1476,7 +1483,7 @@ static void psmouse_cleanup(struct serio *serio)
>   */
>  static void psmouse_disconnect(struct serio *serio)
>  {
> -	struct psmouse *psmouse = serio_get_drvdata(serio);
> +	struct psmouse *psmouse = psmouse_from_serio(serio);
>  	struct psmouse *parent = NULL;
>  
>  	mutex_lock(&psmouse_mutex);
> @@ -1489,7 +1496,7 @@ static void psmouse_disconnect(struct serio *serio)
>  	mutex_lock(&psmouse_mutex);
>  
>  	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
> -		parent = serio_get_drvdata(serio->parent);
> +		parent = psmouse_from_serio(serio->parent);
>  		psmouse_deactivate(parent);
>  	}
>  
> @@ -1588,7 +1595,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
>  	 * connected to this port can be successfully identified
>  	 */
>  	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
> -		parent = serio_get_drvdata(serio->parent);
> +		parent = psmouse_from_serio(serio->parent);
>  		psmouse_deactivate(parent);
>  	}
>  
> @@ -1604,8 +1611,6 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
>  
>  	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
>  
> -	serio_set_drvdata(serio, psmouse);
> -
>  	error = serio_open(serio, drv);
>  	if (error)
>  		goto err_clear_drvdata;
> @@ -1676,7 +1681,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
>  
>  static int __psmouse_reconnect(struct serio *serio, bool fast_reconnect)
>  {
> -	struct psmouse *psmouse = serio_get_drvdata(serio);
> +	struct psmouse *psmouse = psmouse_from_serio(serio);
>  	struct psmouse *parent = NULL;
>  	int (*reconnect_handler)(struct psmouse *);
>  	enum psmouse_type type;
> @@ -1695,7 +1700,7 @@ static int __psmouse_reconnect(struct serio *serio, bool fast_reconnect)
>  	}
>  
>  	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
> -		parent = serio_get_drvdata(serio->parent);
> +		parent = psmouse_from_serio(serio->parent);
>  		psmouse_deactivate(parent);
>  	}
>  
> @@ -1794,7 +1799,7 @@ ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *de
>  {
>  	struct serio *serio = to_serio_port(dev);
>  	struct psmouse_attribute *attr = to_psmouse_attr(devattr);
> -	struct psmouse *psmouse = serio_get_drvdata(serio);
> +	struct psmouse *psmouse = psmouse_from_serio(serio);
>  
>  	if (psmouse->protocol->smbus_companion &&
>  			devattr != &psmouse_attr_protocol.dattr)
> @@ -1815,7 +1820,7 @@ ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *dev
>  	if (retval)
>  		goto out;
>  
> -	psmouse = serio_get_drvdata(serio);
> +	psmouse = psmouse_from_serio(serio);
>  
>  	if (psmouse->protocol->smbus_companion &&
>  			devattr != &psmouse_attr_protocol.dattr) {
> @@ -1830,7 +1835,7 @@ ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *dev
>  		}
>  
>  		if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
> -			parent = serio_get_drvdata(serio->parent);
> +			parent = psmouse_from_serio(serio->parent);
>  			psmouse_deactivate(parent);
>  		}
>  
> @@ -1925,7 +1930,7 @@ static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, void *data, co
>  	}
>  
>  	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
> -		parent = serio_get_drvdata(serio->parent);
> +		parent = psmouse_from_serio(serio->parent);
>  		if (parent->pt_deactivate)
>  			parent->pt_deactivate(parent);
>  	}
> diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
> index 64c3a5d3fb3e..4d8acfe0d82a 100644
> --- a/drivers/input/mouse/psmouse.h
> +++ b/drivers/input/mouse/psmouse.h
> @@ -130,6 +130,8 @@ struct psmouse {
>  	void (*pt_deactivate)(struct psmouse *psmouse);
>  };
>  
> +struct psmouse *psmouse_from_serio(struct serio *serio);
> +
>  void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
>  		unsigned long delay);
>  int psmouse_reset(struct psmouse *psmouse);
> diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
> index fa021af8506e..ada299ec5bba 100644
> --- a/drivers/input/mouse/synaptics.c
> +++ b/drivers/input/mouse/synaptics.c
> @@ -628,7 +628,7 @@ static void synaptics_set_rate(struct psmouse *psmouse, unsigned int rate)
>   ****************************************************************************/
>  static int synaptics_pt_write(struct serio *serio, u8 c)
>  {
> -	struct psmouse *parent = serio_get_drvdata(serio->parent);
> +	struct psmouse *parent = psmouse_from_serio(serio->parent);
>  	u8 rate_param = SYN_PS_CLIENT_CMD; /* indicates that we want pass-through port */
>  	int error;
>  
> @@ -645,7 +645,7 @@ static int synaptics_pt_write(struct serio *serio, u8 c)
>  
>  static int synaptics_pt_start(struct serio *serio)
>  {
> -	struct psmouse *parent = serio_get_drvdata(serio->parent);
> +	struct psmouse *parent = psmouse_from_serio(serio->parent);
>  	struct synaptics_data *priv = parent->private;
>  
>  	serio_pause_rx(parent->ps2dev.serio);
> @@ -657,7 +657,7 @@ static int synaptics_pt_start(struct serio *serio)
>  
>  static void synaptics_pt_stop(struct serio *serio)
>  {
> -	struct psmouse *parent = serio_get_drvdata(serio->parent);
> +	struct psmouse *parent = psmouse_from_serio(serio->parent);
>  	struct synaptics_data *priv = parent->private;
>  
>  	serio_pause_rx(parent->ps2dev.serio);
> @@ -672,7 +672,7 @@ static int synaptics_is_pt_packet(u8 *buf)
>  
>  static void synaptics_pass_pt_packet(struct serio *ptport, u8 *packet)
>  {
> -	struct psmouse *child = serio_get_drvdata(ptport);
> +	struct psmouse *child = psmouse_from_serio(ptport);
>  
>  	if (child && child->state == PSMOUSE_ACTIVATED) {
>  		serio_interrupt(ptport, packet[1], 0);
> @@ -688,7 +688,7 @@ static void synaptics_pass_pt_packet(struct serio *ptport, u8 *packet)
>  static void synaptics_pt_activate(struct psmouse *psmouse)
>  {
>  	struct synaptics_data *priv = psmouse->private;
> -	struct psmouse *child = serio_get_drvdata(priv->pt_port);
> +	struct psmouse *child = psmouse_from_serio(priv->pt_port);
>  
>  	/* adjust the touchpad to child's choice of protocol */
>  	if (child) {
> diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpoint.c
> index 4a86b3e31d3b..5f6643b69a2c 100644
> --- a/drivers/input/mouse/trackpoint.c
> +++ b/drivers/input/mouse/trackpoint.c
> @@ -216,7 +216,7 @@ static umode_t trackpoint_is_attr_visible(struct kobject *kobj,
>  {
>  	struct device *dev = kobj_to_dev(kobj);
>  	struct serio *serio = to_serio_port(dev);
> -	struct psmouse *psmouse = serio_get_drvdata(serio);
> +	struct psmouse *psmouse = psmouse_from_serio(serio);
>  
>  	return trackpoint_is_attr_available(psmouse, attr) ? attr->mode : 0;
>  }
> diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
> index 3e19344eda93..764990723847 100644
> --- a/drivers/input/serio/libps2.c
> +++ b/drivers/input/serio/libps2.c
> @@ -382,6 +382,7 @@ void ps2_init(struct ps2dev *ps2dev, struct serio *serio)
>  	lockdep_set_subclass(&ps2dev->cmd_mutex, serio->depth);
>  	init_waitqueue_head(&ps2dev->wait);
>  	ps2dev->serio = serio;
> +	serio_set_drvdata(serio, ps2dev);
>  }
>  EXPORT_SYMBOL(ps2_init);
>  
Reviewed-by: Raul Rangel <rrangel@chromium.org>

^ permalink raw reply

* Re: [PATCH 2/7] Input: libps2 - remove special handling of ACK for command byte
From: Raul E Rangel @ 2023-05-18 17:21 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <20230511185252.386941-3-dmitry.torokhov@gmail.com>

On Thu, May 11, 2023 at 11:52:42AM -0700, Dmitry Torokhov wrote:
> When getting unexpected data while waiting for an acknowledgement it does
> not matter what command phase is currently executed, and ps2_handle_ack()
> should indicate that no further processing is needed for the received data
> byte. Remove PS2_FLAG_ACK_CMD and associated handling.
> 
> Note that while it is possible to make ps2_handle_ack (and
> ps2_handle_repsonse) return void, it will be done when the code will be
> converted to common PS/2 interrupt handler later.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>  drivers/input/serio/libps2.c | 9 ++-------
>  include/linux/libps2.h       | 1 -
>  2 files changed, 2 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
> index 764990723847..399cda0d34f5 100644
> --- a/drivers/input/serio/libps2.c
> +++ b/drivers/input/serio/libps2.c
> @@ -253,9 +253,6 @@ int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
>  		for (i = 0; i < receive; i++)
>  			ps2dev->cmdbuf[(receive - 1) - i] = param[i];
>  
> -	/* Signal that we are sending the command byte */
> -	ps2dev->flags |= PS2_FLAG_ACK_CMD;
> -
>  	/*
>  	 * Some devices (Synaptics) peform the reset before
>  	 * ACKing the reset command, and so it can take a long
> @@ -267,9 +264,7 @@ int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
>  	if (rc)
>  		goto out_reset_flags;
>  
> -	/* Now we are sending command parameters, if any */
> -	ps2dev->flags &= ~PS2_FLAG_ACK_CMD;
> -
> +	/* Send command parameters, if any. */
>  	for (i = 0; i < send; i++) {
>  		rc = ps2_do_sendbyte(ps2dev, param[i], 200, 2);
>  		if (rc)
> @@ -436,7 +431,7 @@ bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
>  		 */
>  		dev_dbg(&ps2dev->serio->dev, "unexpected %#02x\n", data);
>  		ps2dev->flags &= ~PS2_FLAG_WAITID;
> -		return ps2dev->flags & PS2_FLAG_ACK_CMD;
> +		return true;
>  	}
>  
>  	if (!ps2dev->nak) {
> diff --git a/include/linux/libps2.h b/include/linux/libps2.h
> index 53f7e4d0f4b7..193dd53ad18b 100644
> --- a/include/linux/libps2.h
> +++ b/include/linux/libps2.h
> @@ -28,7 +28,6 @@
>  #define PS2_FLAG_CMD1		BIT(2)	/* Waiting for the first byte of command response */
>  #define PS2_FLAG_WAITID		BIT(3)	/* Command executing is GET ID */
>  #define PS2_FLAG_NAK		BIT(4)	/* Last transmission was NAKed */
> -#define PS2_FLAG_ACK_CMD	BIT(5)	/* Waiting to ACK the command (first) byte */
>  
>  struct ps2dev {
>  	struct serio *serio;
Reviewed-by: Raul E Rangel <rrangel@chromium.org>

^ permalink raw reply

* Re: [PATCH 3/7] Input: libps2 - rework handling of command response
From: Raul E Rangel @ 2023-05-18 17:21 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <20230511185252.386941-4-dmitry.torokhov@gmail.com>

On Thu, May 11, 2023 at 11:52:43AM -0700, Dmitry Torokhov wrote:
> It is not entirely correct that libps2 sets PS2_FLAG_CMD1 after
> the device acknowledges each byte sent to the device by the host.
> Rework the code so that PS2_FLAG_CMD1 and PS2_FLAG_CMD are set only once,
> at the beginning of PS/2 command execution.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>  drivers/input/serio/libps2.c | 18 ++++++++++--------
>  1 file changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
> index 399cda0d34f5..d09450eca9a7 100644
> --- a/drivers/input/serio/libps2.c
> +++ b/drivers/input/serio/libps2.c
> @@ -247,14 +247,19 @@ int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
>  
>  	serio_pause_rx(ps2dev->serio);
>  
> +	/* Some mice do not ACK the "get ID" command, prepare to handle this. */
>  	ps2dev->flags = command == PS2_CMD_GETID ? PS2_FLAG_WAITID : 0;
>  	ps2dev->cmdcnt = receive;
> -	if (receive && param)
> -		for (i = 0; i < receive; i++)
> -			ps2dev->cmdbuf[(receive - 1) - i] = param[i];
> +	if (receive) {
> +		/* Indicate that we expect response to the command. */
> +		ps2dev->flags |= PS2_FLAG_CMD | PS2_FLAG_CMD1;
> +		if (param)
> +			for (i = 0; i < receive; i++)
> +				ps2dev->cmdbuf[(receive - 1) - i] = param[i];
> +	}
>  
>  	/*
> -	 * Some devices (Synaptics) peform the reset before
> +	 * Some devices (Synaptics) perform the reset before
>  	 * ACKing the reset command, and so it can take a long
>  	 * time before the ACK arrives.
>  	 */
> @@ -434,11 +439,8 @@ bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
>  		return true;
>  	}
>  
> -	if (!ps2dev->nak) {
> +	if (!ps2dev->nak)
>  		ps2dev->flags &= ~PS2_FLAG_NAK;
> -		if (ps2dev->cmdcnt)
> -			ps2dev->flags |= PS2_FLAG_CMD | PS2_FLAG_CMD1;
> -	}
>  
>  	ps2dev->flags &= ~PS2_FLAG_ACK;
>  	wake_up(&ps2dev->wait);
Reviewed-by: Raul E Rangel <rrangel@chromium.org>

^ permalink raw reply

* Re: [PATCH 4/7] Input: libps2 - fix NAK handling
From: Raul E Rangel @ 2023-05-18 17:22 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <20230511185252.386941-5-dmitry.torokhov@gmail.com>

On Thu, May 11, 2023 at 11:52:44AM -0700, Dmitry Torokhov wrote:
> Do not try to process "resend" or "reject" responses from the device
> as normal response data for a command.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>  drivers/input/serio/libps2.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
> index d09450eca9a7..14b70a78875d 100644
> --- a/drivers/input/serio/libps2.c
> +++ b/drivers/input/serio/libps2.c
> @@ -445,7 +445,7 @@ bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
>  	ps2dev->flags &= ~PS2_FLAG_ACK;
>  	wake_up(&ps2dev->wait);
>  
> -	if (data != PS2_RET_ACK)
> +	if (!ps2dev->nak && data != PS2_RET_ACK)
>  		ps2_handle_response(ps2dev, data);
>  
>  	return true;
Reviewed-by: Raul E Rangel <rrangel@chromium.org>

^ permalink raw reply

* Re: [PATCH 5/7] Input: libps2 - fix aborting PS/2 commands
From: Raul E Rangel @ 2023-05-18 17:22 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <20230511185252.386941-6-dmitry.torokhov@gmail.com>

On Thu, May 11, 2023 at 11:52:45AM -0700, Dmitry Torokhov wrote:
> When aborting PS/2 command the kernel should [re]set all flags before
> waking up waiters, otherwise waiting thread may read obsolete values
> of flags.
> 
> Reported-by: Raul Rangel <rrangel@chromium.org>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>  drivers/input/serio/libps2.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
> index 14b70a78875d..09eb605364bb 100644
> --- a/drivers/input/serio/libps2.c
> +++ b/drivers/input/serio/libps2.c
> @@ -478,15 +478,22 @@ bool ps2_handle_response(struct ps2dev *ps2dev, u8 data)
>  }
>  EXPORT_SYMBOL(ps2_handle_response);
>  
> +/*
> + * Clears state of PS/2 device after communication error by resetting majority
> + * of flags and waking up waiters, if any.
> + */
>  void ps2_cmd_aborted(struct ps2dev *ps2dev)
>  {
> -	if (ps2dev->flags & PS2_FLAG_ACK)
> +	unsigned long old_flags = ps2dev->flags;
> +
> +	/* reset all flags except last nak */
> +	ps2dev->flags &= PS2_FLAG_NAK;
> +
> +	if (old_flags & PS2_FLAG_ACK)
>  		ps2dev->nak = 1;
>  
> -	if (ps2dev->flags & (PS2_FLAG_ACK | PS2_FLAG_CMD))
> +	if (old_flags & (PS2_FLAG_ACK | PS2_FLAG_CMD))
>  		wake_up(&ps2dev->wait);
>  
> -	/* reset all flags except last nack */
> -	ps2dev->flags &= PS2_FLAG_NAK;
>  }
>  EXPORT_SYMBOL(ps2_cmd_aborted);
Reviewed-by: Raul E Rangel <rrangel@chromium.org>

^ permalink raw reply

* Re: [PATCH 6/7] Input: libps2 - introduce common interrupt handler
From: Raul E Rangel @ 2023-05-18 17:22 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <20230511185252.386941-7-dmitry.torokhov@gmail.com>

On Thu, May 11, 2023 at 11:52:46AM -0700, Dmitry Torokhov wrote:
> Instead of exposing inner workings of libps2 to drivers such as atkbd and
> psmouse, have them define pre-receive and receive callbacks, and provide a
> common handler that can be used with underlying serio port.
> 
> While at this add kerneldoc to the module.
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>  drivers/input/keyboard/atkbd.c     |  73 +++++-----
>  drivers/input/mouse/psmouse-base.c |  53 +++----
>  drivers/input/serio/libps2.c       | 226 ++++++++++++++++++++---------
>  include/linux/libps2.h             |  61 +++++---
>  4 files changed, 259 insertions(+), 154 deletions(-)
> 
> diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
> index 2fb2ad73e796..8ef663a589b3 100644
> --- a/drivers/input/keyboard/atkbd.c
> +++ b/drivers/input/keyboard/atkbd.c
> @@ -398,47 +398,49 @@ static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code
>  	return code;
>  }
>  
> -/*
> - * atkbd_interrupt(). Here takes place processing of data received from
> - * the keyboard into events.
> - */
> -
> -static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
> -				   unsigned int flags)
> +static enum ps2_disposition atkbd_pre_receive_byte(struct ps2dev *ps2dev,
> +						   u8 data, unsigned int flags)
>  {
> -	struct atkbd *atkbd = atkbd_from_serio(serio);
> -	struct input_dev *dev = atkbd->dev;
> -	unsigned int code = data;
> -	int scroll = 0, hscroll = 0, click = -1;
> -	int value;
> -	unsigned short keycode;
> +	struct serio *serio = ps2dev->serio;
>  
>  	dev_dbg(&serio->dev, "Received %02x flags %02x\n", data, flags);
>  
>  #if !defined(__i386__) && !defined (__x86_64__)
> -	if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {
> -		dev_warn(&serio->dev, "Frame/parity error: %02x\n", flags);
> -		serio_write(serio, ATKBD_CMD_RESEND);
> -		atkbd->resend = true;
> -		goto out;
> +	if ((flags & (SERIO_FRAME | SERIO_PARITY)) &&
> +	    (~flags & SERIO_TIMEOUT)) {
> +		struct atkbd *atkbd = container_of(ps2dev, struct atkbd,
> +						   ps2dev);
> +
> +		if (!atkbd->resend && atkbd->write) {
> +			dev_warn(&serio->dev,
> +				 "Frame/parity error: %02x\n", flags);
> +			serio_write(serio, ATKBD_CMD_RESEND);
> +			atkbd->resend = true;
> +			return PS2_IGNORE;
> +		}
>  	}
>  
>  	if (!flags && data == ATKBD_RET_ACK)
>  		atkbd->resend = false;
>  #endif
>  
> -	if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))
> -		if  (ps2_handle_ack(&atkbd->ps2dev, data))
> -			goto out;
> +	return PS2_PROCESS;
> +}
>  
> -	if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))
> -		if  (ps2_handle_response(&atkbd->ps2dev, data))
> -			goto out;
> +static void atkbd_receive_byte(struct ps2dev *ps2dev, u8 data)
> +{
> +	struct serio *serio = ps2dev->serio;
> +	struct atkbd *atkbd = container_of(ps2dev, struct atkbd, ps2dev);
> +	struct input_dev *dev = atkbd->dev;
> +	unsigned int code = data;
> +	int scroll = 0, hscroll = 0, click = -1;
> +	int value;
> +	unsigned short keycode;
>  
>  	pm_wakeup_event(&serio->dev, 0);
>  
>  	if (!atkbd->enabled)
> -		goto out;
> +		return;
>  
>  	input_event(dev, EV_MSC, MSC_RAW, code);
>  
> @@ -460,16 +462,16 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
>  	case ATKBD_RET_BAT:
>  		atkbd->enabled = false;
>  		serio_reconnect(atkbd->ps2dev.serio);
> -		goto out;
> +		return;
>  	case ATKBD_RET_EMUL0:
>  		atkbd->emul = 1;
> -		goto out;
> +		return;
>  	case ATKBD_RET_EMUL1:
>  		atkbd->emul = 2;
> -		goto out;
> +		return;
>  	case ATKBD_RET_RELEASE:
>  		atkbd->release = true;
> -		goto out;
> +		return;
>  	case ATKBD_RET_ACK:
>  	case ATKBD_RET_NAK:
>  		if (printk_ratelimit())
> @@ -477,18 +479,18 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
>  				 "Spurious %s on %s. "
>  				 "Some program might be trying to access hardware directly.\n",
>  				 data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);
> -		goto out;
> +		return;
>  	case ATKBD_RET_ERR:
>  		atkbd->err_count++;
>  		dev_dbg(&serio->dev, "Keyboard on %s reports too many keys pressed.\n",
>  			serio->phys);
> -		goto out;
> +		return;
>  	}
>  
>  	code = atkbd_compat_scancode(atkbd, code);
>  
>  	if (atkbd->emul && --atkbd->emul)
> -		goto out;
> +		return;
>  
>  	keycode = atkbd->keycode[code];
>  
> @@ -564,8 +566,6 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
>  	}
>  
>  	atkbd->release = false;
> -out:
> -	return IRQ_HANDLED;
>  }
>  
>  static int atkbd_set_repeat_rate(struct atkbd *atkbd)
> @@ -1229,7 +1229,8 @@ static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
>  		goto fail1;
>  
>  	atkbd->dev = dev;
> -	ps2_init(&atkbd->ps2dev, serio);
> +	ps2_init(&atkbd->ps2dev, serio,
> +		 atkbd_pre_receive_byte, atkbd_receive_byte);
>  	INIT_DELAYED_WORK(&atkbd->event_work, atkbd_event_work);
>  	mutex_init(&atkbd->mutex);
>  
> @@ -1385,7 +1386,7 @@ static struct serio_driver atkbd_drv = {
>  	},
>  	.description	= DRIVER_DESC,
>  	.id_table	= atkbd_serio_ids,
> -	.interrupt	= atkbd_interrupt,
> +	.interrupt	= ps2_interrupt,
>  	.connect	= atkbd_connect,
>  	.reconnect	= atkbd_reconnect,
>  	.disconnect	= atkbd_disconnect,
> diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
> index ed5376099fba..a0aac76b1e41 100644
> --- a/drivers/input/mouse/psmouse-base.c
> +++ b/drivers/input/mouse/psmouse-base.c
> @@ -336,17 +336,14 @@ static void psmouse_handle_oob_data(struct psmouse *psmouse, u8 data)
>  	}
>  }
>  
> -/*
> - * psmouse_interrupt() handles incoming characters, either passing them
> - * for normal processing or gathering them as command response.
> - */
> -static irqreturn_t psmouse_interrupt(struct serio *serio,
> -				     u8 data, unsigned int flags)
> +static enum ps2_disposition psmouse_pre_receive_byte(struct ps2dev *ps2dev,
> +						     u8 data,
> +						     unsigned int flags)
>  {
> -	struct psmouse *psmouse = psmouse_from_serio(serio);
> +	struct psmouse *psmouse = container_of(ps2dev, struct psmouse, ps2dev);
>  
>  	if (psmouse->state == PSMOUSE_IGNORE)
> -		goto out;
> +		return PS2_IGNORE;
>  
>  	if (unlikely((flags & SERIO_TIMEOUT) ||
>  		     ((flags & SERIO_PARITY) &&
> @@ -357,27 +354,25 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
>  				     "bad data from KBC -%s%s\n",
>  				     flags & SERIO_TIMEOUT ? " timeout" : "",
>  				     flags & SERIO_PARITY ? " bad parity" : "");
> -		ps2_cmd_aborted(&psmouse->ps2dev);
> -		goto out;
> +		return PS2_ERROR;
>  	}
>  
>  	if (flags & SERIO_OOB_DATA) {
>  		psmouse_handle_oob_data(psmouse, data);
> -		goto out;
> +		return PS2_IGNORE;
>  	}
>  
> -	if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_ACK))
> -		if  (ps2_handle_ack(&psmouse->ps2dev, data))
> -			goto out;
> +	return PS2_PROCESS;
> +}
>  
> -	if (unlikely(psmouse->ps2dev.flags & PS2_FLAG_CMD))
> -		if  (ps2_handle_response(&psmouse->ps2dev, data))
> -			goto out;
> +static void psmouse_receive_byte(struct ps2dev *ps2dev, u8 data)
> +{
> +	struct psmouse *psmouse = container_of(ps2dev, struct psmouse, ps2dev);
>  
> -	pm_wakeup_event(&serio->dev, 0);
> +	pm_wakeup_event(&ps2dev->serio->dev, 0);
>  
>  	if (psmouse->state <= PSMOUSE_RESYNCING)
> -		goto out;
> +		return;
>  
>  	if (psmouse->state == PSMOUSE_ACTIVATED &&
>  	    psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) {
> @@ -386,7 +381,7 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
>  		psmouse->badbyte = psmouse->packet[0];
>  		__psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
>  		psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
> -		goto out;
> +		return;
>  	}
>  
>  	psmouse->packet[psmouse->pktcnt++] = data;
> @@ -395,21 +390,21 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
>  	if (unlikely(psmouse->packet[0] == PSMOUSE_RET_BAT && psmouse->pktcnt <= 2)) {
>  		if (psmouse->pktcnt == 1) {
>  			psmouse->last = jiffies;
> -			goto out;
> +			return;
>  		}
>  
>  		if (psmouse->packet[1] == PSMOUSE_RET_ID ||
>  		    (psmouse->protocol->type == PSMOUSE_HGPK &&
>  		     psmouse->packet[1] == PSMOUSE_RET_BAT)) {
>  			__psmouse_set_state(psmouse, PSMOUSE_IGNORE);
> -			serio_reconnect(serio);
> -			goto out;
> +			serio_reconnect(ps2dev->serio);
> +			return;
>  		}
>  
>  		/* Not a new device, try processing first byte normally */
>  		psmouse->pktcnt = 1;
>  		if (psmouse_handle_byte(psmouse))
> -			goto out;
> +			return;
>  
>  		psmouse->packet[psmouse->pktcnt++] = data;
>  	}
> @@ -424,14 +419,11 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
>  		psmouse->badbyte = psmouse->packet[0];
>  		__psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
>  		psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
> -		goto out;
> +		return;
>  	}
>  
>  	psmouse->last = jiffies;
>  	psmouse_handle_byte(psmouse);
> -
> - out:
> -	return IRQ_HANDLED;
>  }
>  
>  /*
> @@ -1604,7 +1596,8 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
>  	if (!psmouse || !input_dev)
>  		goto err_free;
>  
> -	ps2_init(&psmouse->ps2dev, serio);
> +	ps2_init(&psmouse->ps2dev, serio,
> +		 psmouse_pre_receive_byte, psmouse_receive_byte);
>  	INIT_DELAYED_WORK(&psmouse->resync_work, psmouse_resync);
>  	psmouse->dev = input_dev;
>  	snprintf(psmouse->phys, sizeof(psmouse->phys), "%s/input0", serio->phys);
> @@ -1786,7 +1779,7 @@ static struct serio_driver psmouse_drv = {
>  	},
>  	.description	= DRIVER_DESC,
>  	.id_table	= psmouse_serio_ids,
> -	.interrupt	= psmouse_interrupt,
> +	.interrupt	= ps2_interrupt,
>  	.connect	= psmouse_connect,
>  	.reconnect	= psmouse_reconnect,
>  	.fast_reconnect	= psmouse_fast_reconnect,
> diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
> index 09eb605364bb..7c5fc853072a 100644
> --- a/drivers/input/serio/libps2.c
> +++ b/drivers/input/serio/libps2.c
> @@ -19,9 +19,22 @@
>  
>  #define DRIVER_DESC	"PS/2 driver library"
>  
> -MODULE_AUTHOR("Dmitry Torokhov <dtor@mail.ru>");
> -MODULE_DESCRIPTION("PS/2 driver library");
> -MODULE_LICENSE("GPL");
> +#define PS2_CMD_SETSCALE11	0x00e6
> +#define PS2_CMD_SETRES		0x10e8
> +#define PS2_CMD_GETID		0x02f2
> +#define PS2_CMD_RESET_BAT	0x02ff
> +
> +#define PS2_RET_BAT		0xaa
> +#define PS2_RET_ID		0x00
> +#define PS2_RET_ACK		0xfa
> +#define PS2_RET_NAK		0xfe
> +#define PS2_RET_ERR		0xfc
> +
> +#define PS2_FLAG_ACK		BIT(0)	/* Waiting for ACK/NAK */
> +#define PS2_FLAG_CMD		BIT(1)	/* Waiting for a command to finish */
> +#define PS2_FLAG_CMD1		BIT(2)	/* Waiting for the first byte of command response */
> +#define PS2_FLAG_WAITID		BIT(3)	/* Command executing is GET ID */
> +#define PS2_FLAG_NAK		BIT(4)	/* Last transmission was NAKed */
>  
>  static int ps2_do_sendbyte(struct ps2dev *ps2dev, u8 byte,
>  			   unsigned int timeout, unsigned int max_attempts)
> @@ -76,14 +89,17 @@ static int ps2_do_sendbyte(struct ps2dev *ps2dev, u8 byte,
>  	return error;
>  }
>  
> -/*
> - * ps2_sendbyte() sends a byte to the device and waits for acknowledge.
> - * It doesn't handle retransmission, the caller is expected to handle
> +/**
> + * ps2_sendbyte - sends a byte to the device and wait for acknowledgement
> + * @ps2dev: a PS/2 device to send the data to
> + * @byte: data to be sent to the device
> + * @timeout: timeout for sending the data and receiving an acknowledge
> + *
> + * The function doesn't handle retransmission, the caller is expected to handle
>   * it when needed.
>   *
>   * ps2_sendbyte() can only be called from a process context.
>   */
> -
>  int ps2_sendbyte(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)
>  {
>  	int retval;
> @@ -99,6 +115,13 @@ int ps2_sendbyte(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)
>  }
>  EXPORT_SYMBOL(ps2_sendbyte);
>  
> +/**
> + * ps2_begin_command - mark beginning of execution of a complex command
> + * @ps2dev: a PS/2 device executing the command
> + *
> + * Serializes a complex/compound command. Once command is finished
> + * ps2_end_command() should be called.
> + */
>  void ps2_begin_command(struct ps2dev *ps2dev)
>  {
>  	struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
> @@ -107,6 +130,10 @@ void ps2_begin_command(struct ps2dev *ps2dev)
>  }
>  EXPORT_SYMBOL(ps2_begin_command);
>  
> +/**
> + * ps2_end_command - mark end of execution of a complex command
> + * @ps2dev: a PS/2 device executing the command
> + */
>  void ps2_end_command(struct ps2dev *ps2dev)
>  {
>  	struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
> @@ -115,11 +142,13 @@ void ps2_end_command(struct ps2dev *ps2dev)
>  }
>  EXPORT_SYMBOL(ps2_end_command);
>  
> -/*
> - * ps2_drain() waits for device to transmit requested number of bytes
> - * and discards them.
> +/**
> + * ps2_drain - waits for device to transmit requested number of bytes
> + * and discards them
> + * @ps2dev: the PS/2 device that should be drained
> + * @maxbytes: maximum number of bytes to be drained
> + * @timeout: time to drain the device
>   */
> -
>  void ps2_drain(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)
>  {
>  	if (maxbytes > sizeof(ps2dev->cmdbuf)) {
> @@ -142,11 +171,11 @@ void ps2_drain(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)
>  }
>  EXPORT_SYMBOL(ps2_drain);
>  
> -/*
> - * ps2_is_keyboard_id() checks received ID byte against the list of
> - * known keyboard IDs.
> +/**
> + * ps2_is_keyboard_id - checks received ID byte against the list of
> + *   known keyboard IDs
> + * @id_byte: data byte that should be checked
>   */
> -
>  bool ps2_is_keyboard_id(u8 id_byte)
>  {
>  	static const u8 keyboard_ids[] = {
> @@ -167,7 +196,6 @@ EXPORT_SYMBOL(ps2_is_keyboard_id);
>   * response and tries to reduce remaining timeout to speed up command
>   * completion.
>   */
> -
>  static int ps2_adjust_timeout(struct ps2dev *ps2dev,
>  			      unsigned int command, unsigned int timeout)
>  {
> @@ -217,13 +245,19 @@ static int ps2_adjust_timeout(struct ps2dev *ps2dev,
>  	return timeout;
>  }
>  
> -/*
> - * ps2_command() sends a command and its parameters to the mouse,
> - * then waits for the response and puts it in the param array.
> +/**
> + * __ps2_command - send a command to PS/2 device
> + * @ps2dev: the PS/2 device that should execute the command
> + * @param: a buffer containing parameters to be sent along with the command,
> + *   or place where the results of the command execution will be deposited,
> + *   or both
> + * @command: command word that encodes the command itself, as well as number of
> + *   additional parameter bytes that should be sent to the device and expected
> + *   length of the command response
>   *
> - * ps2_command() can only be called from a process context
> + * Not serialized. Callers should use ps2_begin_command() and ps2_end_command()
> + * to ensure proper serialization for complex commands.
>   */
> -
>  int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
>  {
>  	unsigned int timeout;
> @@ -327,6 +361,20 @@ int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
>  }
>  EXPORT_SYMBOL(__ps2_command);
>  
> +/**
> + * ps2_command - send a command to PS/2 device
> + * @ps2dev: the PS/2 device that should execute the command
> + * @param: a buffer containing parameters to be sent along with the command,
> + *   or place where the results of the command execution will be deposited,
> + *   or both
> + * @command: command word that encodes the command itself, as well as number of
> + *   additional parameter bytes that should be sent to the device and expected
> + *   length of the command response
> + *
> + * Note: ps2_command() serializes the command execution so that only one
> + * command can be executed at a time for either individual port or the entire
> + * 8042 controller.
> + */
>  int ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
>  {
>  	int rc;
> @@ -339,14 +387,16 @@ int ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
>  }
>  EXPORT_SYMBOL(ps2_command);
>  
> -/*
> - * ps2_sliced_command() sends an extended PS/2 command to the mouse
> - * using sliced syntax, understood by advanced devices, such as Logitech
> - * or Synaptics touchpads. The command is encoded as:
> +/**
> + * ps2_sliced_command - sends an extended PS/2 command to a mouse
> + * @ps2dev: the PS/2 device that should execute the command
> + * @command: command byte
> + *
> + * The command is sent using "sliced" syntax understood by advanced devices,
> + * such as Logitech or Synaptics touchpads. The command is encoded as:
>   * 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu
>   * is the command.
>   */
> -
>  int ps2_sliced_command(struct ps2dev *ps2dev, u8 command)
>  {
>  	int i;
> @@ -372,12 +422,22 @@ int ps2_sliced_command(struct ps2dev *ps2dev, u8 command)
>  }
>  EXPORT_SYMBOL(ps2_sliced_command);
>  
> -/*
> - * ps2_init() initializes ps2dev structure
> +/**
> + * ps2_init - initializes ps2dev structure
> + * @ps2dev: structure to be initialized
> + * @serio: serio port associated with the PS/2 device
> + * @pre_receive_handler: validation handler to check basic communication state
> + * @receive_handler: main protocol handler
> + *
> + * Prepares ps2dev structure for use in drivers for PS/2 devices.
>   */
> -
> -void ps2_init(struct ps2dev *ps2dev, struct serio *serio)
> +void ps2_init(struct ps2dev *ps2dev, struct serio *serio,
> +	      ps2_pre_receive_handler_t pre_receive_handler,
> +	      ps2_receive_handler_t receive_handler)
>  {
> +	ps2dev->pre_receive_handler = pre_receive_handler;
> +	ps2dev->receive_handler = receive_handler;
> +
>  	mutex_init(&ps2dev->cmd_mutex);
>  	lockdep_set_subclass(&ps2dev->cmd_mutex, serio->depth);
>  	init_waitqueue_head(&ps2dev->wait);
> @@ -387,11 +447,35 @@ void ps2_init(struct ps2dev *ps2dev, struct serio *serio)
>  EXPORT_SYMBOL(ps2_init);
>  
>  /*
> - * ps2_handle_ack() is supposed to be used in interrupt handler
> - * to properly process ACK/NAK of a command from a PS/2 device.
> + * ps2_handle_response() stores device's response to a command and notifies
> + * the process waiting for completion of the command. Note that there is a
> + * distinction between waiting for the first byte of the response, and
> + * waiting for subsequent bytes. It is done so that callers could shorten
> + * timeouts once first byte of response is received.
>   */
> +static void ps2_handle_response(struct ps2dev *ps2dev, u8 data)
> +{
> +	if (ps2dev->cmdcnt)
> +		ps2dev->cmdbuf[--ps2dev->cmdcnt] = data;
>  
> -bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
> +	if (ps2dev->flags & PS2_FLAG_CMD1) {
> +		ps2dev->flags &= ~PS2_FLAG_CMD1;
> +		if (ps2dev->cmdcnt)
> +			wake_up(&ps2dev->wait);
> +	}
> +
> +	if (!ps2dev->cmdcnt) {
> +		ps2dev->flags &= ~PS2_FLAG_CMD;
> +		wake_up(&ps2dev->wait);
> +	}
> +}
> +
> +/*
> + * ps2_handle_ack() processes ACK/NAK of a command from a PS/2 device,
> + * possibly applying workarounds for mice not acknowledging the "get ID"
> + * command.
> + */
> +static void ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
>  {
>  	switch (data) {
>  	case PS2_RET_ACK:
> @@ -436,53 +520,25 @@ bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
>  		 */
>  		dev_dbg(&ps2dev->serio->dev, "unexpected %#02x\n", data);
>  		ps2dev->flags &= ~PS2_FLAG_WAITID;
> -		return true;
> +		return;
>  	}
>  
>  	if (!ps2dev->nak)
>  		ps2dev->flags &= ~PS2_FLAG_NAK;
>  
>  	ps2dev->flags &= ~PS2_FLAG_ACK;
> -	wake_up(&ps2dev->wait);
>  
>  	if (!ps2dev->nak && data != PS2_RET_ACK)
>  		ps2_handle_response(ps2dev, data);
> -
> -	return true;
> -}
> -EXPORT_SYMBOL(ps2_handle_ack);
> -
> -/*
> - * ps2_handle_response() is supposed to be used in interrupt handler
> - * to properly store device's response to a command and notify process
> - * waiting for completion of the command.
> - */
> -
> -bool ps2_handle_response(struct ps2dev *ps2dev, u8 data)
> -{
> -	if (ps2dev->cmdcnt)
> -		ps2dev->cmdbuf[--ps2dev->cmdcnt] = data;
> -
> -	if (ps2dev->flags & PS2_FLAG_CMD1) {
> -		ps2dev->flags &= ~PS2_FLAG_CMD1;
> -		if (ps2dev->cmdcnt)
> -			wake_up(&ps2dev->wait);
> -	}
> -
> -	if (!ps2dev->cmdcnt) {
> -		ps2dev->flags &= ~PS2_FLAG_CMD;
> +	else
>  		wake_up(&ps2dev->wait);
> -	}
> -
> -	return true;
>  }
> -EXPORT_SYMBOL(ps2_handle_response);
>  
>  /*
>   * Clears state of PS/2 device after communication error by resetting majority
>   * of flags and waking up waiters, if any.
>   */
> -void ps2_cmd_aborted(struct ps2dev *ps2dev)
> +static void ps2_cleanup(struct ps2dev *ps2dev)
>  {
>  	unsigned long old_flags = ps2dev->flags;
>  
> @@ -494,6 +550,46 @@ void ps2_cmd_aborted(struct ps2dev *ps2dev)
>  
>  	if (old_flags & (PS2_FLAG_ACK | PS2_FLAG_CMD))
>  		wake_up(&ps2dev->wait);
> +}
>  
> +/**
> + * ps2_interrupt - common interrupt handler for PS/2 devices
> + * @serio: serio port for the device
> + * @data: a data byte received from the device
> + * @flags: flags such as %SERIO_PARITY or %SERIO_TIMEOUT indicating state of
> + *   the data transfer
> + *
> + * ps2_interrupt() invokes pre-receive handler, optionally handles command
> + * acknowledgement and response from the device, and finally passes the data
> + * to the main protocol handler for future processing.
> + */
> +irqreturn_t ps2_interrupt(struct serio *serio, u8 data, unsigned int flags) {
> +	struct ps2dev *ps2dev = serio_get_drvdata(serio);
> +	enum ps2_disposition rc;
> +
> +	rc = ps2dev->pre_receive_handler(ps2dev, data, flags);
> +	switch (rc) {
> +	case PS2_ERROR:
> +		ps2_cleanup(ps2dev);
> +		break;
> +
> +	case PS2_IGNORE:
> +		break;
> +
> +	case PS2_PROCESS:
> +		if (ps2dev->flags & PS2_FLAG_ACK)
> +			ps2_handle_ack(ps2dev, data);
> +		else if (ps2dev->flags & PS2_FLAG_CMD)
> +			ps2_handle_response(ps2dev, data);
> +		else
> +			ps2dev->receive_handler(ps2dev, data);
> +		break;
> +	}
> +
> +	return IRQ_HANDLED;
>  }
> -EXPORT_SYMBOL(ps2_cmd_aborted);
> +EXPORT_SYMBOL(ps2_interrupt);
> +
> +MODULE_AUTHOR("Dmitry Torokhov <dtor@mail.ru>");
> +MODULE_DESCRIPTION("PS/2 driver library");
> +MODULE_LICENSE("GPL");
> diff --git a/include/linux/libps2.h b/include/linux/libps2.h
> index 193dd53ad18b..9ca9ce4e6e64 100644
> --- a/include/linux/libps2.h
> +++ b/include/linux/libps2.h
> @@ -8,43 +8,59 @@
>   */
>  
>  #include <linux/bitops.h>
> +#include <linux/interrupt.h>
>  #include <linux/mutex.h>
>  #include <linux/types.h>
>  #include <linux/wait.h>
>  
> -#define PS2_CMD_SETSCALE11	0x00e6
> -#define PS2_CMD_SETRES		0x10e8
> -#define PS2_CMD_GETID		0x02f2
> -#define PS2_CMD_RESET_BAT	0x02ff
> +struct ps2dev;
>  
> -#define PS2_RET_BAT		0xaa
> -#define PS2_RET_ID		0x00
> -#define PS2_RET_ACK		0xfa
> -#define PS2_RET_NAK		0xfe
> -#define PS2_RET_ERR		0xfc
> +/**
> + * enum ps2_disposition - indicates how received byte should be handled
> + * @PS2_PROCESS: pass to the main protocol handler, process normally
> + * @PS2_IGNORE: skip the byte
> + * @PS2_ERROR: do not process the byte, abort command in progress
> + */
> +enum ps2_disposition {
> +	PS2_PROCESS,
> +	PS2_IGNORE,
> +	PS2_ERROR,
> +};
>  
> -#define PS2_FLAG_ACK		BIT(0)	/* Waiting for ACK/NAK */
> -#define PS2_FLAG_CMD		BIT(1)	/* Waiting for a command to finish */
> -#define PS2_FLAG_CMD1		BIT(2)	/* Waiting for the first byte of command response */
> -#define PS2_FLAG_WAITID		BIT(3)	/* Command executing is GET ID */
> -#define PS2_FLAG_NAK		BIT(4)	/* Last transmission was NAKed */
> +typedef enum ps2_disposition (*ps2_pre_receive_handler_t)(struct ps2dev *, u8,
> +							  unsigned int);
> +typedef void (*ps2_receive_handler_t)(struct ps2dev *, u8);
>  
> +/**
> + * struct ps2dev - represents a device using PS/2 protocol
> + * @serio: a serio port used by the PS/2 device
> + * @cmd_mutex: a mutex ensuring that only one command is executing at a time
> + * @wait: a waitqueue used to signal completion from the serio interrupt handler
> + * @flags: various internal flags indicating stages of PS/2 command execution
> + * @cmdbuf: buffer holding command response
> + * @cmdcnt: outstanding number of bytes of the command response
> + * @nak: a byte transmitted by the device when it refuses command
> + * @pre_receive_handler: checks communication errors and returns disposition
> + * (&enum ps2_disposition) of the received data byte
> + * @receive_handler: main handler of particular PS/2 protocol, such as keyboard
> + *   or mouse protocol
> + */
>  struct ps2dev {
>  	struct serio *serio;
> -
> -	/* Ensures that only one command is executing at a time */
>  	struct mutex cmd_mutex;
> -
> -	/* Used to signal completion from interrupt handler */
>  	wait_queue_head_t wait;
> -
>  	unsigned long flags;
>  	u8 cmdbuf[8];
>  	u8 cmdcnt;
>  	u8 nak;
> +
> +	ps2_pre_receive_handler_t pre_receive_handler;
> +	ps2_receive_handler_t receive_handler;
>  };
>  
> -void ps2_init(struct ps2dev *ps2dev, struct serio *serio);
> +void ps2_init(struct ps2dev *ps2dev, struct serio *serio,
> +	      ps2_pre_receive_handler_t pre_receive_handler,
> +	      ps2_receive_handler_t receive_handler);
>  int ps2_sendbyte(struct ps2dev *ps2dev, u8 byte, unsigned int timeout);
>  void ps2_drain(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout);
>  void ps2_begin_command(struct ps2dev *ps2dev);
> @@ -52,9 +68,8 @@ void ps2_end_command(struct ps2dev *ps2dev);
>  int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command);
>  int ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command);
>  int ps2_sliced_command(struct ps2dev *ps2dev, u8 command);
> -bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data);
> -bool ps2_handle_response(struct ps2dev *ps2dev, u8 data);
> -void ps2_cmd_aborted(struct ps2dev *ps2dev);
>  bool ps2_is_keyboard_id(u8 id);
>  
> +irqreturn_t ps2_interrupt(struct serio *serio, u8 data, unsigned int flags);
> +
>  #endif /* _LIBPS2_H */
Reviewed-by: Raul E Rangel <rrangel@chromium.org>

^ permalink raw reply

* Re: [PATCH 7/7] Input: libps2 - do not discard non-ack bytes when controlling LEDs
From: Raul E Rangel @ 2023-05-18 17:24 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <20230511185252.386941-8-dmitry.torokhov@gmail.com>

On Thu, May 11, 2023 at 11:52:47AM -0700, Dmitry Torokhov wrote:
> Upon receiving a PS/2 command the device and controller are supposed to
> stop sending normal data (scancodes or movement packets) and instead
> immediately start delivering ACK/NAK and command response. Unfortunately
> often EC has an output buffer which may contain latched data by the time
> the EC receives a command from the host. The kernel used to ignore such
> data, but that may cause "stuck" keys if the data dropped happens to be a
> break code or a part of a break code. This occasionally happens, for
> example, on Chromebooks when the kernel tries to toggle CapsLock LED on
> a keyboard while user releases Alt+Search keyboard shortcut.
> 
> Fix this by passing the first non-ACK byte to the normal handler for a
> handful of PS/2 commands that are expected to be used during normal device
> operation (as opposed to probe/configuration time).
> 
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>  drivers/input/serio/libps2.c | 36 ++++++++++++++++++++++++++++++++----
>  1 file changed, 32 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
> index 7c5fc853072a..6d78a1fe00c1 100644
> --- a/drivers/input/serio/libps2.c
> +++ b/drivers/input/serio/libps2.c
> @@ -21,7 +21,10 @@
>  
>  #define PS2_CMD_SETSCALE11	0x00e6
>  #define PS2_CMD_SETRES		0x10e8
> +#define PS2_CMD_EX_SETLEDS	0x20eb
> +#define PS2_CMD_SETLEDS		0x10ed
>  #define PS2_CMD_GETID		0x02f2
> +#define PS2_CMD_SETREP		0x10f3 /* Set repeat rate/set report rate */
>  #define PS2_CMD_RESET_BAT	0x02ff
>  
>  #define PS2_RET_BAT		0xaa
> @@ -35,6 +38,7 @@
>  #define PS2_FLAG_CMD1		BIT(2)	/* Waiting for the first byte of command response */
>  #define PS2_FLAG_WAITID		BIT(3)	/* Command executing is GET ID */
>  #define PS2_FLAG_NAK		BIT(4)	/* Last transmission was NAKed */
> +#define PS2_FLAG_PASS_NOACK	BIT(5)	/* Pass non-ACK byte to receive handler */
>  
>  static int ps2_do_sendbyte(struct ps2dev *ps2dev, u8 byte,
>  			   unsigned int timeout, unsigned int max_attempts)
> @@ -281,9 +285,28 @@ int __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)
>  
>  	serio_pause_rx(ps2dev->serio);
>  
> -	/* Some mice do not ACK the "get ID" command, prepare to handle this. */
> -	ps2dev->flags = command == PS2_CMD_GETID ? PS2_FLAG_WAITID : 0;
>  	ps2dev->cmdcnt = receive;
> +
> +	switch (command) {
> +	case PS2_CMD_GETID:
> +		/*
> +		 * Some mice do not ACK the "get ID" command, prepare to
> +		 * handle this.
> +		 */
> +		ps2dev->flags = PS2_FLAG_WAITID;
> +		break;
> +
> +	case PS2_CMD_SETLEDS:
> +	case PS2_CMD_EX_SETLEDS:
> +	case PS2_CMD_SETREP:
> +		ps2dev->flags = PS2_FLAG_PASS_NOACK;
> +		break;
> +
> +	default:
> +		ps2dev->flags = 0;
> +		break;
> +	}
> +
>  	if (receive) {
>  		/* Indicate that we expect response to the command. */
>  		ps2dev->flags |= PS2_FLAG_CMD | PS2_FLAG_CMD1;
> @@ -512,14 +535,19 @@ static void ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
>  		 * Do not signal errors if we get unexpected reply while
>  		 * waiting for an ACK to the initial (first) command byte:
>  		 * the device might not be quiesced yet and continue
> -		 * delivering data.
> +		 * delivering data. For certain commands (such as set leds and
> +		 * set repeat rate) that can be used during normal device
> +		 * operation, we even pass this data byte to the normal receive
> +		 * handler.
>  		 * Note that we reset PS2_FLAG_WAITID flag, so the workaround
>  		 * for mice not acknowledging the Get ID command only triggers
>  		 * on the 1st byte; if device spews data we really want to see
>  		 * a real ACK from it.
>  		 */
>  		dev_dbg(&ps2dev->serio->dev, "unexpected %#02x\n", data);
> -		ps2dev->flags &= ~PS2_FLAG_WAITID;
> +		if (ps2dev->flags & PS2_FLAG_PASS_NOACK)
> +			ps2dev->receive_handler(ps2dev, data);
> +		ps2dev->flags &= ~(PS2_FLAG_WAITID | PS2_FLAG_PASS_NOACK);
>  		return;
>  	}
>  

Great refactoring. It made this final patch super simple!

Reviewed-by: Raul E Rangel <rrangel@chromium.org>

^ permalink raw reply

* Re: [PATCH] Input: novatek-nvt-ts - fix input_register_device() failure error message
From: Peter Hutterer @ 2023-05-19  5:08 UTC (permalink / raw)
  To: Hans de Goede; +Cc: Dmitry Torokhov, linux-input
In-Reply-To: <20230513131712.259057-1-hdegoede@redhat.com>

On Sat, May 13, 2023 at 03:17:12PM +0200, Hans de Goede wrote:
> Fix input_register_device() failure logging "failed to request irq"
> as error message.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>

Cheers,
 Peter

> ---
>  drivers/input/touchscreen/novatek-nvt-ts.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/input/touchscreen/novatek-nvt-ts.c b/drivers/input/touchscreen/novatek-nvt-ts.c
> index 3e551f9d31d7..e7f30eeb91ca 100644
> --- a/drivers/input/touchscreen/novatek-nvt-ts.c
> +++ b/drivers/input/touchscreen/novatek-nvt-ts.c
> @@ -272,7 +272,7 @@ static int nvt_ts_probe(struct i2c_client *client)
>  
>  	error = input_register_device(input);
>  	if (error) {
> -		dev_err(dev, "failed to request irq: %d\n", error);
> +		dev_err(dev, "failed to register input device: %d\n", error);
>  		return error;
>  	}
>  
> -- 
> 2.40.1
> 

^ permalink raw reply

* [PATCH] HID: i2c-hid: goodix: Add ili9882t timing
From: Cong Yang @ 2023-05-19  9:01 UTC (permalink / raw)
  To: jikos, benjamin.tissoires, dianders, mka, dmitry.torokhov, hsinyi
  Cc: linux-input, linux-kernel, devicetree, Cong Yang

The ili9882t is a TDDI IC ((Touch with Display Driver)). It requires the
panel reset gpio to be high before i2c commands. Use a longer delay in
post_power_delay_ms to ensure the poweron sequence.

Signed-off-by: Cong Yang <yangcong5@huaqin.corp-partner.google.com>
---
 drivers/hid/i2c-hid/i2c-hid-of-goodix.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/hid/i2c-hid/i2c-hid-of-goodix.c b/drivers/hid/i2c-hid/i2c-hid-of-goodix.c
index 0060e3dcd775..c5870b683a26 100644
--- a/drivers/hid/i2c-hid/i2c-hid-of-goodix.c
+++ b/drivers/hid/i2c-hid/i2c-hid-of-goodix.c
@@ -101,8 +101,14 @@ static const struct goodix_i2c_hid_timing_data goodix_gt7375p_timing_data = {
 	.post_gpio_reset_delay_ms = 180,
 };
 
+static const struct goodix_i2c_hid_timing_data ilitek_ili9882t_timing_data = {
+	.post_power_delay_ms = 200,
+	.post_gpio_reset_delay_ms = 180,
+};
+
 static const struct of_device_id goodix_i2c_hid_of_match[] = {
 	{ .compatible = "goodix,gt7375p", .data = &goodix_gt7375p_timing_data },
+	{ .compatible = "ilitek,ili9882t", .data = &ilitek_ili9882t_timing_data },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, goodix_i2c_hid_of_match);
-- 
2.25.1


^ permalink raw reply related

* [dtor-input:next] BUILD SUCCESS f219050af06d83f436945880fc9c04db3bb2860f
From: kernel test robot @ 2023-05-19  9:25 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input

tree/branch: INFO setup_repo_specs: /db/releases/20230519164737/lkp-src/repo/*/dtor-input
https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
branch HEAD: f219050af06d83f436945880fc9c04db3bb2860f  Input: libps2 - do not discard non-ack bytes when controlling LEDs

elapsed time: 811m

configs tested: 237
configs skipped: 17

The following configs have been built successfully.
More configs may be tested in the coming days.

tested configs:
alpha                            allyesconfig   gcc  
alpha        buildonly-randconfig-r002-20230517   gcc  
alpha                               defconfig   gcc  
alpha                randconfig-r013-20230517   gcc  
alpha                randconfig-r014-20230517   gcc  
alpha                randconfig-r023-20230517   gcc  
arc                              allyesconfig   gcc  
arc          buildonly-randconfig-r006-20230517   gcc  
arc                                 defconfig   gcc  
arc                         haps_hs_defconfig   gcc  
arc                     haps_hs_smp_defconfig   gcc  
arc                  randconfig-r001-20230517   gcc  
arc                  randconfig-r004-20230517   gcc  
arc                  randconfig-r024-20230517   gcc  
arc                  randconfig-r032-20230517   gcc  
arc                  randconfig-r043-20230517   gcc  
arm                              allmodconfig   gcc  
arm                              allyesconfig   gcc  
arm                                 defconfig   gcc  
arm                            mps2_defconfig   gcc  
arm                            qcom_defconfig   gcc  
arm                  randconfig-r001-20230517   gcc  
arm                  randconfig-r006-20230517   gcc  
arm                  randconfig-r025-20230517   clang
arm                  randconfig-r034-20230517   gcc  
arm                  randconfig-r036-20230517   gcc  
arm                  randconfig-r046-20230517   clang
arm64                            allyesconfig   gcc  
arm64                               defconfig   gcc  
arm64                randconfig-r002-20230517   clang
arm64                randconfig-r006-20230517   clang
arm64                randconfig-r011-20230517   gcc  
arm64                randconfig-r014-20230517   gcc  
arm64                randconfig-r015-20230517   gcc  
arm64                randconfig-r023-20230517   gcc  
arm64                randconfig-r034-20230517   clang
csky         buildonly-randconfig-r001-20230519   gcc  
csky         buildonly-randconfig-r003-20230519   gcc  
csky         buildonly-randconfig-r005-20230517   gcc  
csky                                defconfig   gcc  
csky                 randconfig-r006-20230517   gcc  
csky                 randconfig-r024-20230517   gcc  
csky                 randconfig-r025-20230517   gcc  
hexagon      buildonly-randconfig-r006-20230517   clang
hexagon              randconfig-r012-20230517   clang
hexagon              randconfig-r016-20230517   clang
hexagon              randconfig-r022-20230517   clang
hexagon              randconfig-r035-20230517   clang
hexagon              randconfig-r041-20230517   clang
hexagon              randconfig-r045-20230517   clang
i386                             allyesconfig   gcc  
i386                              debian-10.3   gcc  
i386                                defconfig   gcc  
i386                          randconfig-a001   gcc  
i386                          randconfig-a002   clang
i386                          randconfig-a003   gcc  
i386                          randconfig-a004   clang
i386                          randconfig-a005   gcc  
i386                          randconfig-a006   clang
i386                          randconfig-a011   clang
i386                          randconfig-a012   gcc  
i386                          randconfig-a013   clang
i386                          randconfig-a014   gcc  
i386                          randconfig-a015   clang
i386                          randconfig-a016   gcc  
ia64                             allmodconfig   gcc  
ia64         buildonly-randconfig-r002-20230517   gcc  
ia64         buildonly-randconfig-r005-20230517   gcc  
ia64         buildonly-randconfig-r006-20230519   gcc  
ia64                                defconfig   gcc  
ia64                        generic_defconfig   gcc  
ia64                 randconfig-r005-20230517   gcc  
ia64                 randconfig-r011-20230517   gcc  
ia64                 randconfig-r013-20230517   gcc  
ia64                 randconfig-r023-20230517   gcc  
loongarch                        alldefconfig   gcc  
loongarch                        allmodconfig   gcc  
loongarch                         allnoconfig   gcc  
loongarch    buildonly-randconfig-r002-20230519   gcc  
loongarch    buildonly-randconfig-r005-20230517   gcc  
loongarch                           defconfig   gcc  
loongarch            randconfig-r001-20230517   gcc  
loongarch            randconfig-r002-20230517   gcc  
loongarch            randconfig-r003-20230517   gcc  
loongarch            randconfig-r021-20230517   gcc  
loongarch            randconfig-r033-20230517   gcc  
loongarch            randconfig-r035-20230517   gcc  
m68k                             allmodconfig   gcc  
m68k         buildonly-randconfig-r001-20230517   gcc  
m68k                                defconfig   gcc  
m68k                          multi_defconfig   gcc  
m68k                 randconfig-r014-20230517   gcc  
m68k                 randconfig-r022-20230517   gcc  
m68k                 randconfig-r023-20230517   gcc  
m68k                 randconfig-r024-20230517   gcc  
microblaze   buildonly-randconfig-r002-20230517   gcc  
microblaze   buildonly-randconfig-r003-20230517   gcc  
microblaze                          defconfig   gcc  
microblaze           randconfig-r003-20230517   gcc  
microblaze           randconfig-r021-20230517   gcc  
microblaze           randconfig-r031-20230517   gcc  
microblaze           randconfig-r033-20230517   gcc  
mips                             allmodconfig   gcc  
mips                             allyesconfig   gcc  
mips                         cobalt_defconfig   gcc  
mips                 randconfig-r003-20230517   gcc  
mips                 randconfig-r015-20230517   clang
mips                 randconfig-r025-20230517   clang
mips                 randconfig-r031-20230517   gcc  
mips                 randconfig-r032-20230517   gcc  
nios2        buildonly-randconfig-r002-20230517   gcc  
nios2        buildonly-randconfig-r003-20230517   gcc  
nios2                               defconfig   gcc  
nios2                randconfig-r003-20230517   gcc  
nios2                randconfig-r004-20230517   gcc  
nios2                randconfig-r015-20230517   gcc  
nios2                randconfig-r025-20230517   gcc  
openrisc     buildonly-randconfig-r005-20230519   gcc  
openrisc             randconfig-r004-20230517   gcc  
openrisc             randconfig-r011-20230517   gcc  
openrisc             randconfig-r012-20230517   gcc  
openrisc             randconfig-r013-20230517   gcc  
openrisc             randconfig-r024-20230517   gcc  
openrisc             randconfig-r025-20230517   gcc  
openrisc             randconfig-r026-20230517   gcc  
openrisc             randconfig-r035-20230517   gcc  
parisc                              defconfig   gcc  
parisc               randconfig-r002-20230517   gcc  
parisc               randconfig-r011-20230517   gcc  
parisc               randconfig-r026-20230517   gcc  
parisc               randconfig-r032-20230517   gcc  
parisc64                            defconfig   gcc  
powerpc                          allmodconfig   gcc  
powerpc                           allnoconfig   gcc  
powerpc      buildonly-randconfig-r003-20230517   gcc  
powerpc      buildonly-randconfig-r004-20230517   gcc  
powerpc                       eiger_defconfig   gcc  
powerpc                  iss476-smp_defconfig   gcc  
powerpc                      pcm030_defconfig   gcc  
powerpc                         ps3_defconfig   gcc  
powerpc              randconfig-r011-20230517   gcc  
powerpc              randconfig-r012-20230517   gcc  
powerpc              randconfig-r013-20230517   gcc  
powerpc              randconfig-r014-20230517   gcc  
powerpc              randconfig-r016-20230517   gcc  
powerpc              randconfig-r026-20230517   gcc  
powerpc                    sam440ep_defconfig   gcc  
riscv                            allmodconfig   gcc  
riscv                             allnoconfig   gcc  
riscv                               defconfig   gcc  
riscv                randconfig-r003-20230517   clang
riscv                randconfig-r005-20230517   clang
riscv                randconfig-r032-20230517   clang
riscv                randconfig-r042-20230517   gcc  
riscv                          rv32_defconfig   gcc  
s390                             allmodconfig   gcc  
s390                             allyesconfig   gcc  
s390         buildonly-randconfig-r001-20230517   gcc  
s390         buildonly-randconfig-r004-20230517   gcc  
s390                                defconfig   gcc  
s390                 randconfig-r004-20230517   clang
s390                 randconfig-r006-20230517   clang
s390                 randconfig-r016-20230517   gcc  
s390                 randconfig-r026-20230517   gcc  
s390                 randconfig-r031-20230517   clang
s390                 randconfig-r044-20230517   gcc  
sh                               allmodconfig   gcc  
sh           buildonly-randconfig-r006-20230517   gcc  
sh                         microdev_defconfig   gcc  
sh                   randconfig-r002-20230517   gcc  
sh                   randconfig-r005-20230517   gcc  
sh                   randconfig-r022-20230517   gcc  
sh                   randconfig-r023-20230517   gcc  
sh                   randconfig-r034-20230517   gcc  
sh                           se7722_defconfig   gcc  
sh                   secureedge5410_defconfig   gcc  
sh                     sh7710voipgw_defconfig   gcc  
sparc                             allnoconfig   gcc  
sparc                               defconfig   gcc  
sparc                randconfig-r001-20230517   gcc  
sparc                randconfig-r012-20230517   gcc  
sparc                randconfig-r016-20230517   gcc  
sparc                randconfig-r022-20230517   gcc  
sparc                randconfig-r024-20230517   gcc  
sparc                randconfig-r031-20230517   gcc  
sparc                       sparc32_defconfig   gcc  
sparc64      buildonly-randconfig-r001-20230517   gcc  
sparc64      buildonly-randconfig-r004-20230517   gcc  
sparc64      buildonly-randconfig-r004-20230519   gcc  
sparc64              randconfig-r012-20230517   gcc  
um                             i386_defconfig   gcc  
um                           x86_64_defconfig   gcc  
x86_64                            allnoconfig   gcc  
x86_64                           allyesconfig   gcc  
x86_64                              defconfig   gcc  
x86_64                                  kexec   gcc  
x86_64                        randconfig-a001   clang
x86_64                        randconfig-a002   gcc  
x86_64                        randconfig-a003   clang
x86_64                        randconfig-a004   gcc  
x86_64                        randconfig-a005   clang
x86_64                        randconfig-a006   gcc  
x86_64                        randconfig-a011   gcc  
x86_64                        randconfig-a012   clang
x86_64                        randconfig-a013   gcc  
x86_64                        randconfig-a014   clang
x86_64                        randconfig-a015   gcc  
x86_64                        randconfig-a016   clang
x86_64                        randconfig-k001   clang
x86_64                        randconfig-x051   gcc  
x86_64                        randconfig-x052   clang
x86_64                        randconfig-x053   gcc  
x86_64                        randconfig-x054   clang
x86_64                        randconfig-x055   gcc  
x86_64                        randconfig-x056   clang
x86_64                        randconfig-x061   gcc  
x86_64                        randconfig-x062   clang
x86_64                        randconfig-x063   gcc  
x86_64                        randconfig-x064   clang
x86_64                        randconfig-x065   gcc  
x86_64                        randconfig-x066   clang
x86_64                           rhel-8.3-bpf   gcc  
x86_64                          rhel-8.3-func   gcc  
x86_64                    rhel-8.3-kselftests   gcc  
x86_64                         rhel-8.3-kunit   gcc  
x86_64                           rhel-8.3-kvm   gcc  
x86_64                           rhel-8.3-ltp   gcc  
x86_64                           rhel-8.3-syz   gcc  
x86_64                               rhel-8.3   gcc  
xtensa       buildonly-randconfig-r003-20230517   gcc  
xtensa       buildonly-randconfig-r004-20230517   gcc  
xtensa               randconfig-r004-20230517   gcc  
xtensa               randconfig-r006-20230517   gcc  
xtensa               randconfig-r014-20230517   gcc  
xtensa               randconfig-r021-20230517   gcc  
xtensa               randconfig-r034-20230517   gcc  
xtensa               randconfig-r035-20230517   gcc  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

^ permalink raw reply

* Fwd: ThinkPad L540: suspend not working (deep / S3 / standby, regression Linux 4.19 -> 6.1)
From: Bagas Sanjaya @ 2023-05-19 13:19 UTC (permalink / raw)
  To: Linux Kernel Mailing List, Linux Regressions, Linux Input,
	Linux i2c Devices
  Cc: Jarkko Nikula, Wolfram Sang, Dmitry Torokhov, kolAflash

Hi,

I notice a regression report on Bugzilla [1]. Quoting from it:

> ThinkPad L540 failed suspend deep dmesg output - Linux-6.1.27 from Debian-12
> 
> Since updating from Linux-4.19 to Linux-6.1.27 suspend deep is not working anymore.
> (a.k.a. S3, standby or suspend to ram)
> 
> Notebook: ThinkPad L540 20AU-S00N00
> OS: Debian-12 "Bookworm" (was Debian-10 "Buster" before)
> Kernel: Linux-6.1.27 from Debian-12 (was Linux-4.19 from Debian-10 before)
> 
> Can I provide any other helpful information?
> Do you need a test with a vanilla Linux-6.1 kernel?
> Should I perform any other tests or maybe try out boot parameters?
> 
> Full dmesg output attached.
> Excerpt:
> rmi4_f01 rmi4-00.fn01: Failed to write sleep mode: -6.
> rmi4_f01 rmi4-00.fn01: Suspend failed with code -6.
> rmi4_physical rmi4-00: Failed to suspend functions: -6
> rmi4_smbus 0-002c: Failed to suspend device: -6
> rmi4_smbus 0-002c: PM: dpm_run_callback(): rmi_smb_suspend+0x0/0x40 [rmi_smbus] returns -6
> rmi4_smbus 0-002c: PM: failed to suspend async: error -6
> sd 4:0:0:0: [sda] Synchronizing SCSI cache
> sd 4:0:0:0: [sda] Stopping disk
> PM: Some devices failed to suspend, or early wake event detected
> sd 4:0:0:0: [sda] Starting disk
> OOM killer enabled.
> Restarting tasks ... 
> rmi4_physical rmi4-00: rmi_driver_set_irq_bits: Failed to change enabled interrupts!
> psmouse: probe of serio2 failed with error -1
> 
> 
> 
> Maybe related:
> 
> 5.17-rc regression: X1 Carbon touchpad not resumed
> https://lore.kernel.org/lkml/YgF%2F0QGFN4SppLKg@shikoro/T/

FYI, I guess the regression is also introduced by 172d931910e1db
("i2c: enable async suspend/resume on i2c client devices") and
should have been fixed by 7b1f781f2d2460 ("Input: psmouse - set up
dependency between PS/2 and SMBus companions"), but it doesn't
fix the reporter's issue.

Anyway, I'm adding this to regzbot:

#regzbot introduced: v4.19..v6.1 https://bugzilla.kernel.org/show_bug.cgi?id=217462
#regzbot title: psmouse suspend failed on ThinkPad L540

Thanks.

[1]: https://bugzilla.kernel.org/show_bug.cgi?id=217462

-- 
An old man doll... just what I always wanted! - Clara

^ permalink raw reply

* Re: Fwd: ThinkPad L540: suspend not working (deep / S3 / standby, regression Linux 4.19 -> 6.1)
From: Hans de Goede @ 2023-05-19 13:46 UTC (permalink / raw)
  To: Bagas Sanjaya, Linux Kernel Mailing List, Linux Regressions,
	Linux Input, Linux i2c Devices, Benjamin Tissoires
  Cc: Jarkko Nikula, Wolfram Sang, Dmitry Torokhov, kolAflash
In-Reply-To: <73883c7d-42db-7ac6-fa43-b9be45cdc795@gmail.com>

Hi All,

This looks like something for Benjamin Tissoires (who will
be available to look at this in 2 weeks or so) to look at.

Adding Benjamin to the Cc.

In the mean time passing psmouse.synaptics_intertouch=0 on the
kernel commandline should restore the old 4.19 kernel behavior
of simply using the touchpad in ps/2 mode.

Regards,

Hans



On 5/19/23 15:19, Bagas Sanjaya wrote:
> Hi,
> 
> I notice a regression report on Bugzilla [1]. Quoting from it:
> 
>> ThinkPad L540 failed suspend deep dmesg output - Linux-6.1.27 from Debian-12
>>
>> Since updating from Linux-4.19 to Linux-6.1.27 suspend deep is not working anymore.
>> (a.k.a. S3, standby or suspend to ram)
>>
>> Notebook: ThinkPad L540 20AU-S00N00
>> OS: Debian-12 "Bookworm" (was Debian-10 "Buster" before)
>> Kernel: Linux-6.1.27 from Debian-12 (was Linux-4.19 from Debian-10 before)
>>
>> Can I provide any other helpful information?
>> Do you need a test with a vanilla Linux-6.1 kernel?
>> Should I perform any other tests or maybe try out boot parameters?
>>
>> Full dmesg output attached.
>> Excerpt:
>> rmi4_f01 rmi4-00.fn01: Failed to write sleep mode: -6.
>> rmi4_f01 rmi4-00.fn01: Suspend failed with code -6.
>> rmi4_physical rmi4-00: Failed to suspend functions: -6
>> rmi4_smbus 0-002c: Failed to suspend device: -6
>> rmi4_smbus 0-002c: PM: dpm_run_callback(): rmi_smb_suspend+0x0/0x40 [rmi_smbus] returns -6
>> rmi4_smbus 0-002c: PM: failed to suspend async: error -6
>> sd 4:0:0:0: [sda] Synchronizing SCSI cache
>> sd 4:0:0:0: [sda] Stopping disk
>> PM: Some devices failed to suspend, or early wake event detected
>> sd 4:0:0:0: [sda] Starting disk
>> OOM killer enabled.
>> Restarting tasks ... 
>> rmi4_physical rmi4-00: rmi_driver_set_irq_bits: Failed to change enabled interrupts!
>> psmouse: probe of serio2 failed with error -1
>>
>>
>>
>> Maybe related:
>>
>> 5.17-rc regression: X1 Carbon touchpad not resumed
>> https://lore.kernel.org/lkml/YgF%2F0QGFN4SppLKg@shikoro/T/
> 
> FYI, I guess the regression is also introduced by 172d931910e1db
> ("i2c: enable async suspend/resume on i2c client devices") and
> should have been fixed by 7b1f781f2d2460 ("Input: psmouse - set up
> dependency between PS/2 and SMBus companions"), but it doesn't
> fix the reporter's issue.
> 
> Anyway, I'm adding this to regzbot:
> 
> #regzbot introduced: v4.19..v6.1 https://bugzilla.kernel.org/show_bug.cgi?id=217462
> #regzbot title: psmouse suspend failed on ThinkPad L540
> 
> Thanks.
> 
> [1]: https://bugzilla.kernel.org/show_bug.cgi?id=217462
> 


^ permalink raw reply

* Re: Fwd: ThinkPad L540: suspend not working (deep / S3 / standby, regression Linux 4.19 -> 6.1)
From: Bagas Sanjaya @ 2023-05-19 13:56 UTC (permalink / raw)
  To: Hans de Goede, Linux Kernel Mailing List, Linux Regressions,
	Linux Input, Linux i2c Devices, Benjamin Tissoires
  Cc: Jarkko Nikula, Wolfram Sang, Dmitry Torokhov, kolAflash
In-Reply-To: <2d7ee116-5985-021f-0dfb-b0485a465c86@redhat.com>

On 5/19/23 20:46, Hans de Goede wrote:
> Hi All,
> 
> This looks like something for Benjamin Tissoires (who will
> be available to look at this in 2 weeks or so) to look at.
> 
> Adding Benjamin to the Cc.
> 
> In the mean time passing psmouse.synaptics_intertouch=0 on the
> kernel commandline should restore the old 4.19 kernel behavior
> of simply using the touchpad in ps/2 mode.
> 

OK, thanks!

-- 
An old man doll... just what I always wanted! - Clara


^ permalink raw reply

* Re: [PATCH] HID: i2c-hid: goodix: Add ili9882t timing
From: Doug Anderson @ 2023-05-19 14:01 UTC (permalink / raw)
  To: Cong Yang
  Cc: jikos, benjamin.tissoires, mka, dmitry.torokhov, hsinyi,
	linux-input, linux-kernel, devicetree
In-Reply-To: <20230519090149.4407-1-yangcong5@huaqin.corp-partner.google.com>

Hi,

On Fri, May 19, 2023 at 2:02 AM Cong Yang
<yangcong5@huaqin.corp-partner.google.com> wrote:
>
> The ili9882t is a TDDI IC ((Touch with Display Driver)). It requires the
> panel reset gpio to be high before i2c commands. Use a longer delay in
> post_power_delay_ms to ensure the poweron sequence.
>
> Signed-off-by: Cong Yang <yangcong5@huaqin.corp-partner.google.com>
> ---
>  drivers/hid/i2c-hid/i2c-hid-of-goodix.c | 6 ++++++
>  1 file changed, 6 insertions(+)

Two comments:

1. You need to submit a bindings patch to document your
"ilitek,ili9882t" compatible string.

2. I would tend to add the support to the "i2c-hid-of-elan.c" driver
instead of the goodix one. Probably the drivers need to combined again
(I'll see if I can post a patch for that before too long), but if I
were picking one I'd pick the elan one, I think.

-Doug

^ permalink raw reply

* Re: [PATCH v4 0/2] Fix Goodix touchscreen power leakage for MT8186 boards
From: Doug Anderson @ 2023-05-19 14:08 UTC (permalink / raw)
  To: Fei Shao
  Cc: Jeff LaBundy, Benjamin Tissoires, Rob Herring, linux-mediatek,
	Dmitry Torokhov, Jiri Kosina, Krzysztof Kozlowski,
	Matthias Kaehlcke, Stephen Kitt, devicetree, linux-input,
	linux-kernel
In-Reply-To: <20230427035656.1962698-1-fshao@chromium.org>

Hi,

On Wed, Apr 26, 2023 at 8:57 PM Fei Shao <fshao@chromium.org> wrote:
>
> These changes are based on the series in [1], which modified the
> i2c-hid-of-goodix driver and removed the workaround for a power leakage
> issue, so the issue revisits on Mediatek MT8186 boards (Steelix).
>
> The root cause is that the touchscreen can be powered in different ways
> depending on the hardware designs, and it's not as easy to come up with
> a solution that is both simple and elegant for all the known designs.
>
> To address the issue, I ended up adding a new boolean property for the
> driver so that we can control the power up/down sequence depending on
> that.
>
> Adding a new property might not be the cleanest approach for this, but
> at least the intention would be easy enough to understand, and it
> introduces relatively small change to the code and fully preserves the
> original control flow.
> I hope this is something acceptable, and I'm open to any better
> approaches.
>
> [1] https://lore.kernel.org/all/20230207024816.525938-1-dianders@chromium.org/
>
> Changes in v4:
> - Minor coding style improvement
>
> Changes in v3:
> - In power-down, only skip the GPIO but not the regulator calls if the
>   flag is set
>
> Changes in v2:
> - Use a more accurate property name and with "goodix," prefix.
> - Do not change the regulator_enable logic during power-up.
>
> Fei Shao (2):
>   dt-bindings: input: goodix: Add "goodix,no-reset-during-suspend"
>     property
>   HID: i2c-hid: goodix: Add support for "goodix,no-reset-during-suspend"
>     property
>
>  .../bindings/input/goodix,gt7375p.yaml           |  9 +++++++++
>  drivers/hid/i2c-hid/i2c-hid-of-goodix.c          | 16 +++++++++++++++-
>  2 files changed, 24 insertions(+), 1 deletion(-)

Just double-checking if there is any work needed on this series. I
think it's ready to land but I wanted to double-check.

Thanks!

-Doug

^ permalink raw reply

* [PATCH 6/7] docs: update some straggling Documentation/arm references
From: Jonathan Corbet @ 2023-05-19 16:46 UTC (permalink / raw)
  To: linux-doc
  Cc: linux-kernel, linux-arch, linux-arm-kernel, Jonathan Corbet,
	Dmitry Torokhov, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
	Thierry Reding, Uwe Kleine-König, Greg Kroah-Hartman,
	linux-input, linux-sunxi, linux-pwm, linux-serial
In-Reply-To: <20230519164607.38845-1-corbet@lwn.net>

The Arm documentation has moved to Documentation/arch/arm; update the
last remaining references to match.

Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Chen-Yu Tsai <wens@csie.org>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Cc: Samuel Holland <samuel@sholland.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-input@vger.kernel.org
Cc: linux-sunxi@lists.linux.dev
Cc: linux-pwm@vger.kernel.org
Cc: linux-serial@vger.kernel.org
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
---
 MAINTAINERS                          | 6 +++---
 drivers/input/touchscreen/sun4i-ts.c | 2 +-
 drivers/pwm/pwm-atmel.c              | 2 +-
 drivers/pwm/pwm-pxa.c                | 2 +-
 drivers/tty/serial/Kconfig           | 4 ++--
 5 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index e0ad886d3163..09aa1b0ef552 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2706,7 +2706,7 @@ Q:	https://patchwork.kernel.org/project/linux-samsung-soc/list/
 B:	mailto:linux-samsung-soc@vger.kernel.org
 C:	irc://irc.libera.chat/linux-exynos
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git
-F:	Documentation/arm/samsung/
+F:	Documentation/arch/arm/samsung/
 F:	Documentation/devicetree/bindings/arm/samsung/
 F:	Documentation/devicetree/bindings/hwinfo/samsung,*
 F:	Documentation/devicetree/bindings/power/pd-samsung.yaml
@@ -3058,7 +3058,7 @@ M:	Will Deacon <will@kernel.org>
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 S:	Maintained
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git
-F:	Documentation/arm64/
+F:	Documentation/arch/arm64/
 F:	arch/arm64/
 F:	tools/testing/selftests/arm64/
 X:	arch/arm64/boot/dts/
@@ -15278,7 +15278,7 @@ OMAP DISPLAY SUBSYSTEM and FRAMEBUFFER SUPPORT (DSS2)
 L:	linux-omap@vger.kernel.org
 L:	linux-fbdev@vger.kernel.org
 S:	Orphan
-F:	Documentation/arm/omap/dss.rst
+F:	Documentation/arch/arm/omap/dss.rst
 F:	drivers/video/fbdev/omap2/
 
 OMAP FRAMEBUFFER SUPPORT
diff --git a/drivers/input/touchscreen/sun4i-ts.c b/drivers/input/touchscreen/sun4i-ts.c
index 577c75c83e25..bb3c6072fc82 100644
--- a/drivers/input/touchscreen/sun4i-ts.c
+++ b/drivers/input/touchscreen/sun4i-ts.c
@@ -22,7 +22,7 @@
  * in the kernel). So this driver offers straight forward, reliable single
  * touch functionality only.
  *
- * s.a. A20 User Manual "1.15 TP" (Documentation/arm/sunxi.rst)
+ * s.a. A20 User Manual "1.15 TP" (Documentation/arch/arm/sunxi.rst)
  * (looks like the description in the A20 User Manual v1.3 is better
  * than the one in the A10 User Manual v.1.5)
  */
diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c
index 0c567d9623cd..5f7d286871cf 100644
--- a/drivers/pwm/pwm-atmel.c
+++ b/drivers/pwm/pwm-atmel.c
@@ -6,7 +6,7 @@
  *		 Bo Shen <voice.shen@atmel.com>
  *
  * Links to reference manuals for the supported PWM chips can be found in
- * Documentation/arm/microchip.rst.
+ * Documentation/arch/arm/microchip.rst.
  *
  * Limitations:
  * - Periods start with the inactive level.
diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c
index 46ed668bd141..762429d5647f 100644
--- a/drivers/pwm/pwm-pxa.c
+++ b/drivers/pwm/pwm-pxa.c
@@ -8,7 +8,7 @@
  *		eric miao <eric.miao@marvell.com>
  *
  * Links to reference manuals for some of the supported PWM chips can be found
- * in Documentation/arm/marvell.rst.
+ * in Documentation/arch/arm/marvell.rst.
  *
  * Limitations:
  * - When PWM is stopped, the current PWM period stops abruptly at the next
diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index 398e5aac2e77..30bb9714f3c6 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -450,8 +450,8 @@ config SERIAL_SA1100
 	help
 	  If you have a machine based on a SA1100/SA1110 StrongARM(R) CPU you
 	  can enable its onboard serial port by enabling this option.
-	  Please read <file:Documentation/arm/sa1100/serial_uart.rst> for further
-	  info.
+	  Please read <file:Documentation/arch/arm/sa1100/serial_uart.rst> for
+	  further info.
 
 config SERIAL_SA1100_CONSOLE
 	bool "Console on SA1100 serial port"
-- 
2.40.1


^ permalink raw reply related

* Approval of patch related to fix to "Xbox" spell in Linux kernel
From: Marcos Alano @ 2023-05-20  1:14 UTC (permalink / raw)
  To: HID CORE LAYER, dmitry.torokhov

Hello,

Could we approve, or at least discuss more, these changes Ismael 
submitted last week?

I can't see anything wrong with it, I just think it maybe fell in the 
cracks.

Here is the original discussion: 
https://patchwork.kernel.org/project/linux-input/patch/e864b39b-27e0-c6f2-76e8-db465916f310@gmail.com/

Thanks,
-- 
Marcos Alano

^ permalink raw reply

* Re: Fwd: ThinkPad L540: suspend not working (deep / S3 / standby, regression Linux 4.19 -> 6.1)
From: Bagas Sanjaya @ 2023-05-20  2:16 UTC (permalink / raw)
  To: Linux Kernel Mailing List, Linux Regressions, Linux Input,
	Linux i2c Devices
  Cc: Jarkko Nikula, Wolfram Sang, Dmitry Torokhov, kolAflash
In-Reply-To: <73883c7d-42db-7ac6-fa43-b9be45cdc795@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 485 bytes --]

On Fri, May 19, 2023 at 08:19:39PM +0700, Bagas Sanjaya wrote:
> #regzbot introduced: v4.19..v6.1 https://bugzilla.kernel.org/show_bug.cgi?id=217462
> #regzbot title: psmouse suspend failed on ThinkPad L540
> 

The reporter had narrowed down possible culprit commit range [1],
thus telling regzbot:

#regzbot introduced: v5.16.18..v5.17-rc3

Thanks.

[1]: https://bugzilla.kernel.org/show_bug.cgi?id=217462#c3

-- 
An old man doll... just what I always wanted! - Clara

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply

* Re: [PATCH 6/7] docs: update some straggling Documentation/arm references
From: kernel test robot @ 2023-05-20  3:09 UTC (permalink / raw)
  To: Jonathan Corbet, linux-doc
  Cc: oe-kbuild-all, linux-kernel, linux-arch, linux-arm-kernel,
	Jonathan Corbet, Dmitry Torokhov, Chen-Yu Tsai, Jernej Skrabec,
	Samuel Holland, Thierry Reding, Uwe Kleine-König,
	Greg Kroah-Hartman, linux-input, linux-sunxi, linux-pwm,
	linux-serial
In-Reply-To: <20230519164607.38845-7-corbet@lwn.net>

[-- Attachment #1: Type: text/plain, Size: 1703 bytes --]

Hi Jonathan,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on v6.4-rc2 next-20230519]
[cannot apply to sunxi/sunxi/for-next arm64/for-next/core thierry-reding-pwm/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Jonathan-Corbet/arm-docs-Move-Arm-documentation-to-Documentation-arch/20230520-005124
base:   linus/master
patch link:    https://lore.kernel.org/r/20230519164607.38845-7-corbet%40lwn.net
patch subject: [PATCH 6/7] docs: update some straggling Documentation/arm references
reproduce:
        # https://github.com/intel-lab-lkp/linux/commit/3c9885f2702a3319156cfbacedfca658e726213b
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Jonathan-Corbet/arm-docs-Move-Arm-documentation-to-Documentation-arch/20230520-005124
        git checkout 3c9885f2702a3319156cfbacedfca658e726213b
        make menuconfig
        # enable CONFIG_COMPILE_TEST, CONFIG_WARN_MISSING_DOCUMENTS, CONFIG_WARN_ABI_ERRORS
        make htmldocs

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202305201023.2DYXmdv3-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> Warning: MAINTAINERS references a file that doesn't exist: Documentation/arch/arm64/

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

[-- Attachment #2: config --]
[-- Type: text/plain, Size: 39612 bytes --]

#
# Automatically generated file; DO NOT EDIT.
# Linux/x86_64 6.4.0-rc2 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="gcc-11 (Debian 11.3.0-12) 11.3.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=110300
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=24000
CONFIG_LD_IS_BFD=y
CONFIG_LD_VERSION=24000
CONFIG_LLD_VERSION=0
CONFIG_CC_CAN_LINK=y
CONFIG_CC_CAN_LINK_STATIC=y
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
CONFIG_TOOLS_SUPPORT_RELR=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
CONFIG_PAHOLE_VERSION=125
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_TABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y

#
# General setup
#
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_COMPILE_TEST=y
# CONFIG_WERROR is not set
CONFIG_LOCALVERSION=""
CONFIG_BUILD_SALT=""
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_HAVE_KERNEL_LZ4=y
CONFIG_HAVE_KERNEL_ZSTD=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
# CONFIG_KERNEL_ZSTD is not set
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="(none)"
# CONFIG_SYSVIPC is not set
# CONFIG_WATCH_QUEUE is not set
# CONFIG_CROSS_MEMORY_ATTACH is not set
# CONFIG_USELIB is not set
CONFIG_HAVE_ARCH_AUDITSYSCALL=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
CONFIG_GENERIC_IRQ_RESERVATION_MODE=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
# end of IRQ subsystem

CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_INIT=y
CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y

#
# Timers subsystem
#
CONFIG_HZ_PERIODIC=y
# CONFIG_NO_HZ_IDLE is not set
# CONFIG_NO_HZ is not set
# CONFIG_HIGH_RES_TIMERS is not set
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=125
# end of Timers subsystem

CONFIG_HAVE_EBPF_JIT=y
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y

#
# BPF subsystem
#
# CONFIG_BPF_SYSCALL is not set
# end of BPF subsystem

CONFIG_PREEMPT_NONE_BUILD=y
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_DYNAMIC is not set

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
# CONFIG_IRQ_TIME_ACCOUNTING is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_PSI is not set
# end of CPU/Task time and stats accounting

CONFIG_CPU_ISOLATION=y

#
# RCU Subsystem
#
CONFIG_TINY_RCU=y
# CONFIG_RCU_EXPERT is not set
CONFIG_TINY_SRCU=y
# end of RCU Subsystem

# CONFIG_IKCONFIG is not set
# CONFIG_IKHEADERS is not set
CONFIG_LOG_BUF_SHIFT=17
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y

#
# Scheduler features
#
# end of Scheduler features

CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
CONFIG_CC_HAS_INT128=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_GCC11_NO_ARRAY_BOUNDS=y
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_ARCH_SUPPORTS_INT128=y
# CONFIG_CGROUPS is not set
CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set
# CONFIG_TIME_NS is not set
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_RELAY is not set
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_BOOT_CONFIG is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_LD_ORPHAN_WARN=y
CONFIG_LD_ORPHAN_WARN_LEVEL="warn"
CONFIG_SYSCTL=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_HAVE_PCSPKR_PLATFORM=y
# CONFIG_EXPERT is not set
CONFIG_MULTIUSER=y
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SYSFS_SYSCALL=y
CONFIG_FHANDLE=y
CONFIG_POSIX_TIMERS=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_FUTEX_PI=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_IO_URING=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_MEMBARRIER=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_SELFTEST is not set
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
CONFIG_RSEQ=y
# CONFIG_EMBEDDED is not set
CONFIG_HAVE_PERF_EVENTS=y

#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
# end of Kernel Performance Events And Counters

# CONFIG_PROFILING is not set
# end of General setup

CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_MMU=y
CONFIG_ARCH_MMAP_RND_BITS_MIN=28
CONFIG_ARCH_MMAP_RND_BITS_MAX=32
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8
CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_AUDIT_ARCH=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_PGTABLE_LEVELS=4
CONFIG_CC_HAS_SANE_STACKPROTECTOR=y

#
# Processor type and features
#
# CONFIG_SMP is not set
CONFIG_X86_FEATURE_NAMES=y
CONFIG_X86_MPPARSE=y
# CONFIG_GOLDFISH is not set
# CONFIG_X86_CPU_RESCTRL is not set
# CONFIG_X86_EXTENDED_PLATFORM is not set
# CONFIG_SCHED_OMIT_FRAME_POINTER is not set
# CONFIG_HYPERVISOR_GUEST is not set
# CONFIG_MK8 is not set
# CONFIG_MPSC is not set
# CONFIG_MCORE2 is not set
# CONFIG_MATOM is not set
CONFIG_GENERIC_CPU=y
CONFIG_X86_INTERNODE_CACHE_SHIFT=6
CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_TSC=y
CONFIG_X86_CMPXCHG64=y
CONFIG_X86_CMOV=y
CONFIG_X86_MINIMUM_CPU_FAMILY=64
CONFIG_X86_DEBUGCTLMSR=y
CONFIG_IA32_FEAT_CTL=y
CONFIG_X86_VMX_FEATURE_NAMES=y
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_AMD=y
CONFIG_CPU_SUP_HYGON=y
CONFIG_CPU_SUP_CENTAUR=y
CONFIG_CPU_SUP_ZHAOXIN=y
CONFIG_HPET_TIMER=y
CONFIG_DMI=y
CONFIG_NR_CPUS_RANGE_BEGIN=1
CONFIG_NR_CPUS_RANGE_END=1
CONFIG_NR_CPUS_DEFAULT=1
CONFIG_NR_CPUS=1
CONFIG_UP_LATE_INIT=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
# CONFIG_X86_MCE is not set

#
# Performance monitoring
#
# CONFIG_PERF_EVENTS_AMD_POWER is not set
# CONFIG_PERF_EVENTS_AMD_UNCORE is not set
# CONFIG_PERF_EVENTS_AMD_BRS is not set
# end of Performance monitoring

CONFIG_X86_16BIT=y
CONFIG_X86_ESPFIX64=y
CONFIG_X86_VSYSCALL_EMULATION=y
# CONFIG_X86_IOPL_IOPERM is not set
# CONFIG_MICROCODE is not set
# CONFIG_X86_MSR is not set
# CONFIG_X86_CPUID is not set
# CONFIG_X86_5LEVEL is not set
CONFIG_X86_DIRECT_GBPAGES=y
# CONFIG_AMD_MEM_ENCRYPT is not set
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
CONFIG_MTRR=y
# CONFIG_MTRR_SANITIZER is not set
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
CONFIG_X86_UMIP=y
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
# CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS is not set
CONFIG_X86_INTEL_TSX_MODE_OFF=y
# CONFIG_X86_INTEL_TSX_MODE_ON is not set
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not set
CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x200000
# CONFIG_ADDRESS_MASKING is not set
CONFIG_LEGACY_VSYSCALL_XONLY=y
# CONFIG_LEGACY_VSYSCALL_NONE is not set
# CONFIG_CMDLINE_BOOL is not set
CONFIG_MODIFY_LDT_SYSCALL=y
# CONFIG_STRICT_SIGALTSTACK_SIZE is not set
CONFIG_HAVE_LIVEPATCH=y
# end of Processor type and features

CONFIG_CC_HAS_SLS=y
CONFIG_CC_HAS_RETURN_THUNK=y
CONFIG_CC_HAS_ENTRY_PADDING=y
CONFIG_FUNCTION_PADDING_CFI=11
CONFIG_FUNCTION_PADDING_BYTES=16
# CONFIG_SPECULATION_MITIGATIONS is not set
CONFIG_ARCH_HAS_ADD_PAGES=y
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y

#
# Power management and ACPI options
#
# CONFIG_SUSPEND is not set
# CONFIG_PM is not set
CONFIG_ARCH_SUPPORTS_ACPI=y
# CONFIG_ACPI is not set

#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
# end of CPU Frequency scaling

#
# CPU Idle
#
# CONFIG_CPU_IDLE is not set
# end of CPU Idle
# end of Power management and ACPI options

#
# Bus options (PCI etc.)
#
CONFIG_ISA_DMA_API=y
# end of Bus options (PCI etc.)

#
# Binary Emulations
#
# CONFIG_IA32_EMULATION is not set
# CONFIG_X86_X32_ABI is not set
# end of Binary Emulations

CONFIG_HAVE_KVM=y
# CONFIG_VIRTUALIZATION is not set
CONFIG_AS_AVX512=y
CONFIG_AS_SHA1_NI=y
CONFIG_AS_SHA256_NI=y
CONFIG_AS_TPAUSE=y
CONFIG_AS_GFNI=y

#
# General architecture-dependent options
#
CONFIG_GENERIC_ENTRY=y
# CONFIG_JUMP_LABEL is not set
# CONFIG_STATIC_CALL_SELFTEST is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_OPTPROBES=y
CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
CONFIG_HAVE_NMI=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
CONFIG_ARCH_WANTS_NO_INSTR=y
CONFIG_HAVE_ASM_MODVERSIONS=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_RSEQ=y
CONFIG_HAVE_RUST=y
CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
CONFIG_HAVE_USER_RETURN_NOTIFIER=y
CONFIG_HAVE_PERF_EVENTS_NMI=y
CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y
CONFIG_HAVE_PERF_REGS=y
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
CONFIG_MMU_GATHER_MERGE_VMAS=y
CONFIG_MMU_LAZY_TLB_REFCOUNT=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
CONFIG_HAVE_ARCH_SECCOMP=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
# CONFIG_SECCOMP is not set
CONFIG_HAVE_ARCH_STACKLEAK=y
CONFIG_HAVE_STACKPROTECTOR=y
# CONFIG_STACKPROTECTOR is not set
CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
CONFIG_LTO_NONE=y
CONFIG_ARCH_SUPPORTS_CFI_CLANG=y
CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
CONFIG_HAVE_CONTEXT_TRACKING_USER=y
CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
CONFIG_HAVE_MOVE_PUD=y
CONFIG_HAVE_MOVE_PMD=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
CONFIG_HAVE_ARCH_HUGE_VMAP=y
CONFIG_HAVE_ARCH_HUGE_VMALLOC=y
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y
CONFIG_SOFTIRQ_ON_OWN_STACK=y
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
CONFIG_HAVE_EXIT_THREAD=y
CONFIG_ARCH_MMAP_RND_BITS=28
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
CONFIG_HAVE_OBJTOOL=y
CONFIG_HAVE_JUMP_LABEL_HACK=y
CONFIG_HAVE_NOINSTR_HACK=y
CONFIG_HAVE_NOINSTR_VALIDATION=y
CONFIG_HAVE_UACCESS_VALIDATION=y
CONFIG_HAVE_STACK_VALIDATION=y
CONFIG_HAVE_RELIABLE_STACKTRACE=y
# CONFIG_COMPAT_32BIT_TIME is not set
CONFIG_HAVE_ARCH_VMAP_STACK=y
# CONFIG_VMAP_STACK is not set
CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
CONFIG_RANDOMIZE_KSTACK_OFFSET=y
# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
CONFIG_ARCH_HAS_MEM_ENCRYPT=y
CONFIG_HAVE_STATIC_CALL=y
CONFIG_HAVE_STATIC_CALL_INLINE=y
CONFIG_HAVE_PREEMPT_DYNAMIC=y
CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y
CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y
CONFIG_ARCH_HAS_ELFCORE_COMPAT=y
CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
CONFIG_DYNAMIC_SIGFRAME=y
CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y

#
# GCOV-based kernel profiling
#
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# end of GCOV-based kernel profiling

CONFIG_HAVE_GCC_PLUGINS=y
# CONFIG_GCC_PLUGINS is not set
CONFIG_FUNCTION_ALIGNMENT_4B=y
CONFIG_FUNCTION_ALIGNMENT_16B=y
CONFIG_FUNCTION_ALIGNMENT=16
# end of General architecture-dependent options

CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
# CONFIG_MODULES is not set
CONFIG_BLOCK=y
# CONFIG_BLOCK_LEGACY_AUTOLOAD is not set
# CONFIG_BLK_DEV_BSGLIB is not set
# CONFIG_BLK_DEV_INTEGRITY is not set
# CONFIG_BLK_DEV_ZONED is not set
# CONFIG_BLK_WBT is not set
# CONFIG_BLK_SED_OPAL is not set
# CONFIG_BLK_INLINE_ENCRYPTION is not set

#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_EFI_PARTITION=y
# end of Partition Types

#
# IO Schedulers
#
# CONFIG_MQ_IOSCHED_DEADLINE is not set
# CONFIG_MQ_IOSCHED_KYBER is not set
# CONFIG_IOSCHED_BFQ is not set
# end of IO Schedulers

CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
CONFIG_INLINE_READ_UNLOCK=y
CONFIG_INLINE_READ_UNLOCK_IRQ=y
CONFIG_INLINE_WRITE_UNLOCK=y
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y
CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y

#
# Executable file formats
#
# CONFIG_BINFMT_ELF is not set
# CONFIG_BINFMT_SCRIPT is not set
# CONFIG_BINFMT_MISC is not set
CONFIG_COREDUMP=y
# end of Executable file formats

#
# Memory Management options
#
# CONFIG_SWAP is not set

#
# SLAB allocator options
#
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLAB_MERGE_DEFAULT is not set
# CONFIG_SLAB_FREELIST_RANDOM is not set
# CONFIG_SLAB_FREELIST_HARDENED is not set
# CONFIG_SLUB_STATS is not set
# end of SLAB allocator options

# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
# CONFIG_COMPAT_BRK is not set
CONFIG_SPARSEMEM=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
# CONFIG_SPARSEMEM_VMEMMAP is not set
CONFIG_ARCH_WANT_OPTIMIZE_VMEMMAP=y
CONFIG_HAVE_FAST_GUP=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
# CONFIG_MEMORY_HOTPLUG is not set
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
# CONFIG_COMPACTION is not set
# CONFIG_PAGE_REPORTING is not set
CONFIG_PHYS_ADDR_T_64BIT=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_ARCH_WANTS_THP_SWAP=y
# CONFIG_TRANSPARENT_HUGEPAGE is not set
CONFIG_NEED_PER_CPU_KM=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
# CONFIG_CMA is not set
CONFIG_GENERIC_EARLY_IOREMAP=y
# CONFIG_IDLE_PAGE_TRACKING is not set
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
CONFIG_ARCH_HAS_PTE_DEVMAP=y
CONFIG_ZONE_DMA=y
CONFIG_ZONE_DMA32=y
CONFIG_VM_EVENT_COUNTERS=y
# CONFIG_PERCPU_STATS is not set

#
# GUP_TEST needs to have DEBUG_FS enabled
#
# CONFIG_DMAPOOL_TEST is not set
CONFIG_ARCH_HAS_PTE_SPECIAL=y
CONFIG_SECRETMEM=y
# CONFIG_ANON_VMA_NAME is not set
# CONFIG_USERFAULTFD is not set
# CONFIG_LRU_GEN is not set
CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y

#
# Data Access Monitoring
#
# CONFIG_DAMON is not set
# end of Data Access Monitoring
# end of Memory Management options

# CONFIG_NET is not set

#
# Device Drivers
#
CONFIG_HAVE_EISA=y
# CONFIG_EISA is not set
CONFIG_HAVE_PCI=y
# CONFIG_PCI is not set
# CONFIG_PCCARD is not set

#
# Generic Driver Options
#
# CONFIG_UEVENT_HELPER is not set
# CONFIG_DEVTMPFS is not set
# CONFIG_STANDALONE is not set
# CONFIG_PREVENT_FIRMWARE_BUILD is not set

#
# Firmware loader
#
CONFIG_FW_LOADER=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_FW_LOADER_USER_HELPER is not set
# CONFIG_FW_LOADER_COMPRESS is not set
# CONFIG_FW_UPLOAD is not set
# end of Firmware loader

CONFIG_ALLOW_DEV_COREDUMP=y
CONFIG_GENERIC_CPU_AUTOPROBE=y
CONFIG_GENERIC_CPU_VULNERABILITIES=y
# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set
# end of Generic Driver Options

#
# Bus devices
#
# CONFIG_ARM_INTEGRATOR_LM is not set
# CONFIG_BT1_APB is not set
# CONFIG_BT1_AXI is not set
# CONFIG_HISILICON_LPC is not set
# CONFIG_INTEL_IXP4XX_EB is not set
# CONFIG_QCOM_EBI2 is not set
# CONFIG_MHI_BUS is not set
# CONFIG_MHI_BUS_EP is not set
# end of Bus devices

#
# Firmware Drivers
#

#
# ARM System Control and Management Interface Protocol
#
# CONFIG_ARM_SCMI_PROTOCOL is not set
# end of ARM System Control and Management Interface Protocol

# CONFIG_EDD is not set
CONFIG_FIRMWARE_MEMMAP=y
# CONFIG_DMIID is not set
# CONFIG_DMI_SYSFS is not set
CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
# CONFIG_FW_CFG_SYSFS is not set
# CONFIG_SYSFB_SIMPLEFB is not set
# CONFIG_BCM47XX_NVRAM is not set
# CONFIG_GOOGLE_FIRMWARE is not set

#
# Tegra firmware driver
#
# end of Tegra firmware driver
# end of Firmware Drivers

# CONFIG_GNSS is not set
# CONFIG_MTD is not set
# CONFIG_OF is not set
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
# CONFIG_PARPORT is not set
# CONFIG_BLK_DEV is not set

#
# NVME Support
#
# CONFIG_NVME_FC is not set
# end of NVME Support

#
# Misc devices
#
# CONFIG_DUMMY_IRQ is not set
# CONFIG_ATMEL_SSC is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_SMPRO_ERRMON is not set
# CONFIG_SMPRO_MISC is not set
# CONFIG_QCOM_COINCELL is not set
# CONFIG_SRAM is not set
# CONFIG_XILINX_SDFEC is not set
# CONFIG_C2PORT is not set

#
# EEPROM support
#
# CONFIG_EEPROM_93CX6 is not set
# end of EEPROM support

#
# Texas Instruments shared transport line discipline
#
# end of Texas Instruments shared transport line discipline

#
# Altera FPGA firmware download module (requires I2C)
#
# CONFIG_ECHO is not set
# CONFIG_PVPANIC is not set
# end of Misc devices

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
# end of SCSI device support

# CONFIG_ATA is not set
# CONFIG_MD is not set
# CONFIG_TARGET_CORE is not set

#
# IEEE 1394 (FireWire) support
#
# CONFIG_FIREWIRE is not set
# end of IEEE 1394 (FireWire) support

# CONFIG_MACINTOSH_DRIVERS is not set

#
# Input device support
#
CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set
# CONFIG_INPUT_SPARSEKMAP is not set
# CONFIG_INPUT_MATRIXKMAP is not set

#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set

#
# Input Device Drivers
#
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
# CONFIG_RMI4_CORE is not set

#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
# CONFIG_GAMEPORT is not set
# end of Hardware I/O ports
# end of Input device support

#
# Character devices
#
CONFIG_TTY=y
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_LEGACY_TIOCSTI is not set
# CONFIG_LDISC_AUTOLOAD is not set

#
# Serial drivers
#
# CONFIG_SERIAL_8250 is not set

#
# Non-8250 serial port support
#
# CONFIG_SERIAL_AMBA_PL010 is not set
# CONFIG_SERIAL_MESON is not set
# CONFIG_SERIAL_CLPS711X is not set
# CONFIG_SERIAL_SAMSUNG is not set
# CONFIG_SERIAL_TEGRA is not set
# CONFIG_SERIAL_IMX is not set
# CONFIG_SERIAL_UARTLITE is not set
# CONFIG_SERIAL_SH_SCI is not set
# CONFIG_SERIAL_MSM is not set
# CONFIG_SERIAL_VT8500 is not set
# CONFIG_SERIAL_OMAP is not set
# CONFIG_SERIAL_LANTIQ is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_TIMBERDALE is not set
# CONFIG_SERIAL_BCM63XX is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_MXS_AUART is not set
# CONFIG_SERIAL_MPS2_UART is not set
# CONFIG_SERIAL_ARC is not set
# CONFIG_SERIAL_FSL_LPUART is not set
# CONFIG_SERIAL_FSL_LINFLEXUART is not set
# CONFIG_SERIAL_ST_ASC is not set
# CONFIG_SERIAL_STM32 is not set
# CONFIG_SERIAL_OWL is not set
# CONFIG_SERIAL_RDA is not set
# CONFIG_SERIAL_SUNPLUS is not set
# end of Serial drivers

# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_NULL_TTY is not set
# CONFIG_SERIAL_DEV_BUS is not set
# CONFIG_VIRTIO_CONSOLE is not set
# CONFIG_IPMI_HANDLER is not set
# CONFIG_ASPEED_KCS_IPMI_BMC is not set
# CONFIG_NPCM7XX_KCS_IPMI_BMC is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_MWAVE is not set
# CONFIG_DEVMEM is not set
# CONFIG_NVRAM is not set
# CONFIG_HANGCHECK_TIMER is not set
# CONFIG_TCG_TPM is not set
# CONFIG_TELCLOCK is not set
# end of Character devices

#
# I2C support
#
# CONFIG_I2C is not set
# end of I2C support

# CONFIG_I3C is not set
# CONFIG_SPI is not set
# CONFIG_SPMI is not set
# CONFIG_HSI is not set
# CONFIG_PPS is not set

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK_OPTIONAL=y

#
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
#
# end of PTP clock support

# CONFIG_PINCTRL is not set
# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
# CONFIG_POWER_RESET is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
# CONFIG_THERMAL is not set
# CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y
# CONFIG_SSB is not set
CONFIG_BCMA_POSSIBLE=y
# CONFIG_BCMA is not set

#
# Multifunction device drivers
#
# CONFIG_MFD_SUN4I_GPADC is not set
# CONFIG_MFD_AT91_USART is not set
# CONFIG_MFD_MADERA is not set
# CONFIG_MFD_EXYNOS_LPASS is not set
# CONFIG_MFD_MXS_LRADC is not set
# CONFIG_MFD_MX25_TSADC is not set
# CONFIG_MFD_KEMPLD is not set
# CONFIG_MFD_MT6397 is not set
# CONFIG_MFD_PM8XXX is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_RZ_MTU3 is not set
# CONFIG_ABX500_CORE is not set
# CONFIG_MFD_SUN6I_PRCM is not set
# CONFIG_MFD_SYSCON is not set
# CONFIG_MFD_TI_AM335X_TSCADC is not set
# CONFIG_MFD_TQMX86 is not set
# CONFIG_MFD_STM32_LPTIMER is not set
# CONFIG_MFD_STM32_TIMERS is not set
# end of Multifunction device drivers

# CONFIG_REGULATOR is not set
# CONFIG_RC_CORE is not set

#
# CEC support
#
# CONFIG_MEDIA_CEC_SUPPORT is not set
# end of CEC support

# CONFIG_MEDIA_SUPPORT is not set

#
# Graphics support
#
# CONFIG_TEGRA_HOST1X is not set
# CONFIG_IMX_IPUV3_CORE is not set
# CONFIG_DRM is not set

#
# ARM devices
#
# end of ARM devices

#
# Frame buffer Devices
#
# CONFIG_FB is not set
# CONFIG_MMP_DISP is not set
# end of Frame buffer Devices

#
# Backlight & LCD device support
#
# CONFIG_LCD_CLASS_DEVICE is not set
# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
# end of Backlight & LCD device support

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
# end of Console display driver support
# end of Graphics support

# CONFIG_SOUND is not set
# CONFIG_HID_SUPPORT is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SUPPORT is not set
# CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_EDAC_ATOMIC_SCRUB=y
CONFIG_EDAC_SUPPORT=y
CONFIG_RTC_LIB=y
CONFIG_RTC_MC146818_LIB=y
# CONFIG_RTC_CLASS is not set
# CONFIG_DMADEVICES is not set

#
# DMABUF options
#
# CONFIG_SYNC_FILE is not set
# CONFIG_DMABUF_HEAPS is not set
# end of DMABUF options

# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
# CONFIG_VFIO is not set
# CONFIG_VIRT_DRIVERS is not set
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VHOST_MENU is not set

#
# Microsoft Hyper-V guest support
#
# end of Microsoft Hyper-V guest support

# CONFIG_GREYBUS is not set
# CONFIG_COMEDI is not set
# CONFIG_STAGING is not set
# CONFIG_CHROME_PLATFORMS is not set
# CONFIG_MELLANOX_PLATFORM is not set
# CONFIG_OLPC_XO175 is not set
# CONFIG_SURFACE_PLATFORMS is not set
# CONFIG_X86_PLATFORM_DEVICES is not set
# CONFIG_COMMON_CLK is not set
# CONFIG_HWSPINLOCK is not set

#
# Clock Source drivers
#
CONFIG_CLKEVT_I8253=y
CONFIG_I8253_LOCK=y
CONFIG_CLKBLD_I8253=y
# CONFIG_BCM2835_TIMER is not set
# CONFIG_BCM_KONA_TIMER is not set
# CONFIG_DAVINCI_TIMER is not set
# CONFIG_DIGICOLOR_TIMER is not set
# CONFIG_OMAP_DM_TIMER is not set
# CONFIG_DW_APB_TIMER is not set
# CONFIG_FTTMR010_TIMER is not set
# CONFIG_IXP4XX_TIMER is not set
# CONFIG_MESON6_TIMER is not set
# CONFIG_OWL_TIMER is not set
# CONFIG_RDA_TIMER is not set
# CONFIG_SUN4I_TIMER is not set
# CONFIG_TEGRA_TIMER is not set
# CONFIG_VT8500_TIMER is not set
# CONFIG_NPCM7XX_TIMER is not set
# CONFIG_ASM9260_TIMER is not set
# CONFIG_CLKSRC_DBX500_PRCMU is not set
# CONFIG_CLPS711X_TIMER is not set
# CONFIG_MXS_TIMER is not set
# CONFIG_NSPIRE_TIMER is not set
# CONFIG_INTEGRATOR_AP_TIMER is not set
# CONFIG_CLKSRC_PISTACHIO is not set
# CONFIG_CLKSRC_STM32_LP is not set
# CONFIG_ARMV7M_SYSTICK is not set
# CONFIG_ATMEL_PIT is not set
# CONFIG_ATMEL_ST is not set
# CONFIG_CLKSRC_SAMSUNG_PWM is not set
# CONFIG_FSL_FTM_TIMER is not set
# CONFIG_OXNAS_RPS_TIMER is not set
# CONFIG_MTK_TIMER is not set
# CONFIG_MTK_CPUX_TIMER is not set
# CONFIG_SH_TIMER_CMT is not set
# CONFIG_SH_TIMER_MTU2 is not set
# CONFIG_RENESAS_OSTM is not set
# CONFIG_SH_TIMER_TMU is not set
# CONFIG_EM_TIMER_STI is not set
# CONFIG_CLKSRC_PXA is not set
# CONFIG_TIMER_IMX_SYS_CTR is not set
# CONFIG_CLKSRC_ST_LPC is not set
# CONFIG_GXP_TIMER is not set
# CONFIG_MSC313E_TIMER is not set
# end of Clock Source drivers

# CONFIG_MAILBOX is not set
# CONFIG_IOMMU_SUPPORT is not set

#
# Remoteproc drivers
#
# CONFIG_REMOTEPROC is not set
# end of Remoteproc drivers

#
# Rpmsg drivers
#
# CONFIG_RPMSG_VIRTIO is not set
# end of Rpmsg drivers

#
# SOC (System On Chip) specific Drivers
#

#
# Amlogic SoC drivers
#
# CONFIG_MESON_CANVAS is not set
# CONFIG_MESON_CLK_MEASURE is not set
# CONFIG_MESON_GX_SOCINFO is not set
# CONFIG_MESON_MX_SOCINFO is not set
# end of Amlogic SoC drivers

#
# Apple SoC drivers
#
# CONFIG_APPLE_SART is not set
# end of Apple SoC drivers

#
# ASPEED SoC drivers
#
# CONFIG_ASPEED_LPC_CTRL is not set
# CONFIG_ASPEED_LPC_SNOOP is not set
# CONFIG_ASPEED_UART_ROUTING is not set
# CONFIG_ASPEED_P2A_CTRL is not set
# CONFIG_ASPEED_SOCINFO is not set
# end of ASPEED SoC drivers

# CONFIG_AT91_SOC_ID is not set
# CONFIG_AT91_SOC_SFR is not set

#
# Broadcom SoC drivers
#
# CONFIG_SOC_BCM63XX is not set
# CONFIG_SOC_BRCMSTB is not set
# end of Broadcom SoC drivers

#
# NXP/Freescale QorIQ SoC drivers
#
# end of NXP/Freescale QorIQ SoC drivers

#
# fujitsu SoC drivers
#
# end of fujitsu SoC drivers

#
# i.MX SoC drivers
#
# CONFIG_SOC_IMX8M is not set
# CONFIG_SOC_IMX9 is not set
# end of i.MX SoC drivers

#
# IXP4xx SoC drivers
#
# CONFIG_IXP4XX_QMGR is not set
# CONFIG_IXP4XX_NPE is not set
# end of IXP4xx SoC drivers

#
# Enable LiteX SoC Builder specific drivers
#
# CONFIG_LITEX_SOC_CONTROLLER is not set
# end of Enable LiteX SoC Builder specific drivers

# CONFIG_LOONGSON2_GUTS is not set

#
# MediaTek SoC drivers
#
# CONFIG_MTK_CMDQ is not set
# CONFIG_MTK_DEVAPC is not set
# CONFIG_MTK_INFRACFG is not set
# CONFIG_MTK_MMSYS is not set
# end of MediaTek SoC drivers

# CONFIG_WPCM450_SOC is not set

#
# Qualcomm SoC drivers
#
# CONFIG_QCOM_GENI_SE is not set
# CONFIG_QCOM_GSBI is not set
# CONFIG_QCOM_LLCC is not set
# CONFIG_QCOM_RAMP_CTRL is not set
# CONFIG_QCOM_RPMH is not set
# CONFIG_QCOM_SPM is not set
# CONFIG_QCOM_ICC_BWMON is not set
# end of Qualcomm SoC drivers

# CONFIG_SOC_RENESAS is not set
# CONFIG_ROCKCHIP_GRF is not set
# CONFIG_SOC_SAMSUNG is not set
# CONFIG_SOC_TI is not set
# CONFIG_UX500_SOC_ID is not set

#
# Xilinx SoC drivers
#
# end of Xilinx SoC drivers
# end of SOC (System On Chip) specific Drivers

# CONFIG_PM_DEVFREQ is not set
# CONFIG_EXTCON is not set
# CONFIG_MEMORY is not set
# CONFIG_IIO is not set
# CONFIG_PWM is not set

#
# IRQ chip support
#
# CONFIG_RENESAS_INTC_IRQPIN is not set
# CONFIG_RENESAS_IRQC is not set
# CONFIG_RENESAS_RZA1_IRQC is not set
# CONFIG_RENESAS_RZG2L_IRQC is not set
# CONFIG_SL28CPLD_INTC is not set
# CONFIG_TS4800_IRQ is not set
# CONFIG_INGENIC_TCU_IRQ is not set
# CONFIG_IRQ_UNIPHIER_AIDET is not set
# CONFIG_MESON_IRQ_GPIO is not set
# CONFIG_IMX_IRQSTEER is not set
# CONFIG_IMX_INTMUX is not set
# CONFIG_EXYNOS_IRQ_COMBINER is not set
# CONFIG_MST_IRQ is not set
# CONFIG_MCHP_EIC is not set
# CONFIG_SUNPLUS_SP7021_INTC is not set
# end of IRQ chip support

# CONFIG_IPACK_BUS is not set
# CONFIG_RESET_CONTROLLER is not set

#
# PHY Subsystem
#
# CONFIG_GENERIC_PHY is not set
# CONFIG_PHY_PISTACHIO_USB is not set
# CONFIG_PHY_CAN_TRANSCEIVER is not set

#
# PHY drivers for Broadcom platforms
#
# CONFIG_PHY_BCM63XX_USBH is not set
# CONFIG_BCM_KONA_USB2_PHY is not set
# end of PHY drivers for Broadcom platforms

# CONFIG_PHY_HI6220_USB is not set
# CONFIG_PHY_HI3660_USB is not set
# CONFIG_PHY_HI3670_USB is not set
# CONFIG_PHY_HI3670_PCIE is not set
# CONFIG_PHY_HISTB_COMBPHY is not set
# CONFIG_PHY_HISI_INNO_USB2 is not set
# CONFIG_PHY_PXA_28NM_HSIC is not set
# CONFIG_PHY_PXA_28NM_USB2 is not set
# CONFIG_PHY_PXA_USB is not set
# CONFIG_PHY_MMP3_USB is not set
# CONFIG_PHY_MMP3_HSIC is not set
# CONFIG_PHY_MT7621_PCI is not set
# CONFIG_PHY_RALINK_USB is not set
# CONFIG_PHY_R8A779F0_ETHERNET_SERDES is not set
# CONFIG_PHY_RCAR_GEN3_USB3 is not set
# CONFIG_PHY_ROCKCHIP_DPHY_RX0 is not set
# CONFIG_PHY_ROCKCHIP_PCIE is not set
# CONFIG_PHY_ROCKCHIP_SNPS_PCIE3 is not set
# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
# CONFIG_PHY_SAMSUNG_USB2 is not set
# CONFIG_PHY_ST_SPEAR1310_MIPHY is not set
# CONFIG_PHY_ST_SPEAR1340_MIPHY is not set
# CONFIG_PHY_TEGRA194_P2U is not set
# CONFIG_PHY_DA8XX_USB is not set
# CONFIG_OMAP_CONTROL_PHY is not set
# CONFIG_TI_PIPE3 is not set
# CONFIG_PHY_INTEL_KEEMBAY_EMMC is not set
# CONFIG_PHY_INTEL_KEEMBAY_USB is not set
# CONFIG_PHY_INTEL_LGM_EMMC is not set
# CONFIG_PHY_XILINX_ZYNQMP is not set
# end of PHY Subsystem

# CONFIG_POWERCAP is not set
# CONFIG_MCB is not set

#
# Performance monitor support
#
# CONFIG_ARM_CCN is not set
# CONFIG_ARM_CMN is not set
# CONFIG_FSL_IMX8_DDR_PMU is not set
# CONFIG_XGENE_PMU is not set
# CONFIG_ARM_DMC620_PMU is not set
# CONFIG_MARVELL_CN10K_TAD_PMU is not set
# CONFIG_ALIBABA_UNCORE_DRW_PMU is not set
# CONFIG_MARVELL_CN10K_DDR_PMU is not set
# CONFIG_MESON_DDR_PMU is not set
# end of Performance monitor support

# CONFIG_RAS is not set

#
# Android
#
# CONFIG_ANDROID_BINDER_IPC is not set
# end of Android

# CONFIG_DAX is not set
# CONFIG_NVMEM is not set

#
# HW tracing support
#
# CONFIG_STM is not set
# CONFIG_INTEL_TH is not set
# end of HW tracing support

# CONFIG_FPGA is not set
# CONFIG_TEE is not set
# CONFIG_SIOX is not set
# CONFIG_SLIMBUS is not set
# CONFIG_INTERCONNECT is not set
# CONFIG_COUNTER is not set
# CONFIG_PECI is not set
# CONFIG_HTE is not set
# end of Device Drivers

#
# File systems
#
CONFIG_DCACHE_WORD_ACCESS=y
# CONFIG_VALIDATE_FS_PARSER is not set
# CONFIG_EXT2_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_EXT4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
# CONFIG_F2FS_FS is not set
CONFIG_EXPORTFS=y
# CONFIG_EXPORTFS_BLOCK_OPS is not set
CONFIG_FILE_LOCKING=y
# CONFIG_FS_ENCRYPTION is not set
# CONFIG_FS_VERITY is not set
# CONFIG_DNOTIFY is not set
# CONFIG_INOTIFY_USER is not set
# CONFIG_FANOTIFY is not set
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_FUSE_FS is not set
# CONFIG_OVERLAY_FS is not set

#
# Caches
#
# CONFIG_FSCACHE is not set
# end of Caches

#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
# end of CD-ROM/DVD Filesystems

#
# DOS/FAT/EXFAT/NT Filesystems
#
# CONFIG_MSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EXFAT_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS3_FS is not set
# end of DOS/FAT/EXFAT/NT Filesystems

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
# CONFIG_PROC_KCORE is not set
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
# CONFIG_PROC_CHILDREN is not set
CONFIG_PROC_PID_ARCH_STATUS=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
# CONFIG_TMPFS is not set
# CONFIG_HUGETLBFS is not set
CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
# CONFIG_CONFIGFS_FS is not set
# end of Pseudo filesystems

# CONFIG_MISC_FILESYSTEMS is not set
# CONFIG_NLS is not set
# CONFIG_UNICODE is not set
CONFIG_IO_WQ=y
# end of File systems

#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY_DMESG_RESTRICT is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
# CONFIG_HARDENED_USERCOPY is not set
# CONFIG_FORTIFY_SOURCE is not set
# CONFIG_STATIC_USERMODEHELPER is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,bpf"

#
# Kernel hardening options
#

#
# Memory initialization
#
CONFIG_INIT_STACK_NONE=y
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
# CONFIG_ZERO_CALL_USED_REGS is not set
# end of Memory initialization

CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options

# CONFIG_CRYPTO is not set

#
# Library routines
#
# CONFIG_PACKING is not set
CONFIG_BITREVERSE=y
CONFIG_GENERIC_STRNCPY_FROM_USER=y
CONFIG_GENERIC_STRNLEN_USER=y
# CONFIG_CORDIC is not set
# CONFIG_PRIME_NUMBERS is not set
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IOMAP=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
CONFIG_ARCH_USE_SYM_ANNOTATIONS=y

#
# Crypto library routines
#
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
# CONFIG_CRYPTO_LIB_CHACHA is not set
# CONFIG_CRYPTO_LIB_CURVE25519 is not set
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
# CONFIG_CRYPTO_LIB_POLY1305 is not set
# end of Crypto library routines

# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
# CONFIG_CRC_T10DIF is not set
# CONFIG_CRC64_ROCKSOFT is not set
# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC64 is not set
# CONFIG_CRC4 is not set
# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
# CONFIG_CRC8 is not set
# CONFIG_RANDOM32_SELFTEST is not set
# CONFIG_XZ_DEC is not set
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_IOPORT_MAP=y
CONFIG_HAS_DMA=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_SWIOTLB=y
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_IRQ_POLL is not set
CONFIG_HAVE_GENERIC_VDSO=y
CONFIG_GENERIC_GETTIMEOFDAY=y
CONFIG_GENERIC_VDSO_TIME_NS=y
CONFIG_ARCH_HAS_PMEM_API=y
CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y
CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y
CONFIG_ARCH_HAS_COPY_MC=y
CONFIG_ARCH_STACKWALK=y
CONFIG_STACKDEPOT=y
CONFIG_SBITMAP=y
# CONFIG_PARMAN is not set
# CONFIG_OBJAGG is not set
# end of Library routines

#
# Kernel hacking
#

#
# printk and dmesg options
#
# CONFIG_PRINTK_TIME is not set
# CONFIG_PRINTK_CALLER is not set
# CONFIG_STACKTRACE_BUILD_ID is not set
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_CONSOLE_LOGLEVEL_QUIET=4
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_DYNAMIC_DEBUG is not set
# CONFIG_DYNAMIC_DEBUG_CORE is not set
# CONFIG_SYMBOLIC_ERRNAME is not set
CONFIG_DEBUG_BUGVERBOSE=y
# end of printk and dmesg options

# CONFIG_DEBUG_KERNEL is not set

#
# Compile-time checks and compiler options
#
CONFIG_AS_HAS_NON_CONST_LEB128=y
CONFIG_FRAME_WARN=2048
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_HEADERS_INSTALL is not set
CONFIG_DEBUG_SECTION_MISMATCH=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
CONFIG_OBJTOOL=y
# end of Compile-time checks and compiler options

#
# Generic Kernel Debugging Instruments
#
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_DEBUG_FS is not set
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
# CONFIG_UBSAN is not set
CONFIG_HAVE_ARCH_KCSAN=y
CONFIG_HAVE_KCSAN_COMPILER=y
# end of Generic Kernel Debugging Instruments

#
# Networking Debugging
#
# end of Networking Debugging

#
# Memory Debugging
#
# CONFIG_PAGE_EXTENSION is not set
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_PAGE_TABLE_CHECK is not set
# CONFIG_PAGE_POISONING is not set
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_ARCH_HAS_DEBUG_WX=y
# CONFIG_DEBUG_WX is not set
CONFIG_GENERIC_PTDUMP=y
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
# CONFIG_DEBUG_VM_PGTABLE is not set
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP=y
CONFIG_HAVE_ARCH_KASAN=y
CONFIG_HAVE_ARCH_KASAN_VMALLOC=y
CONFIG_CC_HAS_KASAN_GENERIC=y
CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
# CONFIG_KASAN is not set
CONFIG_HAVE_ARCH_KFENCE=y
# CONFIG_KFENCE is not set
CONFIG_HAVE_ARCH_KMSAN=y
# end of Memory Debugging

#
# Debug Oops, Lockups and Hangs
#
# CONFIG_PANIC_ON_OOPS is not set
CONFIG_PANIC_ON_OOPS_VALUE=0
CONFIG_PANIC_TIMEOUT=0
CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y
# end of Debug Oops, Lockups and Hangs

#
# Scheduler Debugging
#
# end of Scheduler Debugging

# CONFIG_DEBUG_TIMEKEEPING is not set

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_LOCK_DEBUGGING_SUPPORT=y
# CONFIG_WW_MUTEX_SELFTEST is not set
# end of Lock Debugging (spinlocks, mutexes, etc...)

# CONFIG_DEBUG_IRQFLAGS is not set
CONFIG_STACKTRACE=y
# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set

#
# Debug kernel data structures
#
# CONFIG_BUG_ON_DATA_CORRUPTION is not set
# end of Debug kernel data structures

#
# RCU Debugging
#
# end of RCU Debugging

CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_HAVE_RETHOOK=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y
CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_HAVE_FENTRY=y
CONFIG_HAVE_OBJTOOL_MCOUNT=y
CONFIG_HAVE_OBJTOOL_NOP_MCOUNT=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y
CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y
CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y

#
# x86 Debugging
#
# CONFIG_X86_VERBOSE_BOOTUP is not set
CONFIG_EARLY_PRINTK=y
CONFIG_HAVE_MMIOTRACE_SUPPORT=y
CONFIG_IO_DELAY_0X80=y
# CONFIG_IO_DELAY_0XED is not set
# CONFIG_IO_DELAY_UDELAY is not set
# CONFIG_IO_DELAY_NONE is not set
CONFIG_UNWINDER_ORC=y
# CONFIG_UNWINDER_FRAME_POINTER is not set
# end of x86 Debugging

#
# Kernel Testing and Coverage
#
# CONFIG_KUNIT is not set
CONFIG_ARCH_HAS_KCOV=y
CONFIG_CC_HAS_SANCOV_TRACE_PC=y
# CONFIG_KCOV is not set
# CONFIG_RUNTIME_TESTING_MENU is not set
CONFIG_ARCH_USE_MEMTEST=y
# CONFIG_MEMTEST is not set
# end of Kernel Testing and Coverage

#
# Rust hacking
#
# end of Rust hacking
# end of Kernel hacking

#
# Documentation
#
CONFIG_WARN_MISSING_DOCUMENTS=y
CONFIG_WARN_ABI_ERRORS=y
# end of Documentation

^ permalink raw reply

* [v2 0/2] Add ili9882t timing
From: Cong Yang @ 2023-05-20  5:06 UTC (permalink / raw)
  To: dianders
  Cc: benjamin.tissoires, devicetree, dmitry.torokhov, hsinyi, jikos,
	linux-input, linux-kernel, mka, yangcong5
In-Reply-To: <CAD=FV=VYfPSwar2AXBxB3vX0dV1kjQ5bZMxsEBFhUnMNRXbBCw@mail.gmail.com>

Compare V1,move ili9882t timing to the "i2c-hid-of-elan.c" driver.
Add "ilitek,ili9882t" compatible string to bindings document.

Cong Yang (2):
  HID: i2c-hid: elan: Add ili9882t timing
  dt-bindings: input: touchscreen: Add ilitek 9882T touchscreen chip

 .../devicetree/bindings/input/elan,ekth6915.yaml         | 9 +++++++--
 drivers/hid/i2c-hid/i2c-hid-of-elan.c                    | 7 +++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

-- 
2.25.1


^ permalink raw reply

* [v2 1/2] HID: i2c-hid: elan: Add ili9882t timing
From: Cong Yang @ 2023-05-20  5:06 UTC (permalink / raw)
  To: dianders
  Cc: benjamin.tissoires, devicetree, dmitry.torokhov, hsinyi, jikos,
	linux-input, linux-kernel, mka, yangcong5
In-Reply-To: <20230520050649.2494497-1-yangcong5@huaqin.corp-partner.google.com>

The ili9882t is a TDDI IC ((Touch with Display Driver)). It requires the
panel reset gpio to be high before i2c commands. Use a longer delay in
post_power_delay_ms to ensure the poweron sequence.

Signed-off-by: Cong Yang <yangcong5@huaqin.corp-partner.google.com>
---
 drivers/hid/i2c-hid/i2c-hid-of-elan.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/hid/i2c-hid/i2c-hid-of-elan.c b/drivers/hid/i2c-hid/i2c-hid-of-elan.c
index 76ddc8be1cbb..dd2435270e73 100644
--- a/drivers/hid/i2c-hid/i2c-hid-of-elan.c
+++ b/drivers/hid/i2c-hid/i2c-hid-of-elan.c
@@ -105,8 +105,15 @@ static const struct elan_i2c_hid_chip_data elan_ekth6915_chip_data = {
 	.hid_descriptor_address = 0x0001,
 };
 
+static const struct elan_i2c_hid_chip_data ilitek_ili9882t_chip_data = {
+	.post_power_delay_ms = 200,
+	.post_gpio_reset_delay_ms = 180,
+	.hid_descriptor_address = 0x0001,
+};
+
 static const struct of_device_id elan_i2c_hid_of_match[] = {
 	{ .compatible = "elan,ekth6915", .data = &elan_ekth6915_chip_data },
+	{ .compatible = "ilitek,ili9882t", .data = &ilitek_ili9882t_chip_data },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, elan_i2c_hid_of_match);
-- 
2.25.1


^ permalink raw reply related

* [v2 2/2] dt-bindings: input: touchscreen: Add ilitek 9882T touchscreen chip
From: Cong Yang @ 2023-05-20  5:06 UTC (permalink / raw)
  To: dianders
  Cc: benjamin.tissoires, devicetree, dmitry.torokhov, hsinyi, jikos,
	linux-input, linux-kernel, mka, yangcong5
In-Reply-To: <20230520050649.2494497-1-yangcong5@huaqin.corp-partner.google.com>

Add an ilitek touch screen chip ili9882t.

Signed-off-by: Cong Yang <yangcong5@huaqin.corp-partner.google.com>
---
 .../devicetree/bindings/input/elan,ekth6915.yaml         | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/input/elan,ekth6915.yaml b/Documentation/devicetree/bindings/input/elan,ekth6915.yaml
index 05e6f2df604c..29eb63b2360b 100644
--- a/Documentation/devicetree/bindings/input/elan,ekth6915.yaml
+++ b/Documentation/devicetree/bindings/input/elan,ekth6915.yaml
@@ -15,11 +15,16 @@ description:
 
 properties:
   compatible:
-    items:
+    oneOf:
       - const: elan,ekth6915
+      - items:
+          - const: elan,ekth6915
+          - const: ilitek,ili9882t
 
   reg:
-    const: 0x10
+    enum:
+      - 0x10
+      - 0x41
 
   interrupts:
     maxItems: 1
-- 
2.25.1


^ permalink raw reply related

* Re: [PATCH 6/7] docs: update some straggling Documentation/arm references
From: Jonathan Corbet @ 2023-05-20 14:12 UTC (permalink / raw)
  To: kernel test robot, linux-doc
  Cc: oe-kbuild-all, linux-kernel, linux-arch, linux-arm-kernel,
	Dmitry Torokhov, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
	Thierry Reding, Uwe Kleine-König, Greg Kroah-Hartman,
	linux-input, linux-sunxi, linux-pwm, linux-serial
In-Reply-To: <202305201023.2DYXmdv3-lkp@intel.com>

kernel test robot <lkp@intel.com> writes:

> Hi Jonathan,
>
> kernel test robot noticed the following build warnings:
>
> [auto build test WARNING on linus/master]
> [also build test WARNING on v6.4-rc2 next-20230519]
> [cannot apply to sunxi/sunxi/for-next arm64/for-next/core thierry-reding-pwm/for-next]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url:    https://github.com/intel-lab-lkp/linux/commits/Jonathan-Corbet/arm-docs-Move-Arm-documentation-to-Documentation-arch/20230520-005124
> base:   linus/master
> patch link:    https://lore.kernel.org/r/20230519164607.38845-7-corbet%40lwn.net
> patch subject: [PATCH 6/7] docs: update some straggling Documentation/arm references
> reproduce:
>         # https://github.com/intel-lab-lkp/linux/commit/3c9885f2702a3319156cfbacedfca658e726213b
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Jonathan-Corbet/arm-docs-Move-Arm-documentation-to-Documentation-arch/20230520-005124
>         git checkout 3c9885f2702a3319156cfbacedfca658e726213b
>         make menuconfig
>         # enable CONFIG_COMPILE_TEST, CONFIG_WARN_MISSING_DOCUMENTS, CONFIG_WARN_ABI_ERRORS
>         make htmldocs
>
> If you fix the issue, kindly add following tag where applicable
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202305201023.2DYXmdv3-lkp@intel.com/
>
> All warnings (new ones prefixed by >>):
>
>>> Warning: MAINTAINERS references a file that doesn't exist: Documentation/arch/arm64/

Sigh...obviously this hunk:

 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 S:	Maintained
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git
-F:	Documentation/arm64/
+F:	Documentation/arch/arm64/
 F:	arch/arm64/
 F:	tools/testing/selftests/arm64/

...got a bit ahead of the game.  I'll take that one out, sorry for the
noise.

jon

^ permalink raw reply

* Re: Quirks needed for Dell Inspiron 7415 2-in-1 touchscreen
From: Alexander E. Patrakov @ 2023-05-20 19:01 UTC (permalink / raw)
  To: Benjamin Tissoires, linux-input
In-Reply-To: <CAN_LGv0cS-mR7HxCfAwO4U9CG+r6mfrxty-woQuYxfvjZ8SBbw@mail.gmail.com>

Hello again,

Please ignore the report quoted below. Everything is working as
expected on linux 6.3.2.

On Sat, Apr 29, 2023 at 5:01 PM Alexander E. Patrakov
<patrakov@gmail.com> wrote:
>
> Hello,
>
> A few days ago, I bought a new laptop, Dell Inspiron 7415 2-in-1. It
> has a touchscreen that works out of the box - until you buy a stylus
> recommended by Dell. The stylus is "Dell Active Pen PN350M", which
> uses Microsoft Pen Protocol.
>
> The problem is that, when I lift the pen off the screen, the touch
> point remains active, but jumps into one of the corners. This
> persists, and makes doing anything in the GUI impossible, until the
> laptop is powered off.
>
> I have looked into hid-multitouch.c, and found that there is a quirk
> that might be relevant: MT_QUIRK_VALID_IS_INRANGE. Unfortunately, it
> does not really help, see below.
>
> The default quirks for this touchscreen are 0x51c10, which means
> MT_QUIRK_ALWAYS_VALID | MT_QUIRK_IGNORE_DUPLICATES | MT_QUIRK_HOVERING
> | MT_QUIRK_CONTACT_CNT_ACCURATE | MT_QUIRK_STICKY_FINGERS |
> MT_QUIRK_WIN8_PTP_BUTTONS. So I guessed I should remove
> MT_QUIRK_ALWAYS_VALID and add MT_QUIRK_VALID_IS_INRANGE, which results
> in 0x51c20.
>
> So:
>
> echo 0x51c20 > /sys/devices/platform/AMDI0010:00/i2c-0/i2c-04F31234:00/0018:04F3:2C68.0004/quirks
>
> Result: the touchscreen now tracks the stylus correctly, but does not
> react to fingers anymore.
>
> I am willing to try kernel patches, but have too much other work to
> try writing myself a new quirk that applies the "in range means valid"
> logic for stylus only.
>
> If you need any other debug info, please tell me.
>
> The /proc/bus/input/devices file contains:
> ============================
> I: Bus=0019 Vendor=0000 Product=0001 Version=0000
> N: Name="Power Button"
> P: Phys=PNP0C0C/button/input0
> S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
> U: Uniq=
> H: Handlers=kbd event0
> B: PROP=0
> B: EV=3
> B: KEY=10000000000000 0
>
> I: Bus=0019 Vendor=0000 Product=0005 Version=0000
> N: Name="Lid Switch"
> P: Phys=PNP0C0D/button/input0
> S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1
> U: Uniq=
> H: Handlers=event1
> B: PROP=0
> B: EV=21
> B: SW=1
>
> I: Bus=0019 Vendor=0000 Product=0003 Version=0000
> N: Name="Sleep Button"
> P: Phys=PNP0C0E/button/input0
> S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input2
> U: Uniq=
> H: Handlers=kbd event2
> B: PROP=0
> B: EV=3
> B: KEY=4000 0 0
>
> I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
> N: Name="AT Translated Set 2 keyboard"
> P: Phys=isa0060/serio0/input0
> S: Sysfs=/devices/platform/i8042/serio0/input/input3
> U: Uniq=
> H: Handlers=sysrq kbd leds event3
> B: PROP=0
> B: EV=120013
> B: KEY=1100f02902000 8380307cf910f001 feffffdfffefffff fffffffffffffffe
> B: MSC=10
> B: LED=7
>
> I: Bus=0019 Vendor=0000 Product=0006 Version=0000
> N: Name="Video Bus"
> P: Phys=LNXVIDEO/video/input0
> S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:10/LNXVIDEO:00/input/input5
> U: Uniq=
> H: Handlers=kbd event4
> B: PROP=0
> B: EV=3
> B: KEY=3e000b00000000 0 0 0
>
> I: Bus=0019 Vendor=0000 Product=0000 Version=0000
> N: Name="DELL Wireless hotkeys"
> P: Phys=dellabce/input0
> S: Sysfs=/devices/virtual/input/input6
> U: Uniq=
> H: Handlers=kbd event5 rfkill
> B: PROP=0
> B: EV=3
> B: KEY=80000000000000 0 0 0
>
> I: Bus=0010 Vendor=001f Product=0001 Version=0100
> N: Name="PC Speaker"
> P: Phys=isa0061/input0
> S: Sysfs=/devices/platform/pcspkr/input/input7
> U: Uniq=
> H: Handlers=kbd event6
> B: PROP=0
> B: EV=40001
> B: SND=6
>
> I: Bus=0019 Vendor=0000 Product=0000 Version=0000
> N: Name="Dell WMI hotkeys"
> P: Phys=
> S: Sysfs=/devices/platform/PNP0C14:00/wmi_bus/wmi_bus-PNP0C14:00/9DBB5994-A997-11DA-B012-B622A1EF5492/input/input18
> U: Uniq=
> H: Handlers=kbd event7 rfkill
> B: PROP=0
> B: EV=13
> B: KEY=800000000000 0 0 101500b00000c00 1200300000 e000000000000 0
> B: MSC=10
>
> I: Bus=0003 Vendor=0c45 Product=6a10 Version=0271
> N: Name="Integrated_Webcam_HD: Integrate"
> P: Phys=usb-0000:03:00.4-1/button
> S: Sysfs=/devices/pci0000:00/0000:00:08.1/0000:03:00.4/usb3/3-1/3-1:1.0/input/input19
> U: Uniq=
> H: Handlers=kbd event8
> B: PROP=0
> B: EV=3
> B: KEY=100000 0 0 0
>
> I: Bus=0000 Vendor=0000 Product=0000 Version=0000
> N: Name="HD-Audio Generic HDMI/DP,pcm=3"
> P: Phys=ALSA
> S: Sysfs=/devices/pci0000:00/0000:00:08.1/0000:03:00.1/sound/card0/input20
> U: Uniq=
> H: Handlers=event9
> B: PROP=0
> B: EV=21
> B: SW=140
>
> I: Bus=0018 Vendor=06cb Product=ce26 Version=0100
> N: Name="DELL0A8C:00 06CB:CE26 Mouse"
> P: Phys=i2c-DELL0A8C:00
> S: Sysfs=/devices/platform/AMDI0010:03/i2c-1/i2c-DELL0A8C:00/0018:06CB:CE26.0005/input/input22
> U: Uniq=
> H: Handlers=event11 mouse0
> B: PROP=0
> B: EV=17
> B: KEY=30000 0 0 0 0
> B: REL=3
> B: MSC=10
>
> I: Bus=0000 Vendor=0000 Product=0000 Version=0000
> N: Name="HD-Audio Generic HDMI/DP,pcm=7"
> P: Phys=ALSA
> S: Sysfs=/devices/pci0000:00/0000:00:08.1/0000:03:00.1/sound/card0/input21
> U: Uniq=
> H: Handlers=event10
> B: PROP=0
> B: EV=21
> B: SW=140
>
> I: Bus=0018 Vendor=06cb Product=ce26 Version=0100
> N: Name="DELL0A8C:00 06CB:CE26 Touchpad"
> P: Phys=i2c-DELL0A8C:00
> S: Sysfs=/devices/platform/AMDI0010:03/i2c-1/i2c-DELL0A8C:00/0018:06CB:CE26.0005/input/input23
> U: Uniq=
> H: Handlers=event12 mouse1
> B: PROP=5
> B: EV=1b
> B: KEY=e520 10000 0 0 0 0
> B: ABS=2e0800000000003
> B: MSC=20
>
> I: Bus=0018 Vendor=04f3 Product=2c68 Version=0100
> N: Name="04F31234:00 04F3:2C68"
> P: Phys=i2c-04F31234:00
> S: Sysfs=/devices/platform/AMDI0010:00/i2c-0/i2c-04F31234:00/0018:04F3:2C68.0004/input/input25
> U: Uniq=
> H: Handlers=event13 mouse2
> B: PROP=2
> B: EV=1b
> B: KEY=400 0 0 0 0 0
> B: ABS=3273800000000003
> B: MSC=20
>
> I: Bus=0018 Vendor=04f3 Product=2c68 Version=0100
> N: Name="04F31234:00 04F3:2C68 UNKNOWN"
> P: Phys=i2c-04F31234:00
> S: Sysfs=/devices/platform/AMDI0010:00/i2c-0/i2c-04F31234:00/0018:04F3:2C68.0004/input/input26
> U: Uniq=
> H: Handlers=event14
> B: PROP=0
> B: EV=9
> B: ABS=10000000000
>
> I: Bus=0018 Vendor=04f3 Product=2c68 Version=0100
> N: Name="04F31234:00 04F3:2C68 UNKNOWN"
> P: Phys=i2c-04F31234:00
> S: Sysfs=/devices/platform/AMDI0010:00/i2c-0/i2c-04F31234:00/0018:04F3:2C68.0004/input/input27
> U: Uniq=
> H: Handlers=event15
> B: PROP=0
> B: EV=100001
>
> I: Bus=0018 Vendor=04f3 Product=2c68 Version=0100
> N: Name="04F31234:00 04F3:2C68 Stylus"
> P: Phys=i2c-04F31234:00
> S: Sysfs=/devices/platform/AMDI0010:00/i2c-0/i2c-04F31234:00/0018:04F3:2C68.0004/input/input28
> U: Uniq=
> H: Handlers=event16 mouse3
> B: PROP=2
> B: EV=1b
> B: KEY=c03 0 0 0 0 0
> B: ABS=1000d000003
> B: MSC=10
>
> I: Bus=0000 Vendor=0000 Product=0000 Version=0000
> N: Name="HD-Audio Generic Headphone Mic"
> P: Phys=ALSA
> S: Sysfs=/devices/pci0000:00/0000:00:08.1/0000:03:00.6/sound/card1/input31
> U: Uniq=
> H: Handlers=event17
> B: PROP=0
> B: EV=21
> B: SW=4
> ============================
>
> Here is some udevadm info, just in case, too:
>
> ============================
>
> Udevadm info starts with the device specified by the devpath and then
> walks up the chain of parent devices. It prints for every device
> found, all possible attributes in the udev rules key format.
> A rule to match, can be composed by the attributes of the device
> and the attributes from one single parent device.
>
>   looking at device
> '/devices/platform/AMDI0010:00/i2c-0/i2c-04F31234:00/0018:04F3:2C68.0004/input/input28':
>     KERNEL=="input28"
>     SUBSYSTEM=="input"
>     DRIVER==""
>     ATTR{capabilities/abs}=="1000d000003"
>     ATTR{capabilities/ev}=="1b"
>     ATTR{capabilities/ff}=="0"
>     ATTR{capabilities/key}=="c03 0 0 0 0 0"
>     ATTR{capabilities/led}=="0"
>     ATTR{capabilities/msc}=="10"
>     ATTR{capabilities/rel}=="0"
>     ATTR{capabilities/snd}=="0"
>     ATTR{capabilities/sw}=="0"
>     ATTR{id/bustype}=="0018"
>     ATTR{id/product}=="2c68"
>     ATTR{id/vendor}=="04f3"
>     ATTR{id/version}=="0100"
>     ATTR{inhibited}=="0"
>     ATTR{name}=="04F31234:00 04F3:2C68 Stylus"
>     ATTR{phys}=="i2c-04F31234:00"
>     ATTR{power/control}=="auto"
>     ATTR{power/runtime_active_time}=="0"
>     ATTR{power/runtime_status}=="unsupported"
>     ATTR{power/runtime_suspended_time}=="0"
>     ATTR{properties}=="2"
>     ATTR{uniq}==""
>
>   looking at parent device
> '/devices/platform/AMDI0010:00/i2c-0/i2c-04F31234:00/0018:04F3:2C68.0004':
>     KERNELS=="0018:04F3:2C68.0004"
>     SUBSYSTEMS=="hid"
>     DRIVERS=="hid-multitouch"
>     ATTRS{country}=="00"
>     ATTRS{power/control}=="auto"
>     ATTRS{power/runtime_active_time}=="0"
>     ATTRS{power/runtime_status}=="unsupported"
>     ATTRS{power/runtime_suspended_time}=="0"
>     ATTRS{quirks}=="334880"
>
>   looking at parent device
> '/devices/platform/AMDI0010:00/i2c-0/i2c-04F31234:00':
>     KERNELS=="i2c-04F31234:00"
>     SUBSYSTEMS=="i2c"
>     DRIVERS=="i2c_hid_acpi"
>     ATTRS{name}=="04F31234:00"
>     ATTRS{power/control}=="auto"
>     ATTRS{power/runtime_active_time}=="0"
>     ATTRS{power/runtime_status}=="unsupported"
>     ATTRS{power/runtime_suspended_time}=="0"
>
>   looking at parent device '/devices/platform/AMDI0010:00/i2c-0':
>     KERNELS=="i2c-0"
>     SUBSYSTEMS=="i2c"
>     DRIVERS==""
>     ATTRS{delete_device}=="(not readable)"
>     ATTRS{name}=="Synopsys DesignWare I2C adapter"
>     ATTRS{new_device}=="(not readable)"
>     ATTRS{waiting_for_supplier}=="0"
>
>   looking at parent device '/devices/platform/AMDI0010:00':
>     KERNELS=="AMDI0010:00"
>     SUBSYSTEMS=="platform"
>     DRIVERS=="i2c_designware"
>     ATTRS{driver_override}=="(null)"
>     ATTRS{power/autosuspend_delay_ms}=="1000"
>     ATTRS{power/control}=="auto"
>     ATTRS{power/runtime_active_time}=="1809937"
>     ATTRS{power/runtime_status}=="active"
>     ATTRS{power/runtime_suspended_time}=="74571"
>
>   looking at parent device '/devices/platform':
>     KERNELS=="platform"
>     SUBSYSTEMS==""
>     DRIVERS==""
>     ATTRS{power/control}=="auto"
>     ATTRS{power/runtime_active_time}=="0"
>     ATTRS{power/runtime_status}=="unsupported"
>     ATTRS{power/runtime_suspended_time}=="0"
>
> ============================


-- 
Alexander E. Patrakov

^ permalink raw reply

* [PATCH 0/2] mms114: add support for touch keys
From: Artur Weber @ 2023-05-21 14:58 UTC (permalink / raw)
  To: Dmitry Torokhov, Rob Herring
  Cc: Krzysztof Kozlowski, Linus Walleij, linux-input, devicetree,
	linux-kernel, ~postmarketos/upstreaming, Artur Weber

MELFAS MMS114 and similar touchscreens have support for touch keys.
Enable support of them in the driver. The keycodes to emit can be
controlled by the linux,keycodes DT property.

Signed-off-by: Artur Weber <aweber.kernel@gmail.com>

Artur Weber (2):
  dt-bindings: mms114: Add linux,keycodes property for touch keys
  Input: mms114 - add support for touch keys

 .../input/touchscreen/melfas,mms114.yaml      |  5 ++
 drivers/input/touchscreen/mms114.c            | 88 +++++++++++++++++--
 2 files changed, 86 insertions(+), 7 deletions(-)


base-commit: f219050af06d83f436945880fc9c04db3bb2860f
-- 
2.40.1


^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox