* [PATCH 02/10] auxdisplay/ht16k33: Remove struct backlight_ops.check_fb
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann,
Robin van der Gracht
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
The driver sets struct fb_info.bl_dev to the correct backlight
device. Thus rely on the backlight core code to match backlight
and framebuffer devices, and remove the extra check_fb function
from struct backlight_ops.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Robin van der Gracht <robin@protonic.nl>
---
drivers/auxdisplay/ht16k33.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/drivers/auxdisplay/ht16k33.c b/drivers/auxdisplay/ht16k33.c
index a90430b7d07ba..0a858db32486b 100644
--- a/drivers/auxdisplay/ht16k33.c
+++ b/drivers/auxdisplay/ht16k33.c
@@ -325,16 +325,8 @@ static int ht16k33_bl_update_status(struct backlight_device *bl)
return ht16k33_brightness_set(priv, brightness);
}
-static int ht16k33_bl_check_fb(struct backlight_device *bl, struct fb_info *fi)
-{
- struct ht16k33_priv *priv = bl_get_data(bl);
-
- return (fi == NULL) || (fi->par == priv);
-}
-
static const struct backlight_ops ht16k33_bl_ops = {
.update_status = ht16k33_bl_update_status,
- .check_fb = ht16k33_bl_check_fb,
};
/*
--
2.43.0
^ permalink raw reply related
* [PATCH 04/10] hid/hid-picolcd: Remove struct backlight_ops.check_fb
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann,
Bruno Prémont
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
The driver sets struct fb_info.bl_dev to the correct backlight
device. Thus rely on the backlight core code to match backlight
and framebuffer devices, and remove the extra check_fb function
from struct backlight_ops.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Cc: "Bruno Prémont" <bonbons@linux-vserver.org>
---
drivers/hid/hid-picolcd_backlight.c | 7 -------
drivers/hid/hid-picolcd_fb.c | 4 ++++
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/hid/hid-picolcd_backlight.c b/drivers/hid/hid-picolcd_backlight.c
index 5bd2a8c4bbd66..08d16917eb60b 100644
--- a/drivers/hid/hid-picolcd_backlight.c
+++ b/drivers/hid/hid-picolcd_backlight.c
@@ -9,7 +9,6 @@
#include <linux/hid.h>
-#include <linux/fb.h>
#include <linux/backlight.h>
#include "hid-picolcd.h"
@@ -39,15 +38,9 @@ static int picolcd_set_brightness(struct backlight_device *bdev)
return 0;
}
-static int picolcd_check_bl_fb(struct backlight_device *bdev, struct fb_info *fb)
-{
- return fb && fb == picolcd_fbinfo((struct picolcd_data *)bl_get_data(bdev));
-}
-
static const struct backlight_ops picolcd_blops = {
.update_status = picolcd_set_brightness,
.get_brightness = picolcd_get_brightness,
- .check_fb = picolcd_check_bl_fb,
};
int picolcd_init_backlight(struct picolcd_data *data, struct hid_report *report)
diff --git a/drivers/hid/hid-picolcd_fb.c b/drivers/hid/hid-picolcd_fb.c
index d7dddd99d325e..4500f6e03d32f 100644
--- a/drivers/hid/hid-picolcd_fb.c
+++ b/drivers/hid/hid-picolcd_fb.c
@@ -493,6 +493,10 @@ int picolcd_init_framebuffer(struct picolcd_data *data)
info->fix = picolcdfb_fix;
info->fix.smem_len = PICOLCDFB_SIZE*8;
+#ifdef CONFIG_HID_PICOLCD_BACKLIGHT
+ info->bl_dev = data->backlight;
+#endif
+
fbdata = info->par;
spin_lock_init(&fbdata->lock);
fbdata->picolcd = data;
--
2.43.0
^ permalink raw reply related
* [PATCH 03/10] hid/hid-picolcd: Fix initialization order
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann,
Bruno Prémont
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
For drivers that support backlight, LCD and fbdev devices, fbdev has
to be initialized last. See documentation for struct fbinfo.bl_dev.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Cc: "Bruno Prémont" <bonbons@linux-vserver.org>
---
drivers/hid/hid-picolcd_core.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/hid/hid-picolcd_core.c b/drivers/hid/hid-picolcd_core.c
index bbda231a7ce30..5ddebe25eb91f 100644
--- a/drivers/hid/hid-picolcd_core.c
+++ b/drivers/hid/hid-picolcd_core.c
@@ -474,11 +474,6 @@ static int picolcd_probe_lcd(struct hid_device *hdev, struct picolcd_data *data)
if (error)
goto err;
- /* Set up the framebuffer device */
- error = picolcd_init_framebuffer(data);
- if (error)
- goto err;
-
/* Setup lcd class device */
error = picolcd_init_lcd(data, picolcd_out_report(REPORT_CONTRAST, hdev));
if (error)
@@ -489,6 +484,11 @@ static int picolcd_probe_lcd(struct hid_device *hdev, struct picolcd_data *data)
if (error)
goto err;
+ /* Set up the framebuffer device */
+ error = picolcd_init_framebuffer(data);
+ if (error)
+ goto err;
+
/* Setup the LED class devices */
error = picolcd_init_leds(data, picolcd_out_report(REPORT_LED_STATE, hdev));
if (error)
@@ -502,9 +502,9 @@ static int picolcd_probe_lcd(struct hid_device *hdev, struct picolcd_data *data)
return 0;
err:
picolcd_exit_leds(data);
+ picolcd_exit_framebuffer(data);
picolcd_exit_backlight(data);
picolcd_exit_lcd(data);
- picolcd_exit_framebuffer(data);
picolcd_exit_cir(data);
picolcd_exit_keys(data);
return error;
@@ -623,9 +623,9 @@ static void picolcd_remove(struct hid_device *hdev)
/* Cleanup LED */
picolcd_exit_leds(data);
/* Clean up the framebuffer */
+ picolcd_exit_framebuffer(data);
picolcd_exit_backlight(data);
picolcd_exit_lcd(data);
- picolcd_exit_framebuffer(data);
/* Cleanup input */
picolcd_exit_cir(data);
picolcd_exit_keys(data);
--
2.43.0
^ permalink raw reply related
* [PATCH 05/10] backlight/aat2870-backlight: Remove struct backlight.check_fb
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
The driver's implementation of check_fb always returns true, which
is the default if no implementation has been set. So remove the code
from the driver.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/video/backlight/aat2870_bl.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/video/backlight/aat2870_bl.c b/drivers/video/backlight/aat2870_bl.c
index 81fde3abb92c4..b4c3354a1a8a6 100644
--- a/drivers/video/backlight/aat2870_bl.c
+++ b/drivers/video/backlight/aat2870_bl.c
@@ -12,7 +12,6 @@
#include <linux/platform_device.h>
#include <linux/mutex.h>
#include <linux/delay.h>
-#include <linux/fb.h>
#include <linux/backlight.h>
#include <linux/mfd/aat2870.h>
@@ -90,15 +89,9 @@ static int aat2870_bl_update_status(struct backlight_device *bd)
return 0;
}
-static int aat2870_bl_check_fb(struct backlight_device *bd, struct fb_info *fi)
-{
- return 1;
-}
-
static const struct backlight_ops aat2870_bl_ops = {
.options = BL_CORE_SUSPENDRESUME,
.update_status = aat2870_bl_update_status,
- .check_fb = aat2870_bl_check_fb,
};
static int aat2870_bl_probe(struct platform_device *pdev)
--
2.43.0
^ permalink raw reply related
* [PATCH 06/10] backlight/pwm-backlight: Remove struct backlight_ops.check_fb
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann,
Uwe Kleine-König
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
The internal check_fb callback from struct pwm_bl_data is never
implemented. thus the driver's implementation of check_fb always
returns true, which is the backlight core's default if no
implementation has been set. So remove the code from the driver.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
---
drivers/video/backlight/pwm_bl.c | 12 ------------
include/linux/pwm_backlight.h | 1 -
2 files changed, 13 deletions(-)
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index ffcebf6aa76a9..61d30bc98eea5 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -11,7 +11,6 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
-#include <linux/fb.h>
#include <linux/backlight.h>
#include <linux/err.h>
#include <linux/pwm.h>
@@ -34,7 +33,6 @@ struct pwm_bl_data {
int brightness);
void (*notify_after)(struct device *,
int brightness);
- int (*check_fb)(struct device *, struct fb_info *);
void (*exit)(struct device *);
};
@@ -129,17 +127,8 @@ static int pwm_backlight_update_status(struct backlight_device *bl)
return 0;
}
-static int pwm_backlight_check_fb(struct backlight_device *bl,
- struct fb_info *info)
-{
- struct pwm_bl_data *pb = bl_get_data(bl);
-
- return !pb->check_fb || pb->check_fb(pb->dev, info);
-}
-
static const struct backlight_ops pwm_backlight_ops = {
.update_status = pwm_backlight_update_status,
- .check_fb = pwm_backlight_check_fb,
};
#ifdef CONFIG_OF
@@ -482,7 +471,6 @@ static int pwm_backlight_probe(struct platform_device *pdev)
pb->notify = data->notify;
pb->notify_after = data->notify_after;
- pb->check_fb = data->check_fb;
pb->exit = data->exit;
pb->dev = &pdev->dev;
pb->enabled = false;
diff --git a/include/linux/pwm_backlight.h b/include/linux/pwm_backlight.h
index cdd2ac366bc72..0bf80e98d5b40 100644
--- a/include/linux/pwm_backlight.h
+++ b/include/linux/pwm_backlight.h
@@ -19,7 +19,6 @@ struct platform_pwm_backlight_data {
int (*notify)(struct device *dev, int brightness);
void (*notify_after)(struct device *dev, int brightness);
void (*exit)(struct device *dev);
- int (*check_fb)(struct device *dev, struct fb_info *info);
};
#endif
--
2.43.0
^ permalink raw reply related
* [PATCH 07/10] fbdev/sh_mobile_lcdc_fb: Remove struct backlight_ops.check_fb
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
The driver sets struct fb_info.bl_dev to the correct backlight
device. Thus rely on the backlight core code to match backlight
and framebuffer devices, and remove the extra check_fb function
from struct backlight_ops.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/video/fbdev/sh_mobile_lcdcfb.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/video/fbdev/sh_mobile_lcdcfb.c b/drivers/video/fbdev/sh_mobile_lcdcfb.c
index eb2297b37504c..bf34c8ec1a26c 100644
--- a/drivers/video/fbdev/sh_mobile_lcdcfb.c
+++ b/drivers/video/fbdev/sh_mobile_lcdcfb.c
@@ -2140,17 +2140,10 @@ static int sh_mobile_lcdc_get_brightness(struct backlight_device *bdev)
return ch->bl_brightness;
}
-static int sh_mobile_lcdc_check_fb(struct backlight_device *bdev,
- struct fb_info *info)
-{
- return (info->bl_dev == bdev);
-}
-
static const struct backlight_ops sh_mobile_lcdc_bl_ops = {
.options = BL_CORE_SUSPENDRESUME,
.update_status = sh_mobile_lcdc_update_bl,
.get_brightness = sh_mobile_lcdc_get_brightness,
- .check_fb = sh_mobile_lcdc_check_fb,
};
static struct backlight_device *sh_mobile_lcdc_bl_probe(struct device *parent,
--
2.43.0
^ permalink raw reply related
* [PATCH 09/10] fbdev/ssd1307fb: Remove struct backlight_ops.check_fb
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
The driver sets struct fb_info.bl_dev to the correct backlight
device. Thus rely on the backlight core code to match backlight
and framebuffer devices, and remove the extra check_fb function
from struct backlight_ops.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/video/fbdev/ssd1307fb.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
index 0d1590c61eb06..3f30af3c059e0 100644
--- a/drivers/video/fbdev/ssd1307fb.c
+++ b/drivers/video/fbdev/ssd1307fb.c
@@ -530,17 +530,10 @@ static int ssd1307fb_get_brightness(struct backlight_device *bdev)
return par->contrast;
}
-static int ssd1307fb_check_fb(struct backlight_device *bdev,
- struct fb_info *info)
-{
- return (info->bl_dev == bdev);
-}
-
static const struct backlight_ops ssd1307fb_bl_ops = {
.options = BL_CORE_SUSPENDRESUME,
.update_status = ssd1307fb_update_bl,
.get_brightness = ssd1307fb_get_brightness,
- .check_fb = ssd1307fb_check_fb,
};
static struct ssd1307fb_deviceinfo ssd1307fb_ssd1305_deviceinfo = {
--
2.43.0
^ permalink raw reply related
* [PATCH 08/10] fbdev/ssd1307fb: Init backlight before registering framebuffer
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
For drivers that support backlight, LCD and fbdev devices, fbdev has
to be initialized last. See documentation for struct fbinfo.bl_dev.
The backlight name's index number comes from register_framebuffer(),
which now happens after initializing the backlight device. So like
in all other backlight drivers, we now give the backlight device a
generic name without the fbdev index.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/video/fbdev/ssd1307fb.c | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)
diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
index 1a4f90ea7d5a8..0d1590c61eb06 100644
--- a/drivers/video/fbdev/ssd1307fb.c
+++ b/drivers/video/fbdev/ssd1307fb.c
@@ -594,7 +594,6 @@ static int ssd1307fb_probe(struct i2c_client *client)
{
struct device *dev = &client->dev;
struct backlight_device *bl;
- char bl_name[12];
struct fb_info *info;
struct fb_deferred_io *ssd1307fb_defio;
u32 vmem_size;
@@ -733,31 +732,30 @@ static int ssd1307fb_probe(struct i2c_client *client)
if (ret)
goto regulator_enable_error;
- ret = register_framebuffer(info);
- if (ret) {
- dev_err(dev, "Couldn't register the framebuffer\n");
- goto panel_init_error;
- }
-
- snprintf(bl_name, sizeof(bl_name), "ssd1307fb%d", info->node);
- bl = backlight_device_register(bl_name, dev, par, &ssd1307fb_bl_ops,
+ bl = backlight_device_register("ssd1307fb-bl", dev, par, &ssd1307fb_bl_ops,
NULL);
if (IS_ERR(bl)) {
ret = PTR_ERR(bl);
dev_err(dev, "unable to register backlight device: %d\n", ret);
- goto bl_init_error;
+ goto panel_init_error;
+ }
+ info->bl_dev = bl;
+
+ ret = register_framebuffer(info);
+ if (ret) {
+ dev_err(dev, "Couldn't register the framebuffer\n");
+ goto fb_init_error;
}
bl->props.brightness = par->contrast;
bl->props.max_brightness = MAX_CONTRAST;
- info->bl_dev = bl;
dev_info(dev, "fb%d: %s framebuffer device registered, using %d bytes of video memory\n", info->node, info->fix.id, vmem_size);
return 0;
-bl_init_error:
- unregister_framebuffer(info);
+fb_init_error:
+ backlight_device_unregister(bl);
panel_init_error:
pwm_disable(par->pwm);
pwm_put(par->pwm);
--
2.43.0
^ permalink raw reply related
* [PATCH 10/10] backlight: Add controls_device callback to struct backlight_ops
From: Thomas Zimmermann @ 2024-02-12 16:16 UTC (permalink / raw)
To: lee, daniel.thompson, jingoohan1, deller, javierm
Cc: dri-devel, linux-fbdev, linux-input, linux-pwm, Thomas Zimmermann
In-Reply-To: <20240212162645.5661-1-tzimmermann@suse.de>
Replace check_fb with controls_device in struct backlight_ops. The
new callback interface takes a Linux device instead of a framebuffer.
Resolves one of the dependencies of backlight.h on fb.h.
The few drivers that had custom implementations of check_fb can easily
use the framebuffer's Linux device instead. Update them accordingly.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/video/backlight/backlight.c | 2 +-
drivers/video/backlight/bd6107.c | 12 ++++++------
drivers/video/backlight/gpio_backlight.c | 12 ++++++------
drivers/video/backlight/lv5207lp.c | 12 ++++++------
include/linux/backlight.h | 16 ++++++++--------
5 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
index 48844a4f28ad3..18a0ac4bd6005 100644
--- a/drivers/video/backlight/backlight.c
+++ b/drivers/video/backlight/backlight.c
@@ -111,7 +111,7 @@ static int fb_notifier_callback(struct notifier_block *self,
if (!bd->ops)
goto out;
- else if (bd->ops->check_fb && !bd->ops->check_fb(bd, info))
+ else if (bd->ops->controls_device && !bd->ops->controls_device(bd, info->device))
goto out;
#if IS_ENABLED(CONFIG_FB_BACKLIGHT)
else if (info->bl_dev && info->bl_dev != bd)
diff --git a/drivers/video/backlight/bd6107.c b/drivers/video/backlight/bd6107.c
index c95a12bf0ce26..d124ede084ef9 100644
--- a/drivers/video/backlight/bd6107.c
+++ b/drivers/video/backlight/bd6107.c
@@ -99,18 +99,18 @@ static int bd6107_backlight_update_status(struct backlight_device *backlight)
return 0;
}
-static int bd6107_backlight_check_fb(struct backlight_device *backlight,
- struct fb_info *info)
+static bool bd6107_backlight_controls_device(struct backlight_device *backlight,
+ struct device *display_dev)
{
struct bd6107 *bd = bl_get_data(backlight);
- return !bd->pdata->dev || bd->pdata->dev == info->device;
+ return !bd->pdata->dev || bd->pdata->dev == display_dev;
}
static const struct backlight_ops bd6107_backlight_ops = {
- .options = BL_CORE_SUSPENDRESUME,
- .update_status = bd6107_backlight_update_status,
- .check_fb = bd6107_backlight_check_fb,
+ .options = BL_CORE_SUSPENDRESUME,
+ .update_status = bd6107_backlight_update_status,
+ .controls_device = bd6107_backlight_controls_device,
};
static int bd6107_probe(struct i2c_client *client)
diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c
index d28c30b2a35d2..c0cff685ea848 100644
--- a/drivers/video/backlight/gpio_backlight.c
+++ b/drivers/video/backlight/gpio_backlight.c
@@ -30,18 +30,18 @@ static int gpio_backlight_update_status(struct backlight_device *bl)
return 0;
}
-static int gpio_backlight_check_fb(struct backlight_device *bl,
- struct fb_info *info)
+static bool gpio_backlight_controls_device(struct backlight_device *bl,
+ struct device *display_dev)
{
struct gpio_backlight *gbl = bl_get_data(bl);
- return !gbl->dev || gbl->dev == info->device;
+ return !gbl->dev || gbl->dev == display_dev;
}
static const struct backlight_ops gpio_backlight_ops = {
- .options = BL_CORE_SUSPENDRESUME,
- .update_status = gpio_backlight_update_status,
- .check_fb = gpio_backlight_check_fb,
+ .options = BL_CORE_SUSPENDRESUME,
+ .update_status = gpio_backlight_update_status,
+ .controls_device = gpio_backlight_controls_device,
};
static int gpio_backlight_probe(struct platform_device *pdev)
diff --git a/drivers/video/backlight/lv5207lp.c b/drivers/video/backlight/lv5207lp.c
index 1f1d06b4e119a..0cf00fee0f605 100644
--- a/drivers/video/backlight/lv5207lp.c
+++ b/drivers/video/backlight/lv5207lp.c
@@ -62,18 +62,18 @@ static int lv5207lp_backlight_update_status(struct backlight_device *backlight)
return 0;
}
-static int lv5207lp_backlight_check_fb(struct backlight_device *backlight,
- struct fb_info *info)
+static bool lv5207lp_backlight_controls_device(struct backlight_device *backlight,
+ struct device *display_dev)
{
struct lv5207lp *lv = bl_get_data(backlight);
- return !lv->pdata->dev || lv->pdata->dev == info->device;
+ return !lv->pdata->dev || lv->pdata->dev == display_dev;
}
static const struct backlight_ops lv5207lp_backlight_ops = {
- .options = BL_CORE_SUSPENDRESUME,
- .update_status = lv5207lp_backlight_update_status,
- .check_fb = lv5207lp_backlight_check_fb,
+ .options = BL_CORE_SUSPENDRESUME,
+ .update_status = lv5207lp_backlight_update_status,
+ .controls_device = lv5207lp_backlight_controls_device,
};
static int lv5207lp_probe(struct i2c_client *client)
diff --git a/include/linux/backlight.h b/include/linux/backlight.h
index 614653e07e3a8..2db4c70053c46 100644
--- a/include/linux/backlight.h
+++ b/include/linux/backlight.h
@@ -13,6 +13,7 @@
#include <linux/fb.h>
#include <linux/mutex.h>
#include <linux/notifier.h>
+#include <linux/types.h>
/**
* enum backlight_update_reason - what method was used to update backlight
@@ -110,7 +111,6 @@ enum backlight_scale {
};
struct backlight_device;
-struct fb_info;
/**
* struct backlight_ops - backlight operations
@@ -160,18 +160,18 @@ struct backlight_ops {
int (*get_brightness)(struct backlight_device *);
/**
- * @check_fb: Check the framebuffer device.
+ * @controls_device: Check against the display device
*
- * Check if given framebuffer device is the one bound to this backlight.
- * This operation is optional and if not implemented it is assumed that the
- * fbdev is always the one bound to the backlight.
+ * Check if the backlight controls the given display device. This
+ * operation is optional and if not implemented it is assumed that
+ * the display is always the one controlled by the backlight.
*
* RETURNS:
*
- * If info is NULL or the info matches the fbdev bound to the backlight return true.
- * If info does not match the fbdev bound to the backlight return false.
+ * If display_dev is NULL or display_dev matches the device controlled by
+ * the backlight, return true. Otherwise return false.
*/
- int (*check_fb)(struct backlight_device *bd, struct fb_info *info);
+ bool (*controls_device)(struct backlight_device *bd, struct device *display_dev);
};
/**
--
2.43.0
^ permalink raw reply related
* Re: [PATCH RFC bpf-next 0/9] allow HID-BPF to do device IOs
From: Benjamin Tissoires @ 2024-02-12 16:47 UTC (permalink / raw)
To: Toke Høiland-Jørgensen
Cc: Benjamin Tissoires, Alexei Starovoitov, Daniel Borkmann,
John Fastabend, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, KP Singh,
Stanislav Fomichev, Hao Luo, Jiri Olsa, Jiri Kosina,
Jonathan Corbet, Shuah Khan, bpf, linux-kernel, linux-input,
linux-doc, linux-kselftest
In-Reply-To: <875xyxva9u.fsf@toke.dk>
On Fri, Feb 9, 2024 at 6:05 PM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
>
> Benjamin Tissoires <benjamin.tissoires@redhat.com> writes:
>
> > On Fri, Feb 9, 2024 at 4:42 PM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
> >>
> >> Benjamin Tissoires <bentiss@kernel.org> writes:
> >>
> >> > [Putting this as a RFC because I'm pretty sure I'm not doing the things
> >> > correctly at the BPF level.]
> >> > [Also using bpf-next as the base tree as there will be conflicting
> >> > changes otherwise]
> >> >
> >> > Ideally I'd like to have something similar to bpf_timers, but not
> >> > in soft IRQ context. So I'm emulating this with a sleepable
> >> > bpf_tail_call() (see "HID: bpf: allow to defer work in a delayed
> >> > workqueue").
> >>
> >> Why implement a new mechanism? Sounds like what you need is essentially
> >> the bpf_timer functionality, just running in a different context, right?
> >
> > Heh, that's exactly why I put in a RFC :)
> >
> > So yes, the bpf_timer approach is cleaner, but I need it in a
> > workqueue, as a hrtimer in a softIRQ would prevent me to kzalloc and
> > wait for the device.
>
> Right, makes sense.
>
> >> So why not just add a flag to the timer setup that controls the callback
> >> context? I've been toying with something similar for restarting XDP TX
> >> for my queueing patch series (though I'm not sure if this will actually
> >> end up being needed in the end):
> >>
> >> https://git.kernel.org/pub/scm/linux/kernel/git/toke/linux.git/commit/?h=xdp-queueing-08&id=54bc201a358d1ac6ebfe900099315bbd0a76e862
> >>
> >
> > Oh, nice. Good idea. But would it be OK to have a "timer-like" where
> > it actually defers the job in a workqueue instead of using an hrtimer?
>
> That's conceptually still a timer, though, isn't it? I.e., it's a
> mechanism whereby you specify a callback and a delay, and bpf_timer
> ensures that your callback is called after that delay. IMO it's totally
> congruent with that API to be able to specify a different execution
> context as part of the timer setup.
Yep :)
There is still a problem I wasn't able to fix over the week end and
today. How can I tell the verifier that the callback is sleepable,
when the tracing function that called the timer_start() function is
not?
(more on that below).
>
> As for how to implement it, I suspect the easiest may be something
> similar to what the patch I linked above does: keep the hrtimer, and
> just have a different (kernel) callback function when the timer fires
> which does an immediate schedule_work() (without the _delayed) and then
> runs the BPF callback in that workqueue. I.e., keep the delay handling
> the way the existing bpf_timer implementation does it, and just add an
> indirection to start the workqueue in the kernel dispatch code.
Sounds good, especially given that's roughly how the delayed_timers
are implemented.
>
> > I thought I would have to rewrite the entire bpf_timer approach
> > without the softIRQ, but if I can just add a new flag, that will make
> > things way simpler for me.
>
> IMO that would be fine. You may want to wait for the maintainers to
> chime in before going down this route, though :)
>
> > This however raises another issue if I were to use the bpf_timers: now
> > the HID-BPF kfuncs will not be available as they are only available to
> > tracing prog types. And when I tried to call them from a bpf_timer (in
> > softIRQ) they were not available.
>
> IIUC, the bpf_timer callback is just a function (subprog) from the
> verifier PoV, so it is verified as whatever program type is creating the
> timer. So in other words, as long as you setup the timer from inside a
> tracing prog type, you should have access to all the same kfuncs, I
> think?
Yep, you are correct. But as mentioned above, I am now in trouble with
the sleepable state:
- I need to call timer_start() from a non sleepable tracing function
(I'm in hard IRQ when dealing with a physical device)
- but then, ideally, the callback function needs to be tagged as a
sleepable one, so I can export my kfuncs which are doing kzalloc and
device IO as such.
However, I can not really teach the BPF verifier to do so:
- it seems to check for the callback first when it is loaded, and
there is no SEC() equivalent for static functions
- libbpf doesn't have access to the callback as a prog as it has to be
a static function, and thus isn't exported as a full-blown prog.
- the verifier only checks for the callback when dealing with
BPF_FUNC_timer_set_callback, which doesn't have a "flag" argument
(though the validation of the callback has already been done while
checking it first, so we are already too late to change the sleppable
state of the callback)
Right now, the only OK-ish version I have is declaring the kfunc as
non-sleepable, but checking that we are in a different context than
the IRQ of the initial event. This way, I am not crashing if this
function is called from the initial IRQ, but will still crash if used
outside of the hid context.
This is not satisfactory, but I feel like it's going to be hard to
teach the verifier that the callback function is sleepable in that
case (maybe we could suffix the callback name, like we do for
arguments, but this is not very clean either).
Cheers,
Benjamin
^ permalink raw reply
* Re: [PATCH 06/10] backlight/pwm-backlight: Remove struct backlight_ops.check_fb
From: Uwe Kleine-König @ 2024-02-12 17:25 UTC (permalink / raw)
To: Thomas Zimmermann
Cc: lee, daniel.thompson, jingoohan1, deller, javierm, dri-devel,
linux-fbdev, linux-input, linux-pwm
In-Reply-To: <20240212162645.5661-7-tzimmermann@suse.de>
[-- Attachment #1: Type: text/plain, Size: 734 bytes --]
Hello Thomas,
On Mon, Feb 12, 2024 at 05:16:39PM +0100, Thomas Zimmermann wrote:
> The internal check_fb callback from struct pwm_bl_data is never
> implemented. thus the driver's implementation of check_fb always
> returns true, which is the backlight core's default if no
> implementation has been set. So remove the code from the driver.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Looks reasonable.
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | https://www.pengutronix.de/ |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply
* [PATCH v7 2/5] dt-bindings: input: cirrus,cs40l50: Add initial DT binding
From: James Ogletree @ 2024-02-12 17:31 UTC (permalink / raw)
To: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, lee,
broonie, jeff
Cc: patches, linux-sound, linux-input, devicetree, James Ogletree,
Krzysztof Kozlowski
In-Reply-To: <20240212173111.771107-1-jogletre@opensource.cirrus.com>
The CS40L50 is a haptic driver with waveform memory,
integrated DSP, and closed-loop algorithms.
Add a YAML DT binding document for this device.
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: James Ogletree <jogletre@opensource.cirrus.com>
---
.../bindings/input/cirrus,cs40l50.yaml | 70 +++++++++++++++++++
MAINTAINERS | 8 +++
2 files changed, 78 insertions(+)
create mode 100644 Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml
diff --git a/Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml b/Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml
new file mode 100644
index 000000000000..6a5bdafed56b
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml
@@ -0,0 +1,70 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/cirrus,cs40l50.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Cirrus Logic CS40L50 Advanced Haptic Driver
+
+maintainers:
+ - James Ogletree <james.ogletree@cirrus.com>
+
+description:
+ CS40L50 is a haptic driver with waveform memory,
+ integrated DSP, and closed-loop algorithms.
+
+properties:
+ compatible:
+ enum:
+ - cirrus,cs40l50
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ reset-gpios:
+ maxItems: 1
+
+ va-supply:
+ description: Power supply for internal analog circuits.
+
+ vp-supply:
+ description: Power supply for always-on circuits.
+
+ vio-supply:
+ description: Power supply for digital input/output.
+
+ vamp-supply:
+ description: Power supply for the Class D amplifier.
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - reset-gpios
+ - vp-supply
+ - vio-supply
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ haptic-driver@34 {
+ compatible = "cirrus,cs40l50";
+ reg = <0x34>;
+ interrupt-parent = <&gpio>;
+ interrupts = <113 IRQ_TYPE_LEVEL_LOW>;
+ reset-gpios = <&gpio 112 GPIO_ACTIVE_LOW>;
+ vp-supply = <&vreg>;
+ vio-supply = <&vreg>;
+ };
+ };
diff --git a/MAINTAINERS b/MAINTAINERS
index dd5de540ec0b..b71017a187f8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4933,6 +4933,14 @@ F: sound/pci/hda/cs*
F: sound/pci/hda/hda_cs_dsp_ctl.*
F: sound/soc/codecs/cs*
+CIRRUS LOGIC HAPTIC DRIVERS
+M: James Ogletree <james.ogletree@cirrus.com>
+M: Fred Treven <fred.treven@cirrus.com>
+M: Ben Bright <ben.bright@cirrus.com>
+L: patches@opensource.cirrus.com
+S: Supported
+F: Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml
+
CIRRUS LOGIC DSP FIRMWARE DRIVER
M: Simon Trimmer <simont@opensource.cirrus.com>
M: Charles Keepax <ckeepax@opensource.cirrus.com>
--
2.25.1
^ permalink raw reply related
* [PATCH v7 3/5] mfd: cs40l50: Add support for CS40L50 core driver
From: James Ogletree @ 2024-02-12 17:31 UTC (permalink / raw)
To: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, lee,
broonie, jeff
Cc: patches, linux-sound, linux-input, devicetree, James Ogletree
In-Reply-To: <20240212173111.771107-1-jogletre@opensource.cirrus.com>
Introduce support for Cirrus Logic Device CS40L50: a
haptic driver with waveform memory, integrated DSP,
and closed-loop algorithms.
The MFD component registers and initializes the device.
Signed-off-by: James Ogletree <jogletre@opensource.cirrus.com>
---
MAINTAINERS | 2 +
drivers/mfd/Kconfig | 30 ++
drivers/mfd/Makefile | 4 +
drivers/mfd/cs40l50-core.c | 531 ++++++++++++++++++++++++++++++++++++
drivers/mfd/cs40l50-i2c.c | 69 +++++
drivers/mfd/cs40l50-spi.c | 69 +++++
include/linux/mfd/cs40l50.h | 142 ++++++++++
7 files changed, 847 insertions(+)
create mode 100644 drivers/mfd/cs40l50-core.c
create mode 100644 drivers/mfd/cs40l50-i2c.c
create mode 100644 drivers/mfd/cs40l50-spi.c
create mode 100644 include/linux/mfd/cs40l50.h
diff --git a/MAINTAINERS b/MAINTAINERS
index b71017a187f8..69a9e0a3b968 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4940,6 +4940,8 @@ M: Ben Bright <ben.bright@cirrus.com>
L: patches@opensource.cirrus.com
S: Supported
F: Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml
+F: drivers/mfd/cs40l*
+F: include/linux/mfd/cs40l*
CIRRUS LOGIC DSP FIRMWARE DRIVER
M: Simon Trimmer <simont@opensource.cirrus.com>
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 90ce58fd629e..6273c255f107 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -2241,6 +2241,36 @@ config MCP_UCB1200_TS
endmenu
+config MFD_CS40L50_CORE
+ tristate
+ select MFD_CORE
+ select FW_CS_DSP
+ select REGMAP_IRQ
+
+config MFD_CS40L50_I2C
+ tristate "Cirrus Logic CS40L50 (I2C)"
+ select REGMAP_I2C
+ select MFD_CS40L50_CORE
+ depends on I2C
+ help
+ Select this to support the Cirrus Logic CS40L50 Haptic
+ Driver over I2C.
+
+ This driver can be built as a module. If built as a module it will be
+ called "cs40l50-i2c".
+
+config MFD_CS40L50_SPI
+ tristate "Cirrus Logic CS40L50 (SPI)"
+ select REGMAP_SPI
+ select MFD_CS40L50_CORE
+ depends on SPI
+ help
+ Select this to support the Cirrus Logic CS40L50 Haptic
+ Driver over SPI.
+
+ This driver can be built as a module. If built as a module it will be
+ called "cs40l50-spi".
+
config MFD_VEXPRESS_SYSREG
tristate "Versatile Express System Registers"
depends on VEXPRESS_CONFIG && GPIOLIB
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index c66f07edcd0e..a8d18ba155d0 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -88,6 +88,10 @@ obj-$(CONFIG_MFD_MADERA) += madera.o
obj-$(CONFIG_MFD_MADERA_I2C) += madera-i2c.o
obj-$(CONFIG_MFD_MADERA_SPI) += madera-spi.o
+obj-$(CONFIG_MFD_CS40L50_CORE) += cs40l50-core.o
+obj-$(CONFIG_MFD_CS40L50_I2C) += cs40l50-i2c.o
+obj-$(CONFIG_MFD_CS40L50_SPI) += cs40l50-spi.o
+
obj-$(CONFIG_TPS6105X) += tps6105x.o
obj-$(CONFIG_TPS65010) += tps65010.o
obj-$(CONFIG_TPS6507X) += tps6507x.o
diff --git a/drivers/mfd/cs40l50-core.c b/drivers/mfd/cs40l50-core.c
new file mode 100644
index 000000000000..949a7b7c4e44
--- /dev/null
+++ b/drivers/mfd/cs40l50-core.c
@@ -0,0 +1,531 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * CS40L50 Advanced Haptic Driver with waveform memory,
+ * integrated DSP, and closed-loop algorithms
+ *
+ * Copyright 2024 Cirrus Logic, Inc.
+ *
+ * Author: James Ogletree <james.ogletree@cirrus.com>
+ */
+
+#include <linux/firmware/cirrus/cs_dsp.h>
+#include <linux/firmware/cirrus/wmfw.h>
+#include <linux/mfd/core.h>
+#include <linux/mfd/cs40l50.h>
+#include <linux/pm_runtime.h>
+#include <linux/regulator/consumer.h>
+
+static const struct mfd_cell cs40l50_devs[] = {
+ { .name = "cs40l50-codec", },
+ { .name = "cs40l50-vibra", },
+};
+
+const struct regmap_config cs40l50_regmap = {
+ .reg_bits = 32,
+ .reg_stride = 4,
+ .val_bits = 32,
+ .reg_format_endian = REGMAP_ENDIAN_BIG,
+ .val_format_endian = REGMAP_ENDIAN_BIG,
+};
+EXPORT_SYMBOL_GPL(cs40l50_regmap);
+
+static const char * const cs40l50_supplies[] = {
+ "vp", "vio",
+};
+
+static const struct regmap_irq cs40l50_reg_irqs[] = {
+ REGMAP_IRQ_REG(CS40L50_DSP_QUEUE_IRQ, CS40L50_IRQ1_INT_2_OFFSET,
+ CS40L50_DSP_QUEUE_MASK),
+ REGMAP_IRQ_REG(CS40L50_AMP_SHORT_IRQ, CS40L50_IRQ1_INT_1_OFFSET,
+ CS40L50_AMP_SHORT_MASK),
+ REGMAP_IRQ_REG(CS40L50_TEMP_ERR_IRQ, CS40L50_IRQ1_INT_8_OFFSET,
+ CS40L50_TEMP_ERR_MASK),
+ REGMAP_IRQ_REG(CS40L50_BST_UVP_IRQ, CS40L50_IRQ1_INT_9_OFFSET,
+ CS40L50_BST_UVP_MASK),
+ REGMAP_IRQ_REG(CS40L50_BST_SHORT_IRQ, CS40L50_IRQ1_INT_9_OFFSET,
+ CS40L50_BST_SHORT_MASK),
+ REGMAP_IRQ_REG(CS40L50_BST_ILIMIT_IRQ, CS40L50_IRQ1_INT_9_OFFSET,
+ CS40L50_BST_ILIMIT_MASK),
+ REGMAP_IRQ_REG(CS40L50_UVLO_VDDBATT_IRQ, CS40L50_IRQ1_INT_10_OFFSET,
+ CS40L50_UVLO_VDDBATT_MASK),
+ REGMAP_IRQ_REG(CS40L50_GLOBAL_ERROR_IRQ, CS40L50_IRQ1_INT_18_OFFSET,
+ CS40L50_GLOBAL_ERROR_MASK),
+};
+
+static struct regmap_irq_chip cs40l50_irq_chip = {
+ .name = "CS40L50 IRQ Controller",
+
+ .status_base = CS40L50_IRQ1_INT_1,
+ .mask_base = CS40L50_IRQ1_MASK_1,
+ .ack_base = CS40L50_IRQ1_INT_1,
+ .num_regs = 22,
+
+ .irqs = cs40l50_reg_irqs,
+ .num_irqs = ARRAY_SIZE(cs40l50_reg_irqs),
+
+ .runtime_pm = true,
+};
+
+int cs40l50_dsp_write(struct device *dev, struct regmap *regmap, u32 val)
+{
+ int err, i;
+ u32 ack;
+
+ /* Device NAKs if exiting hibernation, so optionally retry here */
+ for (i = 0; i < CS40L50_DSP_TIMEOUT_COUNT; i++) {
+ err = regmap_write(regmap, CS40L50_DSP_QUEUE, val);
+ if (!err)
+ break;
+
+ usleep_range(CS40L50_DSP_POLL_US, CS40L50_DSP_POLL_US + 100);
+ }
+
+ /* If we never wrote, don't bother checking for ACK */
+ if (i == CS40L50_DSP_TIMEOUT_COUNT) {
+ dev_err(dev, "Timed out writing %#X to DSP: %d\n", val, err);
+ return err;
+ }
+
+ err = regmap_read_poll_timeout(regmap, CS40L50_DSP_QUEUE, ack, !ack,
+ CS40L50_DSP_POLL_US,
+ CS40L50_DSP_POLL_US * CS40L50_DSP_TIMEOUT_COUNT);
+ if (err)
+ dev_err(dev, "DSP did not ack %#X: %d\n", val, err);
+
+ return err;
+}
+EXPORT_SYMBOL_GPL(cs40l50_dsp_write);
+
+static const struct cs_dsp_region cs40l50_dsp_regions[] = {
+ { .type = WMFW_HALO_PM_PACKED, .base = CS40L50_PMEM_0 },
+ { .type = WMFW_HALO_XM_PACKED, .base = CS40L50_XMEM_PACKED_0 },
+ { .type = WMFW_HALO_YM_PACKED, .base = CS40L50_YMEM_PACKED_0 },
+ { .type = WMFW_ADSP2_XM, .base = CS40L50_XMEM_UNPACKED24_0 },
+ { .type = WMFW_ADSP2_YM, .base = CS40L50_YMEM_UNPACKED24_0 },
+};
+
+static void cs40l50_dsp_remove(void *data)
+{
+ cs_dsp_remove((struct cs_dsp *)data);
+}
+
+static const struct cs_dsp_client_ops cs40l50_client_ops;
+
+static int cs40l50_dsp_init(struct cs40l50 *cs40l50)
+{
+ int err;
+
+ cs40l50->dsp.num = 1;
+ cs40l50->dsp.type = WMFW_HALO;
+ cs40l50->dsp.dev = cs40l50->dev;
+ cs40l50->dsp.regmap = cs40l50->regmap;
+ cs40l50->dsp.base = CS40L50_CORE_BASE;
+ cs40l50->dsp.base_sysinfo = CS40L50_SYS_INFO_ID;
+ cs40l50->dsp.mem = cs40l50_dsp_regions;
+ cs40l50->dsp.num_mems = ARRAY_SIZE(cs40l50_dsp_regions);
+ cs40l50->dsp.no_core_startstop = true;
+ cs40l50->dsp.client_ops = &cs40l50_client_ops;
+
+ err = cs_dsp_halo_init(&cs40l50->dsp);
+ if (err)
+ return err;
+
+ return devm_add_action_or_reset(cs40l50->dev, cs40l50_dsp_remove,
+ &cs40l50->dsp);
+}
+
+struct cs40l50_irq {
+ const char *name;
+ int virq;
+};
+
+static struct cs40l50_irq cs40l50_irqs[] = {
+ { "DSP", },
+ { "Global", },
+ { "Boost UVLO", },
+ { "Boost current limit", },
+ { "Boost short", },
+ { "Boost undervolt", },
+ { "Overtemp", },
+ { "Amp short", },
+};
+
+static const struct reg_sequence cs40l50_err_rls[] = {
+ { CS40L50_ERR_RLS, CS40L50_GLOBAL_ERR_RLS_SET },
+ { CS40L50_ERR_RLS, CS40L50_GLOBAL_ERR_RLS_CLEAR },
+};
+
+static irqreturn_t cs40l50_hw_err(int irq, void *data)
+{
+ struct cs40l50 *cs40l50 = data;
+ int err = 0, i;
+
+ mutex_lock(&cs40l50->lock);
+
+ /* Log hardware interrupt and execute error release sequence */
+ for (i = 1; i < ARRAY_SIZE(cs40l50_irqs); i++) {
+ if (cs40l50_irqs[i].virq == irq) {
+ dev_err(cs40l50->dev, "%s error\n", cs40l50_irqs[i].name);
+ err = regmap_multi_reg_write(cs40l50->regmap, cs40l50_err_rls,
+ ARRAY_SIZE(cs40l50_err_rls));
+ goto exit;
+ }
+ }
+exit:
+ mutex_unlock(&cs40l50->lock);
+ return IRQ_RETVAL(!err);
+}
+
+static irqreturn_t cs40l50_dsp_queue(int irq, void *data)
+{
+ struct cs40l50 *cs40l50 = data;
+ u32 rd_ptr, val, wt_ptr;
+ int err = 0;
+
+ mutex_lock(&cs40l50->lock);
+
+ /* Read from DSP queue and update read pointer */
+ while (!err) {
+ err = regmap_read(cs40l50->regmap, CS40L50_DSP_QUEUE_WT, &wt_ptr);
+ if (err)
+ goto exit;
+
+ err = regmap_read(cs40l50->regmap, CS40L50_DSP_QUEUE_RD, &rd_ptr);
+ if (err)
+ goto exit;
+
+ /* Check if queue is empty */
+ if (wt_ptr == rd_ptr)
+ goto exit;
+
+ err = regmap_read(cs40l50->regmap, rd_ptr, &val);
+ if (err)
+ goto exit;
+
+ dev_dbg(cs40l50->dev, "DSP payload: %#X", val);
+
+ rd_ptr += sizeof(u32);
+
+ if (rd_ptr > CS40L50_DSP_QUEUE_END)
+ rd_ptr = CS40L50_DSP_QUEUE_BASE;
+
+ err = regmap_write(cs40l50->regmap, CS40L50_DSP_QUEUE_RD, rd_ptr);
+ if (err)
+ goto exit;
+ }
+exit:
+ mutex_unlock(&cs40l50->lock);
+
+ return IRQ_RETVAL(!err);
+}
+
+static int cs40l50_irq_init(struct cs40l50 *cs40l50)
+{
+ struct device *dev = cs40l50->dev;
+ int err, i, virq;
+
+ err = devm_regmap_add_irq_chip(dev, cs40l50->regmap, cs40l50->irq,
+ IRQF_ONESHOT | IRQF_SHARED, 0,
+ &cs40l50_irq_chip, &cs40l50->irq_data);
+ if (err) {
+ dev_err(dev, "Failed adding IRQ chip\n");
+ return err;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(cs40l50_irqs); i++) {
+ virq = regmap_irq_get_virq(cs40l50->irq_data, i);
+ if (virq < 0) {
+ dev_err(dev, "Failed getting %s\n", cs40l50_irqs[i].name);
+ return virq;
+ }
+
+ cs40l50_irqs[i].virq = virq;
+
+ /* Handle DSP and non-DSP interrupts separately */
+ err = devm_request_threaded_irq(dev, virq, NULL,
+ i ? cs40l50_hw_err : cs40l50_dsp_queue,
+ IRQF_ONESHOT | IRQF_SHARED,
+ cs40l50_irqs[i].name, cs40l50);
+ if (err) {
+ dev_err(dev, "Failed requesting %s IRQ\n", cs40l50_irqs[i].name);
+ return err;
+ }
+ }
+
+ return 0;
+}
+
+static const struct reg_sequence cs40l50_stop_core[] = {
+ { CS40L50_CCM_CORE_CONTROL, CS40L50_CLOCK_DISABLE},
+ { CS40L50_RAM_INIT, CS40L50_RAM_INIT_FLAG},
+ { CS40L50_PWRMGT_CTL, CS40L50_MEM_RDY_HW},
+};
+
+static const struct reg_sequence cs40l50_internal_vamp_config[] = {
+ { CS40L50_BST_LPMODE_SEL, CS40L50_DCM_LOW_POWER },
+ { CS40L50_BLOCK_ENABLES2, CS40L50_OVERTEMP_WARN },
+};
+
+static const struct reg_sequence cs40l50_irq_mask_override[] = {
+ { CS40L50_IRQ1_MASK_2, CS40L50_IRQ_MASK_2_OVERRIDE },
+ { CS40L50_IRQ1_MASK_20, CS40L50_IRQ_MASK_20_OVERRIDE },
+};
+
+static void cs40l50_dsp_power_down(void *data)
+{
+ cs_dsp_power_down((struct cs_dsp *)data);
+}
+
+static int cs40l50_power_up_dsp(struct cs40l50 *cs40l50)
+{
+ int err;
+
+ mutex_lock(&cs40l50->lock);
+
+ /* Stop and resume core to load patch file */
+ err = regmap_multi_reg_write(cs40l50->regmap, cs40l50_stop_core,
+ ARRAY_SIZE(cs40l50_stop_core));
+ if (err)
+ goto err_mutex;
+
+ err = cs_dsp_power_up(&cs40l50->dsp, cs40l50->patch, "cs40l50.wmfw",
+ cs40l50->bin, "cs40l50.bin", "cs40l50");
+ if (err)
+ goto err_mutex;
+
+ err = devm_add_action_or_reset(cs40l50->dev, cs40l50_dsp_power_down,
+ &cs40l50->dsp);
+ if (err)
+ goto err_mutex;
+
+ err = regmap_write(cs40l50->regmap, CS40L50_CCM_CORE_CONTROL,
+ CS40L50_CLOCK_ENABLE);
+
+err_mutex:
+ mutex_unlock(&cs40l50->lock);
+
+ return err;
+}
+
+static int cs40l50_configure_dsp(struct cs40l50 *cs40l50)
+{
+ u32 nwaves;
+ int err;
+
+ if (cs40l50->bin) {
+ /* Log number of effects if wavetable was loaded */
+ err = regmap_read(cs40l50->regmap, CS40L50_NUM_WAVES, &nwaves);
+ if (err)
+ return err;
+
+ dev_info(cs40l50->dev, "Loaded with %u effects\n", nwaves);
+ }
+
+ mutex_lock(&cs40l50->dsp.pwr_lock);
+ cs40l50->wseqs[CS40L50_PWR_ON].ctl = cs_dsp_get_ctl(&cs40l50->dsp,
+ "PM_PWR_ON_SEQ",
+ WMFW_ADSP2_XM,
+ CS40L50_PM_ALGO);
+ mutex_unlock(&cs40l50->dsp.pwr_lock);
+ if (!cs40l50->wseqs[CS40L50_PWR_ON].ctl) {
+ dev_err(cs40l50->dev, "No control for power-on write sequence\n");
+ return -ENOENT;
+ }
+
+ /* Initialize the power-on write sequencer */
+ err = cs_dsp_wseq_init(&cs40l50->dsp, cs40l50->wseqs, 1);
+ if (err) {
+ dev_err(cs40l50->dev, "Failed to initialize write sequences\n");
+ return err;
+ }
+
+ /* Use internal V_AMP supply */
+ err = regmap_multi_reg_write(cs40l50->regmap, cs40l50_internal_vamp_config,
+ ARRAY_SIZE(cs40l50_internal_vamp_config));
+ if (err)
+ return err;
+
+ err = cs_dsp_wseq_multi_write(&cs40l50->dsp, &cs40l50->wseqs[CS40L50_PWR_ON],
+ cs40l50_internal_vamp_config, CS_DSP_WSEQ_FULL,
+ ARRAY_SIZE(cs40l50_internal_vamp_config), false);
+ if (err)
+ return err;
+
+ /* Override firmware defaults for IRQ masks */
+ err = regmap_multi_reg_write(cs40l50->regmap, cs40l50_irq_mask_override,
+ ARRAY_SIZE(cs40l50_irq_mask_override));
+ if (err)
+ return err;
+
+ return cs_dsp_wseq_multi_write(&cs40l50->dsp, &cs40l50->wseqs[CS40L50_PWR_ON],
+ cs40l50_irq_mask_override, CS_DSP_WSEQ_FULL,
+ ARRAY_SIZE(cs40l50_irq_mask_override), false);
+}
+
+static void cs40l50_start_dsp(const struct firmware *bin, void *context)
+{
+ struct cs40l50 *cs40l50 = context;
+ int err;
+
+ /* Wavetable is optional; power up DSP regardless */
+ cs40l50->bin = bin;
+
+ err = cs40l50_power_up_dsp(cs40l50);
+ if (err) {
+ dev_err(cs40l50->dev, "Failed to power up DSP: %d\n", err);
+ goto err_fw;
+ }
+
+ err = cs40l50_configure_dsp(cs40l50);
+ if (err)
+ dev_err(cs40l50->dev, "Failed to configure DSP: %d\n", err);
+
+ err = devm_mfd_add_devices(cs40l50->dev, PLATFORM_DEVID_NONE, cs40l50_devs,
+ ARRAY_SIZE(cs40l50_devs), NULL, 0, NULL);
+ if (err)
+ dev_err(cs40l50->dev, "Failed to add sub devices: %d\n", err);
+
+err_fw:
+ release_firmware(cs40l50->bin);
+ release_firmware(cs40l50->patch);
+}
+
+static void cs40l50_request_patch(const struct firmware *patch, void *context)
+{
+ struct cs40l50 *cs40l50 = context;
+
+ if (!patch) {
+ dev_err(cs40l50->dev, "Failed to request patch file\n");
+ return;
+ }
+
+ cs40l50->patch = patch;
+
+ if (request_firmware_nowait(THIS_MODULE, FW_ACTION_UEVENT, CS40L50_WT,
+ cs40l50->dev, GFP_KERNEL, cs40l50,
+ cs40l50_start_dsp)) {
+ dev_err(cs40l50->dev, "Failed to request %s\n", CS40L50_WT);
+ release_firmware(cs40l50->patch);
+ }
+}
+
+static int cs40l50_get_model(struct cs40l50 *cs40l50)
+{
+ int err;
+
+ err = regmap_read(cs40l50->regmap, CS40L50_DEVID, &cs40l50->devid);
+ if (err)
+ return err;
+
+ if (cs40l50->devid != CS40L50_DEVID_A)
+ return -EINVAL;
+
+ err = regmap_read(cs40l50->regmap, CS40L50_REVID, &cs40l50->revid);
+ if (err)
+ return err;
+
+ if (cs40l50->revid < CS40L50_REVID_B0)
+ return -EINVAL;
+
+ dev_info(cs40l50->dev, "Cirrus Logic CS40L50 rev. %02X\n", cs40l50->revid);
+
+ return 0;
+}
+
+static int cs40l50_pm_runtime_setup(struct device *dev)
+{
+ int err;
+
+ pm_runtime_set_autosuspend_delay(dev, CS40L50_AUTOSUSPEND_MS);
+ pm_runtime_use_autosuspend(dev);
+ pm_runtime_get_noresume(dev);
+ err = pm_runtime_set_active(dev);
+ if (err)
+ return err;
+
+ return devm_pm_runtime_enable(dev);
+}
+
+int cs40l50_probe(struct cs40l50 *cs40l50)
+{
+ struct device *dev = cs40l50->dev;
+ int err;
+
+ mutex_init(&cs40l50->lock);
+
+ cs40l50->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
+ if (IS_ERR(cs40l50->reset_gpio))
+ return dev_err_probe(dev, PTR_ERR(cs40l50->reset_gpio),
+ "Failed getting reset GPIO\n");
+
+ err = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(cs40l50_supplies),
+ cs40l50_supplies);
+ if (err)
+ return dev_err_probe(dev, err, "Failed getting supplies\n");
+
+ /* Ensure minimum reset pulse width */
+ usleep_range(CS40L50_RESET_PULSE_US, CS40L50_RESET_PULSE_US + 100);
+
+ gpiod_set_value_cansleep(cs40l50->reset_gpio, 0);
+
+ /* Wait for control port to be ready */
+ usleep_range(CS40L50_CP_READY_US, CS40L50_CP_READY_US + 100);
+
+ err = cs40l50_dsp_init(cs40l50);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to initialize DSP\n");
+
+ err = cs40l50_pm_runtime_setup(dev);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to initialize runtime PM\n");
+
+ err = cs40l50_get_model(cs40l50);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to get part number\n");
+
+ err = cs40l50_irq_init(cs40l50);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to request IRQs\n");
+
+ err = request_firmware_nowait(THIS_MODULE, FW_ACTION_UEVENT, CS40L50_FW,
+ dev, GFP_KERNEL, cs40l50, cs40l50_request_patch);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to request %s\n", CS40L50_FW);
+
+ pm_runtime_mark_last_busy(dev);
+ pm_runtime_put_autosuspend(dev);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(cs40l50_probe);
+
+int cs40l50_remove(struct cs40l50 *cs40l50)
+{
+ gpiod_set_value_cansleep(cs40l50->reset_gpio, 1);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(cs40l50_remove);
+
+static int cs40l50_runtime_suspend(struct device *dev)
+{
+ struct cs40l50 *cs40l50 = dev_get_drvdata(dev);
+
+ return regmap_write(cs40l50->regmap, CS40L50_DSP_QUEUE, CS40L50_ALLOW_HIBER);
+}
+
+static int cs40l50_runtime_resume(struct device *dev)
+{
+ struct cs40l50 *cs40l50 = dev_get_drvdata(dev);
+
+ return cs40l50_dsp_write(dev, cs40l50->regmap, CS40L50_PREVENT_HIBER);
+}
+
+EXPORT_GPL_DEV_PM_OPS(cs40l50_pm_ops) = {
+ RUNTIME_PM_OPS(cs40l50_runtime_suspend, cs40l50_runtime_resume, NULL)
+};
+
+MODULE_DESCRIPTION("CS40L50 Advanced Haptic Driver");
+MODULE_AUTHOR("James Ogletree, Cirrus Logic Inc. <james.ogletree@cirrus.com>");
+MODULE_LICENSE("GPL");
+MODULE_IMPORT_NS(FW_CS_DSP);
diff --git a/drivers/mfd/cs40l50-i2c.c b/drivers/mfd/cs40l50-i2c.c
new file mode 100644
index 000000000000..e18938dbddaa
--- /dev/null
+++ b/drivers/mfd/cs40l50-i2c.c
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * CS40L50 Advanced Haptic Driver with waveform memory,
+ * integrated DSP, and closed-loop algorithms
+ *
+ * Copyright 2024 Cirrus Logic, Inc.
+ *
+ * Author: James Ogletree <james.ogletree@cirrus.com>
+ */
+
+#include <linux/i2c.h>
+#include <linux/mfd/cs40l50.h>
+
+static int cs40l50_i2c_probe(struct i2c_client *client)
+{
+ struct device *dev = &client->dev;
+ struct cs40l50 *cs40l50;
+
+ cs40l50 = devm_kzalloc(dev, sizeof(*cs40l50), GFP_KERNEL);
+ if (!cs40l50)
+ return -ENOMEM;
+
+ i2c_set_clientdata(client, cs40l50);
+
+ cs40l50->regmap = devm_regmap_init_i2c(client, &cs40l50_regmap);
+ if (IS_ERR(cs40l50->regmap))
+ return dev_err_probe(cs40l50->dev, PTR_ERR(cs40l50->regmap),
+ "Failed to initialize register map\n");
+
+ cs40l50->dev = dev;
+ cs40l50->irq = client->irq;
+
+ return cs40l50_probe(cs40l50);
+}
+
+static void cs40l50_i2c_remove(struct i2c_client *client)
+{
+ struct cs40l50 *cs40l50 = i2c_get_clientdata(client);
+
+ cs40l50_remove(cs40l50);
+}
+
+static const struct i2c_device_id cs40l50_id_i2c[] = {
+ {"cs40l50"},
+ {}
+};
+MODULE_DEVICE_TABLE(i2c, cs40l50_id_i2c);
+
+static const struct of_device_id cs40l50_of_match[] = {
+ { .compatible = "cirrus,cs40l50" },
+ {}
+};
+MODULE_DEVICE_TABLE(of, cs40l50_of_match);
+
+static struct i2c_driver cs40l50_i2c_driver = {
+ .driver = {
+ .name = "cs40l50",
+ .of_match_table = cs40l50_of_match,
+ .pm = pm_ptr(&cs40l50_pm_ops),
+ },
+ .id_table = cs40l50_id_i2c,
+ .probe = cs40l50_i2c_probe,
+ .remove = cs40l50_i2c_remove,
+};
+module_i2c_driver(cs40l50_i2c_driver);
+
+MODULE_DESCRIPTION("CS40L50 I2C Driver");
+MODULE_AUTHOR("James Ogletree, Cirrus Logic Inc. <james.ogletree@cirrus.com>");
+MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/cs40l50-spi.c b/drivers/mfd/cs40l50-spi.c
new file mode 100644
index 000000000000..9e18bb74eae0
--- /dev/null
+++ b/drivers/mfd/cs40l50-spi.c
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * CS40L50 Advanced Haptic Driver with waveform memory,
+ * integrated DSP, and closed-loop algorithms
+ *
+ * Copyright 2024 Cirrus Logic, Inc.
+ *
+ * Author: James Ogletree <james.ogletree@cirrus.com>
+ */
+
+#include <linux/mfd/cs40l50.h>
+#include <linux/spi/spi.h>
+
+static int cs40l50_spi_probe(struct spi_device *spi)
+{
+ struct cs40l50 *cs40l50;
+ struct device *dev = &spi->dev;
+
+ cs40l50 = devm_kzalloc(dev, sizeof(*cs40l50), GFP_KERNEL);
+ if (!cs40l50)
+ return -ENOMEM;
+
+ spi_set_drvdata(spi, cs40l50);
+
+ cs40l50->regmap = devm_regmap_init_spi(spi, &cs40l50_regmap);
+ if (IS_ERR(cs40l50->regmap))
+ return dev_err_probe(cs40l50->dev, PTR_ERR(cs40l50->regmap),
+ "Failed to initialize register map\n");
+
+ cs40l50->dev = dev;
+ cs40l50->irq = spi->irq;
+
+ return cs40l50_probe(cs40l50);
+}
+
+static void cs40l50_spi_remove(struct spi_device *spi)
+{
+ struct cs40l50 *cs40l50 = spi_get_drvdata(spi);
+
+ cs40l50_remove(cs40l50);
+}
+
+static const struct spi_device_id cs40l50_id_spi[] = {
+ {"cs40l50"},
+ {}
+};
+MODULE_DEVICE_TABLE(spi, cs40l50_id_spi);
+
+static const struct of_device_id cs40l50_of_match[] = {
+ { .compatible = "cirrus,cs40l50" },
+ {}
+};
+MODULE_DEVICE_TABLE(of, cs40l50_of_match);
+
+static struct spi_driver cs40l50_spi_driver = {
+ .driver = {
+ .name = "cs40l50",
+ .of_match_table = cs40l50_of_match,
+ .pm = pm_ptr(&cs40l50_pm_ops),
+ },
+ .id_table = cs40l50_id_spi,
+ .probe = cs40l50_spi_probe,
+ .remove = cs40l50_spi_remove,
+};
+module_spi_driver(cs40l50_spi_driver);
+
+MODULE_DESCRIPTION("CS40L50 SPI Driver");
+MODULE_AUTHOR("James Ogletree, Cirrus Logic Inc. <james.ogletree@cirrus.com>");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/cs40l50.h b/include/linux/mfd/cs40l50.h
new file mode 100644
index 000000000000..d855784a88a9
--- /dev/null
+++ b/include/linux/mfd/cs40l50.h
@@ -0,0 +1,142 @@
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * CS40L50 Advanced Haptic Driver with waveform memory,
+ * integrated DSP, and closed-loop algorithms
+ *
+ * Copyright 2024 Cirrus Logic, Inc.
+ *
+ * Author: James Ogletree <james.ogletree@cirrus.com>
+ */
+
+#ifndef __CS40L50_H__
+#define __CS40L50_H__
+
+#include <linux/firmware/cirrus/cs_dsp.h>
+#include <linux/gpio/consumer.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>
+
+/* Power Supply Configuration */
+#define CS40L50_BLOCK_ENABLES2 0x201C
+#define CS40L50_ERR_RLS 0x2034
+#define CS40L50_PWRMGT_CTL 0x2900
+#define CS40L50_BST_LPMODE_SEL 0x3810
+#define CS40L50_DCM_LOW_POWER 0x1
+#define CS40L50_OVERTEMP_WARN 0x4000010
+
+/* Interrupts */
+#define CS40L50_IRQ1_INT_1 0xE010
+#define CS40L50_IRQ1_BASE CS40L50_IRQ1_INT_1
+#define CS40L50_IRQ1_INT_2 0xE014
+#define CS40L50_IRQ1_INT_8 0xE02C
+#define CS40L50_IRQ1_INT_9 0xE030
+#define CS40L50_IRQ1_INT_10 0xE034
+#define CS40L50_IRQ1_INT_18 0xE054
+#define CS40L50_IRQ1_MASK_1 0xE090
+#define CS40L50_IRQ1_MASK_2 0xE094
+#define CS40L50_IRQ1_MASK_20 0xE0DC
+#define CS40L50_IRQ1_INT_1_OFFSET (CS40L50_IRQ1_INT_1 - CS40L50_IRQ1_BASE)
+#define CS40L50_IRQ1_INT_2_OFFSET (CS40L50_IRQ1_INT_2 - CS40L50_IRQ1_BASE)
+#define CS40L50_IRQ1_INT_8_OFFSET (CS40L50_IRQ1_INT_8 - CS40L50_IRQ1_BASE)
+#define CS40L50_IRQ1_INT_9_OFFSET (CS40L50_IRQ1_INT_9 - CS40L50_IRQ1_BASE)
+#define CS40L50_IRQ1_INT_10_OFFSET (CS40L50_IRQ1_INT_10 - CS40L50_IRQ1_BASE)
+#define CS40L50_IRQ1_INT_18_OFFSET (CS40L50_IRQ1_INT_18 - CS40L50_IRQ1_BASE)
+#define CS40L50_IRQ_MASK_2_OVERRIDE 0xFFDF7FFF
+#define CS40L50_IRQ_MASK_20_OVERRIDE 0x15C01000
+#define CS40L50_AMP_SHORT_MASK BIT(31)
+#define CS40L50_DSP_QUEUE_MASK BIT(21)
+#define CS40L50_TEMP_ERR_MASK BIT(31)
+#define CS40L50_BST_UVP_MASK BIT(6)
+#define CS40L50_BST_SHORT_MASK BIT(7)
+#define CS40L50_BST_ILIMIT_MASK BIT(18)
+#define CS40L50_UVLO_VDDBATT_MASK BIT(16)
+#define CS40L50_GLOBAL_ERROR_MASK BIT(15)
+
+enum cs40l50_irq_list {
+ CS40L50_DSP_QUEUE_IRQ,
+ CS40L50_GLOBAL_ERROR_IRQ,
+ CS40L50_UVLO_VDDBATT_IRQ,
+ CS40L50_BST_ILIMIT_IRQ,
+ CS40L50_BST_SHORT_IRQ,
+ CS40L50_BST_UVP_IRQ,
+ CS40L50_TEMP_ERR_IRQ,
+ CS40L50_AMP_SHORT_IRQ,
+};
+
+/* DSP */
+#define CS40L50_XMEM_PACKED_0 0x2000000
+#define CS40L50_XMEM_UNPACKED24_0 0x2800000
+#define CS40L50_SYS_INFO_ID 0x25E0000
+#define CS40L50_RAM_INIT 0x28021DC
+#define CS40L50_DSP_QUEUE_WT 0x28042C8
+#define CS40L50_DSP_QUEUE_RD 0x28042CC
+#define CS40L50_NUM_WAVES 0x2805C18
+#define CS40L50_CORE_BASE 0x2B80000
+#define CS40L50_CCM_CORE_CONTROL 0x2BC1000
+#define CS40L50_YMEM_PACKED_0 0x2C00000
+#define CS40L50_YMEM_UNPACKED24_0 0x3400000
+#define CS40L50_PMEM_0 0x3800000
+#define CS40L50_MEM_RDY_HW 0x2
+#define CS40L50_RAM_INIT_FLAG 0x1
+#define CS40L50_CLOCK_DISABLE 0x80
+#define CS40L50_CLOCK_ENABLE 0x281
+#define CS40L50_DSP_POLL_US 1000
+#define CS40L50_DSP_TIMEOUT_COUNT 100
+#define CS40L50_RESET_PULSE_US 2200
+#define CS40L50_CP_READY_US 3100
+#define CS40L50_AUTOSUSPEND_MS 2000
+#define CS40L50_PM_ALGO 0x9F206
+#define CS40L50_GLOBAL_ERR_RLS_SET BIT(11)
+#define CS40L50_GLOBAL_ERR_RLS_CLEAR 0
+
+enum cs40l50_wseqs {
+ CS40L50_PWR_ON,
+ CS40L50_STANDBY,
+ CS40L50_ACTIVE,
+ CS40L50_NUM_WSEQS,
+};
+
+/* DSP Commands */
+#define CS40L50_DSP_QUEUE_BASE 0x11004
+#define CS40L50_DSP_QUEUE_END 0x1101C
+#define CS40L50_DSP_QUEUE 0x11020
+#define CS40L50_PREVENT_HIBER 0x2000003
+#define CS40L50_ALLOW_HIBER 0x2000004
+#define CS40L50_START_I2S 0x3000002
+#define CS40L50_OWT_PUSH 0x3000008
+#define CS40L50_STOP_PLAYBACK 0x5000000
+#define CS40L50_OWT_DELETE 0xD000000
+
+/* Firmware files */
+#define CS40L50_FW "cs40l50.wmfw"
+#define CS40L50_WT "cs40l50.bin"
+
+/* Device */
+#define CS40L50_DEVID 0x0
+#define CS40L50_REVID 0x4
+#define CS40L50_DEVID_A 0x40A50
+#define CS40L50_REVID_B0 0xB0
+
+struct cs40l50 {
+ struct device *dev;
+ struct regmap *regmap;
+ struct mutex lock;
+ struct cs_dsp dsp;
+ struct gpio_desc *reset_gpio;
+ struct regmap_irq_chip_data *irq_data;
+ const struct firmware *patch;
+ const struct firmware *bin;
+ struct cs_dsp_wseq wseqs[CS40L50_NUM_WSEQS];
+ int irq;
+ u32 devid;
+ u32 revid;
+};
+
+int cs40l50_dsp_write(struct device *dev, struct regmap *regmap, u32 val);
+int cs40l50_probe(struct cs40l50 *cs40l50);
+int cs40l50_remove(struct cs40l50 *cs40l50);
+
+extern const struct regmap_config cs40l50_regmap;
+extern const struct dev_pm_ops cs40l50_pm_ops;
+
+#endif /* __CS40L50_H__ */
--
2.25.1
^ permalink raw reply related
* [PATCH v7 4/5] Input: cs40l50 - Add support for the CS40L50 haptic driver
From: James Ogletree @ 2024-02-12 17:31 UTC (permalink / raw)
To: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, lee,
broonie, jeff
Cc: patches, linux-sound, linux-input, devicetree, James Ogletree
In-Reply-To: <20240212173111.771107-1-jogletre@opensource.cirrus.com>
Introduce support for Cirrus Logic Device CS40L50: a
haptic driver with waveform memory, integrated DSP,
and closed-loop algorithms.
The input driver provides the interface for control of
haptic effects through the device.
Signed-off-by: James Ogletree <jogletre@opensource.cirrus.com>
---
v7:
Please advise if playback stop is still misused with respect to not
specifying an effect, and if so what the best way forward is. The
device can only play one effect at a time, but setting max effects
for the EVIOCGEFFECTS ioctl to 1 would restrict the number of
uploads to 1 as well. Is there an alternative workaround here?
Please correct any wrong assumptions.
MAINTAINERS | 1 +
drivers/input/misc/Kconfig | 10 +
drivers/input/misc/Makefile | 1 +
drivers/input/misc/cs40l50-vibra.c | 575 +++++++++++++++++++++++++++++
4 files changed, 587 insertions(+)
create mode 100644 drivers/input/misc/cs40l50-vibra.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 69a9e0a3b968..24cfb4f017bb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4940,6 +4940,7 @@ M: Ben Bright <ben.bright@cirrus.com>
L: patches@opensource.cirrus.com
S: Supported
F: Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml
+F: drivers/input/misc/cs40l*
F: drivers/mfd/cs40l*
F: include/linux/mfd/cs40l*
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 6ba984d7f0b1..ee45dbb0636e 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -140,6 +140,16 @@ config INPUT_BMA150
To compile this driver as a module, choose M here: the
module will be called bma150.
+config INPUT_CS40L50_VIBRA
+ tristate "CS40L50 Haptic Driver support"
+ depends on MFD_CS40L50_CORE
+ help
+ Say Y here to enable support for Cirrus Logic's CS40L50
+ haptic driver.
+
+ To compile this driver as a module, choose M here: the
+ module will be called cs40l50-vibra.
+
config INPUT_E3X0_BUTTON
tristate "NI Ettus Research USRP E3xx Button support."
default n
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 04296a4abe8e..88279de6d3d5 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -28,6 +28,7 @@ obj-$(CONFIG_INPUT_CMA3000) += cma3000_d0x.o
obj-$(CONFIG_INPUT_CMA3000_I2C) += cma3000_d0x_i2c.o
obj-$(CONFIG_INPUT_COBALT_BTNS) += cobalt_btns.o
obj-$(CONFIG_INPUT_CPCAP_PWRBUTTON) += cpcap-pwrbutton.o
+obj-$(CONFIG_INPUT_CS40L50_VIBRA) += cs40l50-vibra.o
obj-$(CONFIG_INPUT_DA7280_HAPTICS) += da7280.o
obj-$(CONFIG_INPUT_DA9052_ONKEY) += da9052_onkey.o
obj-$(CONFIG_INPUT_DA9055_ONKEY) += da9055_onkey.o
diff --git a/drivers/input/misc/cs40l50-vibra.c b/drivers/input/misc/cs40l50-vibra.c
new file mode 100644
index 000000000000..dce2a71fbb20
--- /dev/null
+++ b/drivers/input/misc/cs40l50-vibra.c
@@ -0,0 +1,575 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * CS40L50 Advanced Haptic Driver with waveform memory,
+ * integrated DSP, and closed-loop algorithms
+ *
+ * Copyright 2024 Cirrus Logic, Inc.
+ *
+ * Author: James Ogletree <james.ogletree@cirrus.com>
+ */
+
+#include <linux/bitfield.h>
+#include <linux/input.h>
+#include <linux/mfd/cs40l50.h>
+#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
+
+/* Wavetables */
+#define CS40L50_RAM_INDEX_START 0x1000000
+#define CS40L50_RAM_INDEX_END 0x100007F
+#define CS40L50_RTH_INDEX_START 0x1400000
+#define CS40L50_RTH_INDEX_END 0x1400001
+#define CS40L50_ROM_INDEX_START 0x1800000
+#define CS40L50_ROM_INDEX_END 0x180001A
+#define CS40L50_TYPE_PCM 8
+#define CS40L50_TYPE_PWLE 12
+#define CS40L50_PCM_ID 0x0
+#define CS40L50_OWT_CUSTOM_DATA_SIZE 2
+
+/* DSP */
+#define CS40L50_GPIO_BASE 0x2804140
+#define CS40L50_OWT_BASE 0x2805C34
+#define CS40L50_OWT_SIZE 0x2805C38
+#define CS40L50_OWT_NEXT 0x2805C3C
+
+/* GPIO */
+#define CS40L50_GPIO_NUM_MASK GENMASK(14, 12)
+#define CS40L50_GPIO_EDGE_MASK BIT(15)
+#define CS40L50_GPIO_MAPPING_NONE 0
+#define CS40L50_GPIO_DISABLE 0x1FF
+
+enum vibra_bank_type {
+ WVFRM_BANK_RAM,
+ WVFRM_BANK_ROM,
+ WVFRM_BANK_OWT,
+ WVFRM_BANK_NUM,
+};
+
+/* Describes an area in DSP memory populated by effects */
+struct vibra_bank {
+ enum vibra_bank_type bank;
+ u32 base_index;
+ u32 max_index;
+};
+
+struct vibra_effect {
+ enum vibra_bank_type bank;
+ struct list_head list;
+ u32 gpio_reg;
+ u32 index;
+ int id;
+};
+
+/* Describes haptic interface of loaded DSP firmware */
+struct vibra_dsp {
+ struct vibra_bank *banks;
+ u32 gpio_base_reg;
+ u32 owt_offset_reg;
+ u32 owt_size_reg;
+ u32 owt_base_reg;
+ int (*write)(struct device *dev, struct regmap *regmap, u32 val);
+ u32 push_owt_cmd;
+ u32 delete_owt_cmd;
+ u32 stop_cmd;
+};
+
+/* Describes configuration and state of haptic operations */
+struct vibra_info {
+ struct device *dev;
+ struct regmap *regmap;
+ struct input_dev *input;
+ struct mutex lock;
+ struct workqueue_struct *vibe_wq;
+ struct list_head effect_head;
+ struct vibra_dsp dsp;
+};
+
+struct vibra_work {
+ struct vibra_info *info;
+ struct ff_effect *effect;
+ struct work_struct work;
+ s16 *custom_data;
+ int custom_len;
+ int count;
+ int error;
+};
+
+static struct vibra_bank cs40l50_banks[] = {
+ {
+ .bank = WVFRM_BANK_RAM,
+ .base_index = CS40L50_RAM_INDEX_START,
+ .max_index = CS40L50_RAM_INDEX_END,
+ },
+ {
+ .bank = WVFRM_BANK_ROM,
+ .base_index = CS40L50_ROM_INDEX_START,
+ .max_index = CS40L50_ROM_INDEX_END,
+ },
+ {
+ .bank = WVFRM_BANK_OWT,
+ .base_index = CS40L50_RTH_INDEX_START,
+ .max_index = CS40L50_RTH_INDEX_END,
+ },
+};
+
+static struct vibra_dsp cs40l50_dsp = {
+ .banks = cs40l50_banks,
+ .gpio_base_reg = CS40L50_GPIO_BASE,
+ .owt_base_reg = CS40L50_OWT_BASE,
+ .owt_offset_reg = CS40L50_OWT_NEXT,
+ .owt_size_reg = CS40L50_OWT_SIZE,
+
+ .push_owt_cmd = CS40L50_OWT_PUSH,
+ .delete_owt_cmd = CS40L50_OWT_DELETE,
+ .stop_cmd = CS40L50_STOP_PLAYBACK,
+
+ .write = cs40l50_dsp_write,
+};
+
+static struct vibra_effect *vibra_find_effect(int id, struct list_head *effect_head)
+{
+ struct vibra_effect *effect;
+
+ list_for_each_entry(effect, effect_head, list)
+ if (effect->id == id)
+ return effect;
+
+ return NULL;
+}
+
+static int vibra_effect_bank_set(struct vibra_work *work_data,
+ struct vibra_effect *effect)
+{
+ s16 bank = work_data->custom_data[0] & 0xffffu;
+
+ if (bank >= WVFRM_BANK_NUM) {
+ dev_err(work_data->info->dev, "Invalid waveform bank: %d\n", bank);
+ return -EINVAL;
+ }
+
+ if (work_data->custom_len > CS40L50_OWT_CUSTOM_DATA_SIZE)
+ effect->bank = WVFRM_BANK_OWT;
+ else
+ effect->bank = bank;
+
+ return 0;
+}
+
+static int vibra_effect_gpio_mapping_set(struct vibra_work *work_data,
+ struct vibra_effect *effect)
+{
+ u16 button = work_data->effect->trigger.button;
+ struct vibra_info *info = work_data->info;
+ u32 gpio_num, gpio_edge;
+
+ if (button) {
+ gpio_num = FIELD_GET(CS40L50_GPIO_NUM_MASK, button);
+ gpio_edge = FIELD_GET(CS40L50_GPIO_EDGE_MASK, button);
+ effect->gpio_reg = info->dsp.gpio_base_reg + (gpio_num * 8) - gpio_edge;
+
+ return regmap_write(info->regmap, effect->gpio_reg, button);
+ }
+
+ effect->gpio_reg = CS40L50_GPIO_MAPPING_NONE;
+
+ return 0;
+}
+
+static int vibra_effect_index_set(struct vibra_work *work_data,
+ struct vibra_effect *effect)
+{
+ struct vibra_info *info = work_data->info;
+ struct vibra_effect *owt_effect;
+ u32 base_index, max_index;
+
+ base_index = info->dsp.banks[effect->bank].base_index;
+ max_index = info->dsp.banks[effect->bank].max_index;
+
+ effect->index = base_index;
+
+ switch (effect->bank) {
+ case WVFRM_BANK_OWT:
+ list_for_each_entry(owt_effect, &info->effect_head, list)
+ if (owt_effect->bank == WVFRM_BANK_OWT)
+ effect->index++;
+ break;
+ case WVFRM_BANK_ROM:
+ case WVFRM_BANK_RAM:
+ effect->index += work_data->custom_data[1] & 0xffffu;
+ break;
+ default:
+ dev_err(info->dev, "Bank not supported: %d\n", effect->bank);
+ return -EINVAL;
+ }
+
+ if (effect->index > max_index || effect->index < base_index) {
+ dev_err(info->dev, "Index out of bounds: %u\n", effect->index);
+ return -ENOSPC;
+ }
+
+ return 0;
+}
+
+/* Describes a header for an OWT effect */
+struct owt_header {
+ u32 type;
+ u32 data_words;
+ u32 offset;
+} __packed;
+
+static int vibra_upload_owt(struct vibra_work *work_data)
+{
+ u32 len = 2 * work_data->custom_len, wt_offset, wt_size;
+ struct vibra_info *info = work_data->info;
+ struct owt_header header;
+ u8 *out_data;
+ int error;
+
+ error = regmap_read(info->regmap, info->dsp.owt_size_reg, &wt_size);
+ if (error)
+ return error;
+
+ if ((wt_size * sizeof(u32)) < sizeof(header) + len) {
+ dev_err(info->dev, "No space in OWT bank for effect\n");
+ return -ENOSPC;
+ }
+
+ out_data = kzalloc(sizeof(header) + len, GFP_KERNEL);
+ if (!out_data)
+ return -ENOMEM;
+
+ header.type = work_data->custom_data[0] == CS40L50_PCM_ID ? CS40L50_TYPE_PCM :
+ CS40L50_TYPE_PWLE;
+ header.offset = sizeof(header) / sizeof(u32);
+ header.data_words = len / sizeof(u32);
+
+ memcpy(out_data, &header, sizeof(header));
+ memcpy(out_data + sizeof(header), work_data->custom_data, len);
+
+ error = regmap_read(info->regmap, info->dsp.owt_offset_reg, &wt_offset);
+ if (error)
+ return error;
+
+ error = regmap_bulk_write(info->regmap, info->dsp.owt_base_reg +
+ (wt_offset * sizeof(u32)), out_data,
+ sizeof(header) + len);
+ if (error)
+ goto err_free;
+
+ error = info->dsp.write(info->dev, info->regmap, info->dsp.push_owt_cmd);
+err_free:
+ kfree(out_data);
+
+ return error;
+}
+
+static void vibra_add_worker(struct work_struct *work)
+{
+ struct vibra_work *work_data = container_of(work, struct vibra_work, work);
+ struct vibra_info *info = work_data->info;
+ struct vibra_effect *effect;
+ bool is_new = false;
+ int error;
+
+ error = pm_runtime_resume_and_get(info->dev);
+ if (error < 0)
+ goto exit;
+
+ mutex_lock(&info->lock);
+
+ effect = vibra_find_effect(work_data->effect->id, &info->effect_head);
+ if (!effect) {
+ effect = kzalloc(sizeof(*effect), GFP_KERNEL);
+ if (!effect) {
+ error = -ENOMEM;
+ goto err_mutex;
+ }
+
+ effect->id = work_data->effect->id;
+ is_new = true;
+ }
+
+ error = vibra_effect_bank_set(work_data, effect);
+ if (error)
+ goto err_free;
+
+ error = vibra_effect_index_set(work_data, effect);
+ if (error)
+ goto err_free;
+
+ error = vibra_effect_gpio_mapping_set(work_data, effect);
+ if (error)
+ goto err_free;
+
+ if (effect->bank == WVFRM_BANK_OWT)
+ error = vibra_upload_owt(work_data);
+err_free:
+ if (is_new) {
+ if (error)
+ kfree(effect);
+ else
+ list_add(&effect->list, &info->effect_head);
+ }
+err_mutex:
+ mutex_unlock(&info->lock);
+
+ pm_runtime_mark_last_busy(info->dev);
+ pm_runtime_put_autosuspend(info->dev);
+exit:
+ work_data->error = error;
+}
+
+static int vibra_add(struct input_dev *dev, struct ff_effect *effect,
+ struct ff_effect *old)
+{
+ struct ff_periodic_effect *periodic = &effect->u.periodic;
+ struct vibra_info *info = input_get_drvdata(dev);
+ struct vibra_work work_data = { info, effect, };
+ u32 len = effect->u.periodic.custom_len;
+
+ if (effect->type != FF_PERIODIC || periodic->waveform != FF_CUSTOM) {
+ dev_err(info->dev, "Type (%#X) or waveform (%#X) unsupported\n",
+ effect->type, periodic->waveform);
+ return -EINVAL;
+ }
+
+ work_data.custom_data = kcalloc(len, sizeof(s16), GFP_KERNEL);
+ if (!work_data.custom_data)
+ return -ENOMEM;
+
+ if (copy_from_user(work_data.custom_data, effect->u.periodic.custom_data,
+ sizeof(s16) * len)) {
+ work_data.error = -EFAULT;
+ goto out_free;
+ }
+
+ work_data.custom_len = len;
+
+ INIT_WORK(&work_data.work, vibra_add_worker);
+
+ /* Push to the workqueue to serialize with playbacks */
+ queue_work(info->vibe_wq, &work_data.work);
+ flush_work(&work_data.work);
+out_free:
+ kfree(work_data.custom_data);
+
+ return work_data.error;
+}
+
+static void vibra_start_worker(struct work_struct *work)
+{
+ struct vibra_work *work_data = container_of(work, struct vibra_work, work);
+ struct vibra_info *info = work_data->info;
+ struct vibra_effect *start_effect;
+
+ if (pm_runtime_resume_and_get(info->dev) < 0)
+ goto error;
+
+ mutex_lock(&info->lock);
+
+ start_effect = vibra_find_effect(work_data->effect->id, &info->effect_head);
+ if (start_effect) {
+ while (--work_data->count >= 0) {
+ info->dsp.write(info->dev, info->regmap, start_effect->index);
+ usleep_range(work_data->effect->replay.length,
+ work_data->effect->replay.length + 100);
+ }
+ }
+
+ mutex_unlock(&info->lock);
+
+ if (!start_effect)
+ dev_err(info->dev, "Effect to play not found\n");
+
+ pm_runtime_mark_last_busy(info->dev);
+ pm_runtime_put_autosuspend(info->dev);
+error:
+ kfree(work_data);
+}
+
+static void vibra_stop_worker(struct work_struct *work)
+{
+ struct vibra_work *work_data = container_of(work, struct vibra_work, work);
+ struct vibra_info *info = work_data->info;
+
+ if (pm_runtime_resume_and_get(info->dev) < 0)
+ return;
+
+ mutex_lock(&info->lock);
+
+ info->dsp.write(info->dev, info->regmap, info->dsp.stop_cmd);
+
+ mutex_unlock(&info->lock);
+
+ pm_runtime_mark_last_busy(info->dev);
+ pm_runtime_put_autosuspend(info->dev);
+
+ kfree(work_data);
+}
+
+static int vibra_playback(struct input_dev *dev, int effect_id, int val)
+{
+ struct vibra_info *info = input_get_drvdata(dev);
+ struct vibra_work *work_data;
+
+ work_data = kzalloc(sizeof(*work_data), GFP_ATOMIC);
+ if (!work_data)
+ return -ENOMEM;
+
+ work_data->info = info;
+
+ if (val > 0) {
+ work_data->effect = &dev->ff->effects[effect_id];
+ work_data->count = val;
+ INIT_WORK(&work_data->work, vibra_start_worker);
+ } else {
+ /* Stop the amplifier as device can only drive one effect */
+ INIT_WORK(&work_data->work, vibra_stop_worker);
+ }
+
+ queue_work(info->vibe_wq, &work_data->work);
+
+ return 0;
+}
+
+static void vibra_erase_worker(struct work_struct *work)
+{
+ struct vibra_work *work_data = container_of(work, struct vibra_work, work);
+ struct vibra_effect *owt_effect, *erase_effect;
+ struct vibra_info *info = work_data->info;
+ int error;
+
+ error = pm_runtime_resume_and_get(info->dev);
+ if (error < 0)
+ goto exit;
+
+ mutex_lock(&info->lock);
+
+ erase_effect = vibra_find_effect(work_data->effect->id, &info->effect_head);
+ if (!erase_effect) {
+ dev_err(info->dev, "Effect to erase not found\n");
+ error = -EINVAL;
+ goto error;
+ }
+
+ if (erase_effect->gpio_reg != CS40L50_GPIO_MAPPING_NONE) {
+ error = regmap_write(info->regmap, erase_effect->gpio_reg,
+ CS40L50_GPIO_DISABLE);
+ if (error)
+ goto error;
+ }
+
+ if (erase_effect->bank == WVFRM_BANK_OWT) {
+ error = info->dsp.write(info->dev, info->regmap,
+ info->dsp.delete_owt_cmd |
+ erase_effect->index);
+ if (error)
+ goto error;
+
+ list_for_each_entry(owt_effect, &info->effect_head, list)
+ if (owt_effect->bank == WVFRM_BANK_OWT &&
+ owt_effect->index > erase_effect->index)
+ owt_effect->index--;
+ }
+
+ list_del(&erase_effect->list);
+ kfree(erase_effect);
+error:
+ mutex_unlock(&info->lock);
+
+ pm_runtime_mark_last_busy(info->dev);
+ pm_runtime_put_autosuspend(info->dev);
+exit:
+ work_data->error = error;
+}
+
+static int vibra_erase(struct input_dev *dev, int effect_id)
+{
+ struct vibra_info *info = input_get_drvdata(dev);
+ struct vibra_work work_data = { info, &dev->ff->effects[effect_id], };
+
+ INIT_WORK(&work_data.work, vibra_erase_worker);
+
+ /* Push to workqueue to serialize with playbacks */
+ queue_work(info->vibe_wq, &work_data.work);
+ flush_work(&work_data.work);
+
+ return work_data.error;
+}
+
+static void vibra_remove_wq(void *data)
+{
+ struct vibra_info *info = data;
+
+ flush_workqueue(info->vibe_wq);
+ destroy_workqueue(info->vibe_wq);
+}
+
+static int cs40l50_vibra_probe(struct platform_device *pdev)
+{
+ struct cs40l50 *cs40l50 = dev_get_drvdata(pdev->dev.parent);
+ struct vibra_info *info;
+ int error;
+
+ info = devm_kzalloc(pdev->dev.parent, sizeof(*info), GFP_KERNEL);
+ if (!info)
+ return -ENOMEM;
+
+ mutex_init(&info->lock);
+
+ info->dev = cs40l50->dev;
+ info->regmap = cs40l50->regmap;
+ info->dsp = cs40l50_dsp;
+
+ info->input = devm_input_allocate_device(info->dev);
+ if (!info->input)
+ return -ENOMEM;
+ info->input->id.product = cs40l50->devid & 0xFFFF;
+ info->input->id.version = cs40l50->revid;
+ info->input->name = "cs40l50_vibra";
+
+ input_set_drvdata(info->input, info);
+ input_set_capability(info->input, EV_FF, FF_PERIODIC);
+ input_set_capability(info->input, EV_FF, FF_CUSTOM);
+
+ error = input_ff_create(info->input, FF_MAX_EFFECTS);
+ if (error) {
+ dev_err(info->dev, "Failed to create input device\n");
+ return error;
+ }
+
+ info->input->ff->upload = vibra_add;
+ info->input->ff->playback = vibra_playback;
+ info->input->ff->erase = vibra_erase;
+
+ INIT_LIST_HEAD(&info->effect_head);
+
+ info->vibe_wq = alloc_ordered_workqueue("vibe_wq", WQ_HIGHPRI);
+ if (!info->vibe_wq)
+ return -ENOMEM;
+
+ error = devm_add_action_or_reset(info->dev, vibra_remove_wq, info);
+ if (error)
+ return error;
+
+ return input_register_device(info->input);
+}
+
+static const struct platform_device_id vibra_id_match[] = {
+ { "cs40l50-vibra", },
+ {}
+};
+MODULE_DEVICE_TABLE(platform, vibra_id_match);
+
+static struct platform_driver cs40l50_vibra_driver = {
+ .probe = cs40l50_vibra_probe,
+ .id_table = vibra_id_match,
+ .driver = {
+ .name = "cs40l50-vibra",
+ },
+};
+module_platform_driver(cs40l50_vibra_driver);
+
+MODULE_DESCRIPTION("CS40L50 Advanced Haptic Driver");
+MODULE_AUTHOR("James Ogletree, Cirrus Logic Inc. <james.ogletree@cirrus.com>");
+MODULE_LICENSE("GPL");
--
2.25.1
^ permalink raw reply related
* [PATCH v7 5/5] ASoC: cs40l50: Support I2S streaming to CS40L50
From: James Ogletree @ 2024-02-12 17:31 UTC (permalink / raw)
To: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, lee,
broonie, jeff
Cc: patches, linux-sound, linux-input, devicetree, James Ogletree
In-Reply-To: <20240212173111.771107-1-jogletre@opensource.cirrus.com>
Introduce support for Cirrus Logic Device CS40L50: a
haptic driver with waveform memory, integrated DSP,
and closed-loop algorithms.
The ASoC driver enables I2S streaming to the device.
Signed-off-by: James Ogletree <jogletre@opensource.cirrus.com>
---
MAINTAINERS | 1 +
sound/soc/codecs/Kconfig | 11 ++
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/cs40l50-codec.c | 311 +++++++++++++++++++++++++++++++
4 files changed, 325 insertions(+)
create mode 100644 sound/soc/codecs/cs40l50-codec.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 24cfb4f017bb..fca2454a7a38 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4943,6 +4943,7 @@ F: Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml
F: drivers/input/misc/cs40l*
F: drivers/mfd/cs40l*
F: include/linux/mfd/cs40l*
+F: sound/soc/codecs/cs40l*
CIRRUS LOGIC DSP FIRMWARE DRIVER
M: Simon Trimmer <simont@opensource.cirrus.com>
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index f1e1dbc509f6..1a81bedfdbe3 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -73,6 +73,7 @@ config SND_SOC_ALL_CODECS
imply SND_SOC_CS35L56_I2C
imply SND_SOC_CS35L56_SPI
imply SND_SOC_CS35L56_SDW
+ imply SND_SOC_CS40L50
imply SND_SOC_CS42L42
imply SND_SOC_CS42L42_SDW
imply SND_SOC_CS42L43
@@ -800,6 +801,16 @@ config SND_SOC_CS35L56_SDW
help
Enable support for Cirrus Logic CS35L56 boosted amplifier with SoundWire control
+config SND_SOC_CS40L50
+ tristate "Cirrus Logic CS40L50 CODEC"
+ depends on MFD_CS40L50_CORE
+ help
+ This option enables support for I2S streaming to Cirrus Logic CS40L50.
+
+ CS40L50 is a haptic driver with waveform memory, an integrated
+ DSP, and closed-loop algorithms. If built as a module, it will be
+ called snd-soc-cs40l50.
+
config SND_SOC_CS42L42_CORE
tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index a87e56938ce5..7e31f000774a 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -74,6 +74,7 @@ snd-soc-cs35l56-shared-objs := cs35l56-shared.o
snd-soc-cs35l56-i2c-objs := cs35l56-i2c.o
snd-soc-cs35l56-spi-objs := cs35l56-spi.o
snd-soc-cs35l56-sdw-objs := cs35l56-sdw.o
+snd-soc-cs40l50-objs := cs40l50-codec.o
snd-soc-cs42l42-objs := cs42l42.o
snd-soc-cs42l42-i2c-objs := cs42l42-i2c.o
snd-soc-cs42l42-sdw-objs := cs42l42-sdw.o
@@ -460,6 +461,7 @@ obj-$(CONFIG_SND_SOC_CS35L56_SHARED) += snd-soc-cs35l56-shared.o
obj-$(CONFIG_SND_SOC_CS35L56_I2C) += snd-soc-cs35l56-i2c.o
obj-$(CONFIG_SND_SOC_CS35L56_SPI) += snd-soc-cs35l56-spi.o
obj-$(CONFIG_SND_SOC_CS35L56_SDW) += snd-soc-cs35l56-sdw.o
+obj-$(CONFIG_SND_SOC_CS40L50) += snd-soc-cs40l50.o
obj-$(CONFIG_SND_SOC_CS42L42_CORE) += snd-soc-cs42l42.o
obj-$(CONFIG_SND_SOC_CS42L42) += snd-soc-cs42l42-i2c.o
obj-$(CONFIG_SND_SOC_CS42L42_SDW) += snd-soc-cs42l42-sdw.o
diff --git a/sound/soc/codecs/cs40l50-codec.c b/sound/soc/codecs/cs40l50-codec.c
new file mode 100644
index 000000000000..3632069d6091
--- /dev/null
+++ b/sound/soc/codecs/cs40l50-codec.c
@@ -0,0 +1,311 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * CS40L50 Advanced Haptic Driver with waveform memory,
+ * integrated DSP, and closed-loop algorithms
+ *
+ * Copyright 2024 Cirrus Logic, Inc.
+ *
+ * Author: James Ogletree <james.ogletree@cirrus.com>
+ */
+
+#include <linux/bitfield.h>
+#include <linux/mfd/cs40l50.h>
+#include <linux/pm_runtime.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+
+#define CS40L50_REFCLK_INPUT 0x2C04
+#define CS40L50_ASP_CONTROL2 0x4808
+#define CS40L50_ASP_DATA_CONTROL5 0x4840
+
+/* PLL Config */
+#define CS40L50_PLL_CLK_CFG_32768 0x00
+#define CS40L50_PLL_CLK_CFG_1536000 0x1B
+#define CS40L50_PLL_CLK_CFG_3072000 0x21
+#define CS40L50_PLL_CLK_CFG_6144000 0x28
+#define CS40L50_PLL_CLK_CFG_9600000 0x30
+#define CS40L50_PLL_CLK_CFG_12288000 0x33
+#define CS40L50_PLL_CLK_FRQ_32768 32768
+#define CS40L50_PLL_CLK_FRQ_1536000 1536000
+#define CS40L50_PLL_CLK_FRQ_3072000 3072000
+#define CS40L50_PLL_CLK_FRQ_6144000 6144000
+#define CS40L50_PLL_CLK_FRQ_9600000 9600000
+#define CS40L50_PLL_CLK_FRQ_12288000 12288000
+#define CS40L50_PLL_REFCLK_BCLK 0x0
+#define CS40L50_PLL_REFCLK_MCLK 0x5
+#define CS40L50_PLL_REFCLK_LOOP_MASK BIT(11)
+#define CS40L50_PLL_REFCLK_OPEN_LOOP 1
+#define CS40L50_PLL_REFCLK_CLOSED_LOOP 0
+#define CS40L50_PLL_REFCLK_LOOP_SHIFT 11
+#define CS40L50_PLL_REFCLK_FREQ_MASK GENMASK(10, 5)
+#define CS40L50_PLL_REFCLK_FREQ_SHIFT 5
+#define CS40L50_PLL_REFCLK_SEL_MASK GENMASK(2, 0)
+
+/* ASP Config */
+#define CS40L50_ASP_RX_WIDTH_SHIFT 24
+#define CS40L50_ASP_RX_WIDTH_MASK GENMASK(31, 24)
+#define CS40L50_ASP_RX_WL_MASK GENMASK(5, 0)
+#define CS40L50_ASP_FSYNC_INV_MASK BIT(2)
+#define CS40L50_ASP_BCLK_INV_MASK BIT(6)
+#define CS40L50_ASP_FMT_MASK GENMASK(10, 8)
+#define CS40L50_ASP_FMT_I2S 0x2
+#define CS40L50_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
+
+struct cs40l50_pll_sysclk_config {
+ unsigned int freq;
+ unsigned int clk_cfg;
+};
+
+struct cs40l50_codec {
+ struct device *dev;
+ struct regmap *regmap;
+ unsigned int sysclk_rate;
+ unsigned int daifmt;
+};
+
+static const struct cs40l50_pll_sysclk_config cs40l50_pll_sysclk[] = {
+ {CS40L50_PLL_CLK_FRQ_32768, CS40L50_PLL_CLK_CFG_32768},
+ {CS40L50_PLL_CLK_FRQ_1536000, CS40L50_PLL_CLK_CFG_1536000},
+ {CS40L50_PLL_CLK_FRQ_3072000, CS40L50_PLL_CLK_CFG_3072000},
+ {CS40L50_PLL_CLK_FRQ_6144000, CS40L50_PLL_CLK_CFG_6144000},
+ {CS40L50_PLL_CLK_FRQ_9600000, CS40L50_PLL_CLK_CFG_9600000},
+ {CS40L50_PLL_CLK_FRQ_12288000, CS40L50_PLL_CLK_CFG_12288000},
+};
+
+static int cs40l50_get_clk_config(unsigned int freq, unsigned int *clk_cfg)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(cs40l50_pll_sysclk); i++) {
+ if (cs40l50_pll_sysclk[i].freq == freq) {
+ *clk_cfg = cs40l50_pll_sysclk[i].clk_cfg;
+ return 0;
+ }
+ }
+
+ return -EINVAL;
+}
+
+static int cs40l50_swap_ext_clk(struct cs40l50_codec *codec, unsigned int clk_src)
+{
+ unsigned int clk_cfg;
+ int ret;
+
+ switch (clk_src) {
+ case CS40L50_PLL_REFCLK_BCLK:
+ ret = cs40l50_get_clk_config(codec->sysclk_rate, &clk_cfg);
+ if (ret)
+ return ret;
+ break;
+ case CS40L50_PLL_REFCLK_MCLK:
+ clk_cfg = CS40L50_PLL_CLK_CFG_32768;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ ret = regmap_update_bits(codec->regmap, CS40L50_REFCLK_INPUT,
+ CS40L50_PLL_REFCLK_LOOP_MASK,
+ CS40L50_PLL_REFCLK_OPEN_LOOP <<
+ CS40L50_PLL_REFCLK_LOOP_SHIFT);
+ if (ret)
+ return ret;
+
+ ret = regmap_update_bits(codec->regmap, CS40L50_REFCLK_INPUT,
+ CS40L50_PLL_REFCLK_FREQ_MASK |
+ CS40L50_PLL_REFCLK_SEL_MASK,
+ (clk_cfg << CS40L50_PLL_REFCLK_FREQ_SHIFT) | clk_src);
+ if (ret)
+ return ret;
+
+ return regmap_update_bits(codec->regmap, CS40L50_REFCLK_INPUT,
+ CS40L50_PLL_REFCLK_LOOP_MASK,
+ CS40L50_PLL_REFCLK_CLOSED_LOOP <<
+ CS40L50_PLL_REFCLK_LOOP_SHIFT);
+}
+
+static int cs40l50_clk_en(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol,
+ int event)
+{
+ struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm);
+ struct cs40l50_codec *codec = snd_soc_component_get_drvdata(comp);
+ int ret;
+
+ switch (event) {
+ case SND_SOC_DAPM_POST_PMU:
+ ret = cs40l50_dsp_write(codec->dev, codec->regmap, CS40L50_STOP_PLAYBACK);
+ if (ret)
+ return ret;
+
+ ret = cs40l50_dsp_write(codec->dev, codec->regmap, CS40L50_START_I2S);
+ if (ret)
+ return ret;
+
+ ret = cs40l50_swap_ext_clk(codec, CS40L50_PLL_REFCLK_BCLK);
+ if (ret)
+ return ret;
+ break;
+ case SND_SOC_DAPM_PRE_PMD:
+ ret = cs40l50_swap_ext_clk(codec, CS40L50_PLL_REFCLK_MCLK);
+ if (ret)
+ return ret;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static const struct snd_soc_dapm_widget cs40l50_dapm_widgets[] = {
+ SND_SOC_DAPM_SUPPLY_S("ASP PLL", 0, SND_SOC_NOPM, 0, 0, cs40l50_clk_en,
+ SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_AIF_IN("ASPRX1", NULL, 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_IN("ASPRX2", NULL, 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_OUTPUT("OUT"),
+};
+
+static const struct snd_soc_dapm_route cs40l50_dapm_routes[] = {
+ { "ASP Playback", NULL, "ASP PLL" },
+ { "ASPRX1", NULL, "ASP Playback" },
+ { "ASPRX2", NULL, "ASP Playback" },
+
+ { "OUT", NULL, "ASPRX1" },
+ { "OUT", NULL, "ASPRX2" },
+};
+
+static int cs40l50_component_set_sysclk(struct snd_soc_component *component,
+ int clk_id, int source, unsigned int freq, int dir)
+{
+ struct cs40l50_codec *codec = snd_soc_component_get_drvdata(component);
+
+ codec->sysclk_rate = freq;
+
+ return 0;
+}
+
+static int cs40l50_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
+{
+ struct cs40l50_codec *codec = snd_soc_component_get_drvdata(codec_dai->component);
+
+ if ((fmt & SND_SOC_DAIFMT_MASTER_MASK) != SND_SOC_DAIFMT_CBS_CFS)
+ return -EINVAL;
+
+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+ case SND_SOC_DAIFMT_NB_NF:
+ codec->daifmt = 0;
+ break;
+ case SND_SOC_DAIFMT_NB_IF:
+ codec->daifmt = CS40L50_ASP_FSYNC_INV_MASK;
+ break;
+ case SND_SOC_DAIFMT_IB_NF:
+ codec->daifmt = CS40L50_ASP_BCLK_INV_MASK;
+ break;
+ case SND_SOC_DAIFMT_IB_IF:
+ codec->daifmt = CS40L50_ASP_FSYNC_INV_MASK | CS40L50_ASP_BCLK_INV_MASK;
+ break;
+ default:
+ dev_err(codec->dev, "Invalid clock invert\n");
+ return -EINVAL;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ codec->daifmt |= FIELD_PREP(CS40L50_ASP_FMT_MASK, CS40L50_ASP_FMT_I2S);
+ break;
+ default:
+ dev_err(codec->dev, "Unsupported DAI format\n");
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int cs40l50_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct cs40l50_codec *codec = snd_soc_component_get_drvdata(dai->component);
+ unsigned int asp_rx_wl = params_width(params);
+ int ret;
+
+ ret = regmap_update_bits(codec->regmap, CS40L50_ASP_DATA_CONTROL5,
+ CS40L50_ASP_RX_WL_MASK, asp_rx_wl);
+ if (ret)
+ return ret;
+
+ codec->daifmt |= (asp_rx_wl << CS40L50_ASP_RX_WIDTH_SHIFT);
+
+ return regmap_update_bits(codec->regmap, CS40L50_ASP_CONTROL2,
+ CS40L50_ASP_FSYNC_INV_MASK |
+ CS40L50_ASP_BCLK_INV_MASK |
+ CS40L50_ASP_FMT_MASK |
+ CS40L50_ASP_RX_WIDTH_MASK, codec->daifmt);
+}
+
+static const struct snd_soc_dai_ops cs40l50_dai_ops = {
+ .set_fmt = cs40l50_set_dai_fmt,
+ .hw_params = cs40l50_hw_params,
+};
+
+static struct snd_soc_dai_driver cs40l50_dai[] = {
+ {
+ .name = "cs40l50-pcm",
+ .id = 0,
+ .playback = {
+ .stream_name = "ASP Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = SNDRV_PCM_RATE_48000,
+ .formats = CS40L50_FORMATS,
+ },
+ .ops = &cs40l50_dai_ops,
+ },
+};
+
+static int cs40l50_codec_probe(struct snd_soc_component *component)
+{
+ struct cs40l50_codec *codec = snd_soc_component_get_drvdata(component);
+
+ codec->sysclk_rate = CS40L50_PLL_CLK_FRQ_1536000;
+
+ return 0;
+}
+
+static const struct snd_soc_component_driver soc_codec_dev_cs40l50 = {
+ .probe = cs40l50_codec_probe,
+ .set_sysclk = cs40l50_component_set_sysclk,
+ .dapm_widgets = cs40l50_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(cs40l50_dapm_widgets),
+ .dapm_routes = cs40l50_dapm_routes,
+ .num_dapm_routes = ARRAY_SIZE(cs40l50_dapm_routes),
+};
+
+static int cs40l50_codec_driver_probe(struct platform_device *pdev)
+{
+ struct cs40l50 *cs40l50 = dev_get_drvdata(pdev->dev.parent);
+ struct cs40l50_codec *codec;
+
+ codec = devm_kzalloc(&pdev->dev, sizeof(*codec), GFP_KERNEL);
+ if (!codec)
+ return -ENOMEM;
+
+ codec->regmap = cs40l50->regmap;
+ codec->dev = &pdev->dev;
+
+ return devm_snd_soc_register_component(&pdev->dev, &soc_codec_dev_cs40l50,
+ cs40l50_dai, ARRAY_SIZE(cs40l50_dai));
+}
+
+static struct platform_driver cs40l50_codec_driver = {
+ .probe = cs40l50_codec_driver_probe,
+ .driver = {
+ .name = "cs40l50-codec",
+ },
+};
+module_platform_driver(cs40l50_codec_driver);
+
+MODULE_DESCRIPTION("ASoC CS40L50 driver");
+MODULE_AUTHOR("James Ogletree <james.ogletree@cirrus.com>");
+MODULE_LICENSE("GPL");
--
2.25.1
^ permalink raw reply related
* [PATCH v7 0/5] Add support for CS40L50
From: James Ogletree @ 2024-02-12 17:31 UTC (permalink / raw)
To: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, lee,
broonie, jeff
Cc: patches, linux-sound, linux-input, devicetree, James Ogletree
Changes in v7:
- Fixed sparse warning
- Moved write sequences to private data structure
- Logical and style improvements in write sequence interface
Changes in v6:
- Updated write sequencer interface to be control-name based
- Fix 1. a race condition and 2. non-handling of repeats in playback callback
- Stylistic and logical improvements all around
Changes in v5:
- Added a codec sub-device to support I2S streaming
- Moved write sequencer code from cirrus_haptics to cs_dsp
- Reverted cirrus_haptics library; future Cirrus input
drivers will export and utilize cs40l50_vibra functions
- Added more comments
- Many small stylistic and logical improvements
Changes in v4:
- Moved from Input to MFD
- Moved common Cirrus haptic functions to a library
- Incorporated runtime PM framework
- Many style improvements
Changes in v3:
- YAML formatting corrections
- Fixed typo in MAINTAINERS
- Used generic node name "haptic-driver"
- Fixed probe error code paths
- Switched to "sizeof(*)"
- Removed tree reference in MAINTAINERS
Changes in v2:
- Fixed checkpatch warnings
James Ogletree (5):
firmware: cs_dsp: Add write sequencer interface
dt-bindings: input: cirrus,cs40l50: Add initial DT binding
mfd: cs40l50: Add support for CS40L50 core driver
Input: cs40l50 - Add support for the CS40L50 haptic driver
ASoC: cs40l50: Support I2S streaming to CS40L50
.../bindings/input/cirrus,cs40l50.yaml | 70 +++
MAINTAINERS | 12 +
drivers/firmware/cirrus/cs_dsp.c | 265 ++++++++
drivers/input/misc/Kconfig | 10 +
drivers/input/misc/Makefile | 1 +
drivers/input/misc/cs40l50-vibra.c | 575 ++++++++++++++++++
drivers/mfd/Kconfig | 30 +
drivers/mfd/Makefile | 4 +
drivers/mfd/cs40l50-core.c | 531 ++++++++++++++++
drivers/mfd/cs40l50-i2c.c | 69 +++
drivers/mfd/cs40l50-spi.c | 69 +++
include/linux/firmware/cirrus/cs_dsp.h | 28 +
include/linux/mfd/cs40l50.h | 142 +++++
sound/soc/codecs/Kconfig | 11 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/cs40l50-codec.c | 311 ++++++++++
16 files changed, 2130 insertions(+)
create mode 100644 Documentation/devicetree/bindings/input/cirrus,cs40l50.yaml
create mode 100644 drivers/input/misc/cs40l50-vibra.c
create mode 100644 drivers/mfd/cs40l50-core.c
create mode 100644 drivers/mfd/cs40l50-i2c.c
create mode 100644 drivers/mfd/cs40l50-spi.c
create mode 100644 include/linux/mfd/cs40l50.h
create mode 100644 sound/soc/codecs/cs40l50-codec.c
--
2.25.1
^ permalink raw reply
* [PATCH v7 1/5] firmware: cs_dsp: Add write sequencer interface
From: James Ogletree @ 2024-02-12 17:31 UTC (permalink / raw)
To: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, lee,
broonie, jeff
Cc: patches, linux-sound, linux-input, devicetree, James Ogletree
In-Reply-To: <20240212173111.771107-1-jogletre@opensource.cirrus.com>
A write sequencer is a sequence of register addresses
and values executed by some Cirrus DSPs following
power state transitions.
Add support for Cirrus drivers to update or add to a
write sequencer present in firmware.
Signed-off-by: James Ogletree <jogletre@opensource.cirrus.com>
---
drivers/firmware/cirrus/cs_dsp.c | 265 +++++++++++++++++++++++++
include/linux/firmware/cirrus/cs_dsp.h | 28 +++
2 files changed, 293 insertions(+)
diff --git a/drivers/firmware/cirrus/cs_dsp.c b/drivers/firmware/cirrus/cs_dsp.c
index 79d4254d1f9b..2c754e7c5da1 100644
--- a/drivers/firmware/cirrus/cs_dsp.c
+++ b/drivers/firmware/cirrus/cs_dsp.c
@@ -275,6 +275,12 @@
#define HALO_MPU_VIO_ERR_SRC_MASK 0x00007fff
#define HALO_MPU_VIO_ERR_SRC_SHIFT 0
+/*
+ * Write Sequence
+ */
+#define WSEQ_OP_MAX_WORDS 3
+#define WSEQ_END_OF_SCRIPT 0xFFFFFF
+
struct cs_dsp_ops {
bool (*validate_version)(struct cs_dsp *dsp, unsigned int version);
unsigned int (*parse_sizes)(struct cs_dsp *dsp,
@@ -3339,6 +3345,265 @@ int cs_dsp_chunk_read(struct cs_dsp_chunk *ch, int nbits)
}
EXPORT_SYMBOL_NS_GPL(cs_dsp_chunk_read, FW_CS_DSP);
+
+struct cs_dsp_wseq_op {
+ struct list_head list;
+ u32 address;
+ u32 data;
+ u16 offset;
+ u8 operation;
+};
+
+static int cs_dsp_populate_wseq(struct cs_dsp *dsp, struct cs_dsp_wseq *wseq)
+{
+ struct cs_dsp_wseq_op *op = NULL;
+ struct cs_dsp_chunk ch;
+ u8 *words;
+ int ret;
+
+ if (!wseq->ctl) {
+ cs_dsp_err(dsp, "No control for write sequence\n");
+ return -EINVAL;
+ }
+
+ words = kzalloc(wseq->ctl->len, GFP_KERNEL);
+ if (!words)
+ return -ENOMEM;
+
+ ret = cs_dsp_coeff_read_ctrl(wseq->ctl, 0, words, wseq->ctl->len);
+ if (ret) {
+ cs_dsp_err(dsp, "Failed to read %s: %d\n", wseq->ctl->subname, ret);
+ goto err_free;
+ }
+
+ INIT_LIST_HEAD(&wseq->ops);
+
+ ch = cs_dsp_chunk(words, wseq->ctl->len);
+
+ while (!cs_dsp_chunk_end(&ch)) {
+ op = devm_kzalloc(dsp->dev, sizeof(*op), GFP_KERNEL);
+ if (!op) {
+ ret = -ENOMEM;
+ goto err_free;
+ }
+
+ op->offset = cs_dsp_chunk_bytes(&ch);
+ op->operation = cs_dsp_chunk_read(&ch, 8);
+
+ switch (op->operation) {
+ case CS_DSP_WSEQ_END:
+ op->data = WSEQ_END_OF_SCRIPT;
+ break;
+ case CS_DSP_WSEQ_UNLOCK:
+ op->data = cs_dsp_chunk_read(&ch, 16);
+ break;
+ case CS_DSP_WSEQ_ADDR8:
+ op->address = cs_dsp_chunk_read(&ch, 8);
+ op->data = cs_dsp_chunk_read(&ch, 32);
+ break;
+ case CS_DSP_WSEQ_H16:
+ case CS_DSP_WSEQ_L16:
+ op->address = cs_dsp_chunk_read(&ch, 24);
+ op->data = cs_dsp_chunk_read(&ch, 16);
+ break;
+ case CS_DSP_WSEQ_FULL:
+ op->address = cs_dsp_chunk_read(&ch, 32);
+ op->data = cs_dsp_chunk_read(&ch, 32);
+ break;
+ default:
+ ret = -EINVAL;
+ cs_dsp_err(dsp, "Unsupported op: %X\n", op->operation);
+ goto err_free;
+ }
+
+ list_add_tail(&op->list, &wseq->ops);
+
+ if (op->operation == CS_DSP_WSEQ_END)
+ break;
+ }
+
+ if (op && op->operation != CS_DSP_WSEQ_END) {
+ cs_dsp_err(dsp, "Write sequence missing end terminator\n");
+ ret = -ENOENT;
+ }
+
+err_free:
+ kfree(words);
+
+ return ret;
+}
+
+/**
+ * cs_dsp_wseq_init() - Initialize write sequences contained within the loaded DSP firmware
+ * @dsp: Pointer to DSP structure
+ * @wseqs: List of write sequences to initialize
+ * @num_wseqs: Number of write sequences to initialize
+ *
+ * Return: Zero for success, a negative number on error.
+ */
+int cs_dsp_wseq_init(struct cs_dsp *dsp, struct cs_dsp_wseq *wseqs, unsigned int num_wseqs)
+{
+ int i, ret = 0;
+
+ mutex_lock(&dsp->pwr_lock);
+
+ for (i = 0; i < num_wseqs; i++) {
+ ret = cs_dsp_populate_wseq(dsp, &wseqs[i]);
+ if (ret)
+ break;
+ }
+
+ mutex_unlock(&dsp->pwr_lock);
+
+ return ret;
+}
+EXPORT_SYMBOL_NS_GPL(cs_dsp_wseq_init, FW_CS_DSP);
+
+static struct cs_dsp_wseq_op *cs_dsp_wseq_find_op(u32 addr, u8 op_code,
+ struct list_head *wseq_ops)
+{
+ struct cs_dsp_wseq_op *op;
+
+ list_for_each_entry(op, wseq_ops, list) {
+ if (op->operation == op_code && op->address == addr)
+ return op;
+ }
+
+ return NULL;
+}
+
+/**
+ * cs_dsp_wseq_write() - Add or update an entry in a write sequence
+ * @dsp: Pointer to a DSP structure
+ * @wseq: Write sequence to write to
+ * @addr: Address of the register to be written to
+ * @data: Data to be written
+ * @op_code: The type of operation of the new entry
+ * @update: If true, searches for the first entry in the write sequence with
+ * the same address and op_code, and replaces it. If false, creates a new entry
+ * at the tail.
+ *
+ * This function formats register address and value pairs into the format
+ * required for write sequence entries, and either updates or adds the
+ * new entry into the write sequence.
+ *
+ * If update is set to true and no matching entry is found, it will add a new entry.
+ *
+ * Return: Zero for success, a negative number on error.
+ */
+int cs_dsp_wseq_write(struct cs_dsp *dsp, struct cs_dsp_wseq *wseq,
+ u32 addr, u32 data, u8 op_code, bool update)
+{
+ struct cs_dsp_wseq_op *op_end, *op_new = NULL;
+ u32 words[WSEQ_OP_MAX_WORDS];
+ struct cs_dsp_chunk ch;
+ int new_op_size, ret;
+
+ if (update)
+ op_new = cs_dsp_wseq_find_op(addr, op_code, &wseq->ops);
+
+ /* If entry to update is not found, treat it as a new operation */
+ if (!op_new) {
+ op_end = cs_dsp_wseq_find_op(0, CS_DSP_WSEQ_END, &wseq->ops);
+ if (!op_end) {
+ cs_dsp_err(dsp, "Missing write sequence list terminator\n");
+ return -EINVAL;
+ }
+
+ op_new = devm_kzalloc(dsp->dev, sizeof(*op_new), GFP_KERNEL);
+ if (!op_new)
+ return -ENOMEM;
+
+ op_new->operation = op_code;
+ op_new->address = addr;
+ op_new->offset = op_end->offset;
+ update = false;
+ }
+
+ op_new->data = data;
+
+ ch = cs_dsp_chunk(words, sizeof(words));
+ cs_dsp_chunk_write(&ch, 8, op_new->operation);
+ switch (op_code) {
+ case CS_DSP_WSEQ_FULL:
+ cs_dsp_chunk_write(&ch, 32, op_new->address);
+ cs_dsp_chunk_write(&ch, 32, op_new->data);
+ break;
+ case CS_DSP_WSEQ_L16:
+ case CS_DSP_WSEQ_H16:
+ cs_dsp_chunk_write(&ch, 24, op_new->address);
+ cs_dsp_chunk_write(&ch, 16, op_new->data);
+ break;
+ default:
+ ret = -EINVAL;
+ cs_dsp_err(dsp, "Op code not supported: %X\n", op_code);
+ goto op_new_free;
+ }
+
+ new_op_size = cs_dsp_chunk_bytes(&ch);
+
+ if (!update) {
+ if (wseq->ctl->len - op_end->offset < new_op_size) {
+ cs_dsp_err(dsp, "Not enough memory in write sequence for entry\n");
+ ret = -ENOMEM;
+ goto op_new_free;
+ }
+
+ op_end->offset += new_op_size;
+
+ ret = cs_dsp_coeff_write_ctrl(wseq->ctl, op_end->offset / sizeof(u32),
+ &op_end->data, sizeof(u32));
+ if (ret)
+ goto op_new_free;
+
+ list_add_tail(&op_new->list, &wseq->ops);
+ }
+
+ ret = cs_dsp_coeff_write_ctrl(wseq->ctl, op_new->offset / sizeof(u32),
+ words, new_op_size);
+ if (ret)
+ goto op_new_free;
+
+ return 0;
+
+op_new_free:
+ devm_kfree(dsp->dev, op_new);
+
+ return ret;
+}
+EXPORT_SYMBOL_NS_GPL(cs_dsp_wseq_write, FW_CS_DSP);
+
+/**
+ * cs_dsp_wseq_multi_write() - Add or update multiple entries in the write sequence
+ * @dsp: Pointer to a DSP structure
+ * @wseq: Write sequence to write to
+ * @reg_seq: List of address-data pairs
+ * @num_regs: Number of address-data pairs
+ * @op_code: The types of operations of the new entries
+ * @update: If true, searches for the first entry in the write sequence with the same
+ * address and op code, and replaces it. If false, creates a new entry at the tail.
+ *
+ * This function calls cs_dsp_wseq_write() for multiple address-data pairs.
+ *
+ * Return: Zero for success, a negative number on error.
+ */
+int cs_dsp_wseq_multi_write(struct cs_dsp *dsp, struct cs_dsp_wseq *wseq,
+ const struct reg_sequence *reg_seq, int num_regs,
+ u8 op_code, bool update)
+{
+ int ret, i;
+
+ for (i = 0; i < num_regs; i++) {
+ ret = cs_dsp_wseq_write(dsp, wseq, reg_seq[i].reg,
+ reg_seq[i].def, update, op_code);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_NS_GPL(cs_dsp_wseq_multi_write, FW_CS_DSP);
+
MODULE_DESCRIPTION("Cirrus Logic DSP Support");
MODULE_AUTHOR("Simon Trimmer <simont@opensource.cirrus.com>");
MODULE_LICENSE("GPL v2");
diff --git a/include/linux/firmware/cirrus/cs_dsp.h b/include/linux/firmware/cirrus/cs_dsp.h
index 29cd11d5a3cf..cfeab75772f6 100644
--- a/include/linux/firmware/cirrus/cs_dsp.h
+++ b/include/linux/firmware/cirrus/cs_dsp.h
@@ -42,6 +42,16 @@
#define CS_DSP_ACKED_CTL_MIN_VALUE 0
#define CS_DSP_ACKED_CTL_MAX_VALUE 0xFFFFFF
+/*
+ * Write sequence operation codes
+ */
+#define CS_DSP_WSEQ_FULL 0x00
+#define CS_DSP_WSEQ_ADDR8 0x02
+#define CS_DSP_WSEQ_L16 0x04
+#define CS_DSP_WSEQ_H16 0x05
+#define CS_DSP_WSEQ_UNLOCK 0xFD
+#define CS_DSP_WSEQ_END 0xFF
+
/**
* struct cs_dsp_region - Describes a logical memory region in DSP address space
* @type: Memory region type
@@ -255,6 +265,24 @@ struct cs_dsp_alg_region *cs_dsp_find_alg_region(struct cs_dsp *dsp,
const char *cs_dsp_mem_region_name(unsigned int type);
+/**
+ * struct cs_dsp_wseq - Describes a write sequence
+ * @name: Name of cs_dsp control
+ * @ctl: Write sequence cs_dsp control
+ * @ops: Operations contained within this write sequence
+ */
+struct cs_dsp_wseq {
+ struct cs_dsp_coeff_ctl *ctl;
+ struct list_head ops;
+};
+
+int cs_dsp_wseq_init(struct cs_dsp *dsp, struct cs_dsp_wseq *wseqs, unsigned int num_wseqs);
+int cs_dsp_wseq_write(struct cs_dsp *dsp, struct cs_dsp_wseq *wseq, u32 addr, u32 data,
+ u8 op_code, bool update);
+int cs_dsp_wseq_multi_write(struct cs_dsp *dsp, struct cs_dsp_wseq *wseq,
+ const struct reg_sequence *reg_seq, int num_regs,
+ u8 op_code, bool update);
+
/**
* struct cs_dsp_chunk - Describes a buffer holding data formatted for the DSP
* @data: Pointer to underlying buffer memory
--
2.25.1
^ permalink raw reply related
* Re: [PATCH RFC bpf-next 0/9] allow HID-BPF to do device IOs
From: Toke Høiland-Jørgensen @ 2024-02-12 17:46 UTC (permalink / raw)
To: Benjamin Tissoires
Cc: Benjamin Tissoires, Alexei Starovoitov, Daniel Borkmann,
John Fastabend, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, KP Singh,
Stanislav Fomichev, Hao Luo, Jiri Olsa, Jiri Kosina,
Jonathan Corbet, Shuah Khan, bpf, linux-kernel, linux-input,
linux-doc, linux-kselftest
In-Reply-To: <CAO-hwJLvEGNRXc8G2PR+AQ6kJg+k5YqSt3F7LCSc0zWnmFfe5g@mail.gmail.com>
Benjamin Tissoires <benjamin.tissoires@redhat.com> writes:
[...]
>> IIUC, the bpf_timer callback is just a function (subprog) from the
>> verifier PoV, so it is verified as whatever program type is creating the
>> timer. So in other words, as long as you setup the timer from inside a
>> tracing prog type, you should have access to all the same kfuncs, I
>> think?
>
> Yep, you are correct. But as mentioned above, I am now in trouble with
> the sleepable state:
> - I need to call timer_start() from a non sleepable tracing function
> (I'm in hard IRQ when dealing with a physical device)
> - but then, ideally, the callback function needs to be tagged as a
> sleepable one, so I can export my kfuncs which are doing kzalloc and
> device IO as such.
>
> However, I can not really teach the BPF verifier to do so:
> - it seems to check for the callback first when it is loaded, and
> there is no SEC() equivalent for static functions
> - libbpf doesn't have access to the callback as a prog as it has to be
> a static function, and thus isn't exported as a full-blown prog.
> - the verifier only checks for the callback when dealing with
> BPF_FUNC_timer_set_callback, which doesn't have a "flag" argument
> (though the validation of the callback has already been done while
> checking it first, so we are already too late to change the sleppable
> state of the callback)
>
> Right now, the only OK-ish version I have is declaring the kfunc as
> non-sleepable, but checking that we are in a different context than
> the IRQ of the initial event. This way, I am not crashing if this
> function is called from the initial IRQ, but will still crash if used
> outside of the hid context.
>
> This is not satisfactory, but I feel like it's going to be hard to
> teach the verifier that the callback function is sleepable in that
> case (maybe we could suffix the callback name, like we do for
> arguments, but this is not very clean either).
The callback is only set once when the timer is first setup; I *think*
it works to do the setup (bpf_timer_init() and bpf_timer_set_callback())
in the context you need (from a sleepable prog), but do the arming
(bpf_timer_start()) from a different program that is not itself sleepable?
-Toke
^ permalink raw reply
* Re: [PATCH 0/2] HID: samsung: Object code size reduction and neatening
From: Joe Perches @ 2024-02-12 18:09 UTC (permalink / raw)
To: linux-input
Cc: Sandeep C S, Junwan Cho, Jitender Sajwan, Jiri Kosina,
Benjamin Tissoires, linux-kernel
In-Reply-To: <cover.1706732238.git.joe@perches.com>
On Wed, 2024-01-31 at 12:21 -0800, Joe Perches wrote:
> Reduce object size and neatening
>
> Joe Perches (2):
> HID: samsung: Reduce code size
> HID: samsung: Object size reduction and neatening
>
> drivers/hid/hid-samsung.c | 652 +++++++++++++++++---------------------
> 1 file changed, 283 insertions(+), 369 deletions(-)
Any comment from the samsung folk on these?
^ permalink raw reply
* Re: [PATCH RFC bpf-next 0/9] allow HID-BPF to do device IOs
From: Benjamin Tissoires @ 2024-02-12 18:20 UTC (permalink / raw)
To: Toke Høiland-Jørgensen
Cc: Benjamin Tissoires, Alexei Starovoitov, Daniel Borkmann,
John Fastabend, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, KP Singh,
Stanislav Fomichev, Hao Luo, Jiri Olsa, Jiri Kosina,
Jonathan Corbet, Shuah Khan, bpf, linux-kernel, linux-input,
linux-doc, linux-kselftest
In-Reply-To: <87r0hhfudh.fsf@toke.dk>
On Mon, Feb 12, 2024 at 6:46 PM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
>
> Benjamin Tissoires <benjamin.tissoires@redhat.com> writes:
>
> [...]
> >> IIUC, the bpf_timer callback is just a function (subprog) from the
> >> verifier PoV, so it is verified as whatever program type is creating the
> >> timer. So in other words, as long as you setup the timer from inside a
> >> tracing prog type, you should have access to all the same kfuncs, I
> >> think?
> >
> > Yep, you are correct. But as mentioned above, I am now in trouble with
> > the sleepable state:
> > - I need to call timer_start() from a non sleepable tracing function
> > (I'm in hard IRQ when dealing with a physical device)
> > - but then, ideally, the callback function needs to be tagged as a
> > sleepable one, so I can export my kfuncs which are doing kzalloc and
> > device IO as such.
> >
> > However, I can not really teach the BPF verifier to do so:
> > - it seems to check for the callback first when it is loaded, and
> > there is no SEC() equivalent for static functions
> > - libbpf doesn't have access to the callback as a prog as it has to be
> > a static function, and thus isn't exported as a full-blown prog.
> > - the verifier only checks for the callback when dealing with
> > BPF_FUNC_timer_set_callback, which doesn't have a "flag" argument
> > (though the validation of the callback has already been done while
> > checking it first, so we are already too late to change the sleppable
> > state of the callback)
> >
> > Right now, the only OK-ish version I have is declaring the kfunc as
> > non-sleepable, but checking that we are in a different context than
> > the IRQ of the initial event. This way, I am not crashing if this
> > function is called from the initial IRQ, but will still crash if used
> > outside of the hid context.
> >
> > This is not satisfactory, but I feel like it's going to be hard to
> > teach the verifier that the callback function is sleepable in that
> > case (maybe we could suffix the callback name, like we do for
> > arguments, but this is not very clean either).
>
> The callback is only set once when the timer is first setup; I *think*
> it works to do the setup (bpf_timer_init() and bpf_timer_set_callback())
> in the context you need (from a sleepable prog), but do the arming
> (bpf_timer_start()) from a different program that is not itself sleepable?
>
Genius! It works, and I can just keep having them declared as a
syscall kfunc, not as a tracing kfunc.
But isn't this an issue outside of my use case? I mean, if the
callback is assuming the environment for when it is set up but can be
called from any context there seems to be a problem when 2 contexts
are not equivalent, no?
^ permalink raw reply
* Re: [PATCH] Input: psmouse - add resync_on_resume dmi check
From: Jonathan Denose @ 2024-02-12 20:57 UTC (permalink / raw)
To: Dmitry Torokhov
Cc: LKML, jefferymiller, Jonathan Denose, Raul Rangel, linux-input
In-Reply-To: <ZcZ2oG1Rls-oR593@google.com>
[-- Attachment #1: Type: text/plain, Size: 2294 bytes --]
Sure thing!
Attached is the dmesg output with the i8042.debug option and without
the change in this patch.
On Fri, Feb 9, 2024 at 1:02 PM Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
>
> On Wed, Feb 07, 2024 at 10:39:03AM -0600, Jonathan Denose wrote:
> > Hi Dmitry,
> >
> > Thanks for your reply.
> >
> > On Tue, Feb 6, 2024 at 4:04 PM Dmitry Torokhov
> > <dmitry.torokhov@gmail.com> wrote:
> > >
> > > Hi Jonathan,
> > >
> > > On Thu, Nov 02, 2023 at 07:52:47AM -0500, Jonathan Denose wrote:
> > > > Some elantech touchpads consistently fail after resuming from
> > > > suspend at sanity_check in elantech_packet_check_v4. This means
> > > > the touchpad is completely unusable after suspend resume.
> > > >
> > > > With different permutations of i8042 nomux, nopnp, reset, and noloop
> > > > kernel options enabled, and with crc_enabled the touchpad fails in
> > > > the same way.
> > > >
> > > > Resyncing the touchpad after receiving the
> > > > PACKET_UNKNOWN/PSMOUSE_BAD_DATA return code allows the touchpad to
> > > > function correctly on resume. The touchpad fails to reconnect with
> > > > the serio reconnect no matter how many times it retries, so this
> > > > change skips over that retry sequence and goes directly to resync.
> > >
> > > Why can't we do this in elantech_reconnect()? I am sure we can make it
> > > simpler and more robust than what the generic handler is trying to do
> > > with polling and everything.
> > >
> > > Thanks.
> > >
> > > --
> > > Dmitry
> >
> > I am fine with anything that would be simpler and more robust, though
> > I'm not sure how to implement what you are describing.
> >
> > Are you suggesting that in this PSMOUSE_BAD_DATA case, instead of
> > using psmouse_set_state and psmouse_queue_work to call
> > psmouse->reconnect (which calls elantech_reconnect)?
>
> No. From the description it sounds like the device sends wrong/extra
> data right after resume. I think you can handle it in
> elantech_reconnect() method by draining the buffer or issuing poll
> request or something similar.
>
> Can you post the i8042 data stream that happens on suspend/resume?
> Toggling i8042.debug option will cause the driver to dump the data to
> dmesg.
>
> Thanks.
>
> --
> Dmitry
[-- Attachment #2: i8042_suspend_resume_dmesg.txt --]
[-- Type: text/plain, Size: 261030 bytes --]
[ 43.799575] i8042: [42993] d0 <- i8042 (interrupt, 1, 12)
[ 43.801315] i8042: [42995] ef <- i8042 (interrupt, 1, 12)
[ 43.802696] i8042: [42996] 44 <- i8042 (interrupt, 1, 12)
[ 43.804331] i8042: [42998] 12 <- i8042 (interrupt, 1, 12)
[ 43.805905] i8042: [42999] 5c <- i8042 (interrupt, 1, 12)
[ 43.807482] i8042: [43001] 31 <- i8042 (interrupt, 1, 12)
[ 43.809069] i8042: [43003] d0 <- i8042 (interrupt, 1, 12)
[ 43.810656] i8042: [43004] f1 <- i8042 (interrupt, 1, 12)
[ 43.812736] i8042: [43006] 44 <- i8042 (interrupt, 1, 12)
[ 43.814330] i8042: [43008] 12 <- i8042 (interrupt, 1, 12)
[ 43.815911] i8042: [43009] 55 <- i8042 (interrupt, 1, 12)
[ 43.817488] i8042: [43011] 31 <- i8042 (interrupt, 1, 12)
[ 43.819053] i8042: [43013] d0 <- i8042 (interrupt, 1, 12)
[ 43.820654] i8042: [43014] f2 <- i8042 (interrupt, 1, 12)
[ 43.822222] i8042: [43016] 44 <- i8042 (interrupt, 1, 12)
[ 43.823820] i8042: [43017] 12 <- i8042 (interrupt, 1, 12)
[ 43.825402] i8042: [43019] 4e <- i8042 (interrupt, 1, 12)
[ 43.826993] i8042: [43021] 31 <- i8042 (interrupt, 1, 12)
[ 43.828586] i8042: [43022] d0 <- i8042 (interrupt, 1, 12)
[ 43.830160] i8042: [43024] f2 <- i8042 (interrupt, 1, 12)
[ 43.831744] i8042: [43025] 44 <- i8042 (interrupt, 1, 12)
[ 43.833325] i8042: [43027] 12 <- i8042 (interrupt, 1, 12)
[ 43.834906] i8042: [43028] 48 <- i8042 (interrupt, 1, 12)
[ 43.836489] i8042: [43030] 31 <- i8042 (interrupt, 1, 12)
[ 43.838072] i8042: [43032] f0 <- i8042 (interrupt, 1, 12)
[ 43.839656] i8042: [43033] f3 <- i8042 (interrupt, 1, 12)
[ 43.841739] i8042: [43035] 44 <- i8042 (interrupt, 1, 12)
[ 43.843330] i8042: [43037] 12 <- i8042 (interrupt, 1, 12)
[ 43.844906] i8042: [43038] 43 <- i8042 (interrupt, 1, 12)
[ 43.846495] i8042: [43040] 31 <- i8042 (interrupt, 1, 12)
[ 43.848087] i8042: [43042] f0 <- i8042 (interrupt, 1, 12)
[ 43.849662] i8042: [43043] f4 <- i8042 (interrupt, 1, 12)
[ 43.851207] i8042: [43045] 44 <- i8042 (interrupt, 1, 12)
[ 43.852824] i8042: [43046] 12 <- i8042 (interrupt, 1, 12)
[ 43.854406] i8042: [43048] 3d <- i8042 (interrupt, 1, 12)
[ 43.855989] i8042: [43050] 31 <- i8042 (interrupt, 1, 12)
[ 43.857569] i8042: [43051] f0 <- i8042 (interrupt, 1, 12)
[ 43.859086] i8042: [43053] f5 <- i8042 (interrupt, 1, 12)
[ 43.860735] i8042: [43054] 44 <- i8042 (interrupt, 1, 12)
[ 43.862323] i8042: [43056] 12 <- i8042 (interrupt, 1, 12)
[ 43.863911] i8042: [43057] 39 <- i8042 (interrupt, 1, 12)
[ 43.865483] i8042: [43059] 31 <- i8042 (interrupt, 1, 12)
[ 43.867082] i8042: [43061] f0 <- i8042 (interrupt, 1, 12)
[ 43.868646] i8042: [43062] f6 <- i8042 (interrupt, 1, 12)
[ 43.870735] i8042: [43064] 44 <- i8042 (interrupt, 1, 12)
[ 43.872324] i8042: [43066] 12 <- i8042 (interrupt, 1, 12)
[ 43.873899] i8042: [43067] 34 <- i8042 (interrupt, 1, 12)
[ 43.875544] i8042: [43069] 31 <- i8042 (interrupt, 1, 12)
[ 43.877067] i8042: [43071] f0 <- i8042 (interrupt, 1, 12)
[ 43.878646] i8042: [43072] f7 <- i8042 (interrupt, 1, 12)
[ 43.880166] i8042: [43074] 44 <- i8042 (interrupt, 1, 12)
[ 43.881814] i8042: [43075] 12 <- i8042 (interrupt, 1, 12)
[ 43.883397] i8042: [43077] 2f <- i8042 (interrupt, 1, 12)
[ 43.884988] i8042: [43079] 31 <- i8042 (interrupt, 1, 12)
[ 43.886570] i8042: [43080] f0 <- i8042 (interrupt, 1, 12)
[ 43.888083] i8042: [43082] f8 <- i8042 (interrupt, 1, 12)
[ 43.890242] i8042: [43084] 44 <- i8042 (interrupt, 1, 12)
[ 43.891842] i8042: [43085] 12 <- i8042 (interrupt, 1, 12)
[ 43.893417] i8042: [43087] 2b <- i8042 (interrupt, 1, 12)
[ 43.894992] i8042: [43089] 31 <- i8042 (interrupt, 1, 12)
[ 43.896594] i8042: [43090] f0 <- i8042 (interrupt, 1, 12)
[ 43.898156] i8042: [43092] f8 <- i8042 (interrupt, 1, 12)
[ 43.899718] i8042: [43093] 44 <- i8042 (interrupt, 1, 12)
[ 43.901339] i8042: [43095] 12 <- i8042 (interrupt, 1, 12)
[ 43.902908] i8042: [43096] 26 <- i8042 (interrupt, 1, 12)
[ 43.904487] i8042: [43098] 31 <- i8042 (interrupt, 1, 12)
[ 43.906076] i8042: [43100] f0 <- i8042 (interrupt, 1, 12)
[ 43.907654] i8042: [43101] f8 <- i8042 (interrupt, 1, 12)
[ 43.909175] i8042: [43103] 44 <- i8042 (interrupt, 1, 12)
[ 43.910821] i8042: [43104] 12 <- i8042 (interrupt, 1, 12)
[ 43.912403] i8042: [43106] 21 <- i8042 (interrupt, 1, 12)
[ 43.913997] i8042: [43108] 31 <- i8042 (interrupt, 1, 12)
[ 43.915568] i8042: [43109] f0 <- i8042 (interrupt, 1, 12)
[ 43.917083] i8042: [43111] f9 <- i8042 (interrupt, 1, 12)
[ 43.919240] i8042: [43113] 44 <- i8042 (interrupt, 1, 12)
[ 43.920823] i8042: [43114] 12 <- i8042 (interrupt, 1, 12)
[ 43.922417] i8042: [43116] 1a <- i8042 (interrupt, 1, 12)
[ 43.923985] i8042: [43118] 31 <- i8042 (interrupt, 1, 12)
[ 43.925570] i8042: [43119] f0 <- i8042 (interrupt, 1, 12)
[ 43.927153] i8042: [43121] fb <- i8042 (interrupt, 1, 12)
[ 43.928726] i8042: [43122] 44 <- i8042 (interrupt, 1, 12)
[ 43.930316] i8042: [43124] 12 <- i8042 (interrupt, 1, 12)
[ 43.931900] i8042: [43125] 15 <- i8042 (interrupt, 1, 12)
[ 43.933488] i8042: [43127] 31 <- i8042 (interrupt, 1, 12)
[ 43.935071] i8042: [43129] f0 <- i8042 (interrupt, 1, 12)
[ 43.936645] i8042: [43130] fd <- i8042 (interrupt, 1, 12)
[ 43.938181] i8042: [43132] 54 <- i8042 (interrupt, 1, 12)
[ 43.939816] i8042: [43133] 12 <- i8042 (interrupt, 1, 12)
[ 43.941396] i8042: [43135] 0f <- i8042 (interrupt, 1, 12)
[ 43.942984] i8042: [43137] 31 <- i8042 (interrupt, 1, 12)
[ 43.944567] i8042: [43138] f1 <- i8042 (interrupt, 1, 12)
[ 43.946074] i8042: [43140] 00 <- i8042 (interrupt, 1, 12)
[ 43.948240] i8042: [43142] 54 <- i8042 (interrupt, 1, 12)
[ 43.949823] i8042: [43143] 12 <- i8042 (interrupt, 1, 12)
[ 43.951410] i8042: [43145] 08 <- i8042 (interrupt, 1, 12)
[ 43.952987] i8042: [43147] 31 <- i8042 (interrupt, 1, 12)
[ 43.954562] i8042: [43148] f1 <- i8042 (interrupt, 1, 12)
[ 43.956156] i8042: [43150] 03 <- i8042 (interrupt, 1, 12)
[ 43.957746] i8042: [43151] 54 <- i8042 (interrupt, 1, 12)
[ 43.959314] i8042: [43153] 12 <- i8042 (interrupt, 1, 12)
[ 43.960893] i8042: [43154] 01 <- i8042 (interrupt, 1, 12)
[ 43.962484] i8042: [43156] 31 <- i8042 (interrupt, 1, 12)
[ 43.964071] i8042: [43158] f1 <- i8042 (interrupt, 1, 12)
[ 43.965647] i8042: [43159] 05 <- i8042 (interrupt, 1, 12)
[ 43.967162] i8042: [43161] 54 <- i8042 (interrupt, 1, 12)
[ 43.968812] i8042: [43162] 11 <- i8042 (interrupt, 1, 12)
[ 43.970398] i8042: [43164] fa <- i8042 (interrupt, 1, 12)
[ 43.971981] i8042: [43166] 31 <- i8042 (interrupt, 1, 12)
[ 43.973558] i8042: [43167] f1 <- i8042 (interrupt, 1, 12)
[ 43.975071] i8042: [43169] 07 <- i8042 (interrupt, 1, 12)
[ 43.977203] i8042: [43171] 54 <- i8042 (interrupt, 1, 12)
[ 43.978810] i8042: [43172] 11 <- i8042 (interrupt, 1, 12)
[ 43.980401] i8042: [43174] f4 <- i8042 (interrupt, 1, 12)
[ 43.981979] i8042: [43176] 31 <- i8042 (interrupt, 1, 12)
[ 43.983564] i8042: [43177] f1 <- i8042 (interrupt, 1, 12)
[ 43.985145] i8042: [43179] 09 <- i8042 (interrupt, 1, 12)
[ 43.986729] i8042: [43180] 54 <- i8042 (interrupt, 1, 12)
[ 43.988323] i8042: [43182] 11 <- i8042 (interrupt, 1, 12)
[ 43.989889] i8042: [43183] ef <- i8042 (interrupt, 1, 12)
[ 43.991477] i8042: [43185] 31 <- i8042 (interrupt, 1, 12)
[ 43.993058] i8042: [43187] f1 <- i8042 (interrupt, 1, 12)
[ 43.994638] i8042: [43188] 0b <- i8042 (interrupt, 1, 12)
[ 43.996176] i8042: [43190] 54 <- i8042 (interrupt, 1, 12)
[ 43.997804] i8042: [43191] 11 <- i8042 (interrupt, 1, 12)
[ 43.999353] i8042: [43193] ea <- i8042 (interrupt, 1, 12)
[ 44.000993] i8042: [43195] 31 <- i8042 (interrupt, 1, 12)
[ 44.002483] i8042: [43196] f1 <- i8042 (interrupt, 1, 12)
[ 44.004056] i8042: [43198] 0c <- i8042 (interrupt, 1, 12)
[ 44.006163] i8042: [43200] 54 <- i8042 (interrupt, 1, 12)
[ 44.007808] i8042: [43201] 11 <- i8042 (interrupt, 1, 12)
[ 44.009390] i8042: [43203] e5 <- i8042 (interrupt, 1, 12)
[ 44.011001] i8042: [43205] 31 <- i8042 (interrupt, 1, 12)
[ 44.012579] i8042: [43206] f1 <- i8042 (interrupt, 1, 12)
[ 44.014166] i8042: [43208] 0e <- i8042 (interrupt, 1, 12)
[ 44.015694] i8042: [43209] 54 <- i8042 (interrupt, 1, 12)
[ 44.017312] i8042: [43211] 11 <- i8042 (interrupt, 1, 12)
[ 44.018901] i8042: [43212] e1 <- i8042 (interrupt, 1, 12)
[ 44.020485] i8042: [43214] 31 <- i8042 (interrupt, 1, 12)
[ 44.022066] i8042: [43216] f1 <- i8042 (interrupt, 1, 12)
[ 44.023646] i8042: [43217] 0f <- i8042 (interrupt, 1, 12)
[ 44.025172] i8042: [43219] 54 <- i8042 (interrupt, 1, 12)
[ 44.026821] i8042: [43220] 11 <- i8042 (interrupt, 1, 12)
[ 44.028393] i8042: [43222] df <- i8042 (interrupt, 1, 12)
[ 44.029985] i8042: [43224] 31 <- i8042 (interrupt, 1, 12)
[ 44.031564] i8042: [43225] f1 <- i8042 (interrupt, 1, 12)
[ 44.033071] i8042: [43227] 10 <- i8042 (interrupt, 1, 12)
[ 44.035234] i8042: [43229] 54 <- i8042 (interrupt, 1, 12)
[ 44.036815] i8042: [43230] 11 <- i8042 (interrupt, 1, 12)
[ 44.038405] i8042: [43232] dd <- i8042 (interrupt, 1, 12)
[ 44.039984] i8042: [43234] 31 <- i8042 (interrupt, 1, 12)
[ 44.041566] i8042: [43235] f1 <- i8042 (interrupt, 1, 12)
[ 44.043149] i8042: [43237] 11 <- i8042 (interrupt, 1, 12)
[ 44.044714] i8042: [43238] 54 <- i8042 (interrupt, 1, 12)
[ 44.046319] i8042: [43240] 11 <- i8042 (interrupt, 1, 12)
[ 44.047900] i8042: [43241] dd <- i8042 (interrupt, 1, 12)
[ 44.049480] i8042: [43243] 31 <- i8042 (interrupt, 1, 12)
[ 44.051068] i8042: [43245] f1 <- i8042 (interrupt, 1, 12)
[ 44.052651] i8042: [43246] 12 <- i8042 (interrupt, 1, 12)
[ 44.054166] i8042: [43248] 54 <- i8042 (interrupt, 1, 12)
[ 44.055815] i8042: [43249] 11 <- i8042 (interrupt, 1, 12)
[ 44.057399] i8042: [43251] dd <- i8042 (interrupt, 1, 12)
[ 44.058988] i8042: [43253] 31 <- i8042 (interrupt, 1, 12)
[ 44.060568] i8042: [43254] f1 <- i8042 (interrupt, 1, 12)
[ 44.062078] i8042: [43256] 12 <- i8042 (interrupt, 1, 12)
[ 44.064239] i8042: [43258] 54 <- i8042 (interrupt, 1, 12)
[ 44.065821] i8042: [43259] 11 <- i8042 (interrupt, 1, 12)
[ 44.067401] i8042: [43261] dd <- i8042 (interrupt, 1, 12)
[ 44.068986] i8042: [43263] 31 <- i8042 (interrupt, 1, 12)
[ 44.070562] i8042: [43264] f1 <- i8042 (interrupt, 1, 12)
[ 44.072151] i8042: [43266] 12 <- i8042 (interrupt, 1, 12)
[ 44.073735] i8042: [43267] 54 <- i8042 (interrupt, 1, 12)
[ 44.075341] i8042: [43269] 11 <- i8042 (interrupt, 1, 12)
[ 44.076901] i8042: [43270] df <- i8042 (interrupt, 1, 12)
[ 44.078475] i8042: [43272] 31 <- i8042 (interrupt, 1, 12)
[ 44.080058] i8042: [43274] f1 <- i8042 (interrupt, 1, 12)
[ 44.081575] i8042: [43275] 13 <- i8042 (interrupt, 1, 12)
[ 44.083233] i8042: [43277] 54 <- i8042 (interrupt, 1, 12)
[ 44.084816] i8042: [43278] 11 <- i8042 (interrupt, 1, 12)
[ 44.086396] i8042: [43280] e1 <- i8042 (interrupt, 1, 12)
[ 44.087982] i8042: [43282] 31 <- i8042 (interrupt, 1, 12)
[ 44.089560] i8042: [43283] d1 <- i8042 (interrupt, 1, 12)
[ 44.091151] i8042: [43285] 13 <- i8042 (interrupt, 1, 12)
[ 44.093234] i8042: [43287] 44 <- i8042 (interrupt, 1, 12)
[ 44.094820] i8042: [43288] 11 <- i8042 (interrupt, 1, 12)
[ 44.096411] i8042: [43290] e4 <- i8042 (interrupt, 1, 12)
[ 44.097991] i8042: [43292] 31 <- i8042 (interrupt, 1, 12)
[ 44.099571] i8042: [43293] c1 <- i8042 (interrupt, 1, 12)
[ 44.101121] i8042: [43295] 13 <- i8042 (interrupt, 1, 12)
[ 44.102722] i8042: [43296] 44 <- i8042 (interrupt, 1, 12)
[ 44.104318] i8042: [43298] 11 <- i8042 (interrupt, 1, 12)
[ 44.105901] i8042: [43299] ec <- i8042 (interrupt, 1, 12)
[ 44.107486] i8042: [43301] 31 <- i8042 (interrupt, 1, 12)
[ 44.109051] i8042: [43303] 91 <- i8042 (interrupt, 1, 12)
[ 44.110646] i8042: [43304] 12 <- i8042 (interrupt, 1, 12)
[ 44.112733] i8042: [43306] 44 <- i8042 (interrupt, 1, 12)
[ 44.114322] i8042: [43308] 11 <- i8042 (interrupt, 1, 12)
[ 44.115902] i8042: [43309] f4 <- i8042 (interrupt, 1, 12)
[ 44.117479] i8042: [43311] 31 <- i8042 (interrupt, 1, 12)
[ 44.119065] i8042: [43313] 11 <- i8042 (interrupt, 1, 12)
[ 44.120646] i8042: [43314] 11 <- i8042 (interrupt, 1, 12)
[ 44.122197] i8042: [43316] 44 <- i8042 (interrupt, 1, 12)
[ 44.123819] i8042: [43317] 11 <- i8042 (interrupt, 1, 12)
[ 44.125397] i8042: [43319] fb <- i8042 (interrupt, 1, 12)
[ 44.126984] i8042: [43321] 31 <- i8042 (interrupt, 1, 12)
[ 44.128567] i8042: [43322] 11 <- i8042 (interrupt, 1, 12)
[ 44.130150] i8042: [43324] 11 <- i8042 (interrupt, 1, 12)
[ 44.131720] i8042: [43325] 04 <- i8042 (interrupt, 1, 12)
[ 44.133319] i8042: [43327] 00 <- i8042 (interrupt, 1, 12)
[ 44.134896] i8042: [43328] 00 <- i8042 (interrupt, 1, 12)
[ 44.136483] i8042: [43330] 10 <- i8042 (interrupt, 1, 12)
[ 44.138041] i8042: [43332] 00 <- i8042 (interrupt, 1, 12)
[ 44.139644] i8042: [43333] 00 <- i8042 (interrupt, 1, 12)
[ 48.596741] i8042: [47790] ** <- i8042 (interrupt, 0, 1)
[ 48.598217] i8042: [47792] ** <- i8042 (interrupt, 0, 1)
[ 48.598254] atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0).
[ 48.598274] atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
[ 48.599118] i8042: [47793] ** <- i8042 (interrupt, 0, 1)
[ 48.601159] i8042: [47795] ** <- i8042 (interrupt, 0, 1)
[ 48.601196] atkbd serio0: Unknown key released (translated set 2, code 0xbf on isa0060/serio0).
[ 48.601216] atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
[ 49.705335] PM: suspend entry (deep)
[ 49.747997] Filesystems sync: 0.042 seconds
[ 49.748014] PM: Preparing system for sleep (deep)
[ 49.751657] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 49.753457] OOM killer disabled.
[ 49.753461] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[ 49.755338] PM: Suspending system (deep)
[ 49.772077] rfkill rfkill3: PM: calling rfkill_suspend+0x0/0x21 @ 4492, parent: hci0
[ 49.772101] rfkill rfkill3: PM: rfkill_suspend+0x0/0x21 returned 0 after 0 usecs
[ 49.772112] input input17: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: serio1
[ 49.772121] input input17: PM: input_dev_suspend+0x0/0x47 returned 0 after 1 usecs
[ 49.772130] input input22: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: card0
[ 49.772136] input input22: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772142] input input21: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: card0
[ 49.772148] input input21: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772155] input input20: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: card0
[ 49.772160] input input20: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772168] input input19: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: card0
[ 49.772173] input input19: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772180] input input18: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: card0
[ 49.772186] input input18: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772193] input input16: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: card0
[ 49.772198] input input16: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772205] input input15: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: card0
[ 49.772211] input input15: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772219] sound pcmC0D10p: PM: calling do_pcm_suspend+0x0/0x27 @ 4492, parent: card0
[ 49.772228] sound pcmC0D10p: PM: do_pcm_suspend+0x0/0x27 returned 0 after 1 usecs
[ 49.772234] sound pcmC0D9p: PM: calling do_pcm_suspend+0x0/0x27 @ 4492, parent: card0
[ 49.772240] sound pcmC0D9p: PM: do_pcm_suspend+0x0/0x27 returned 0 after 0 usecs
[ 49.772245] sound pcmC0D8p: PM: calling do_pcm_suspend+0x0/0x27 @ 4492, parent: card0
[ 49.772251] sound pcmC0D8p: PM: do_pcm_suspend+0x0/0x27 returned 0 after 0 usecs
[ 49.772257] sound pcmC0D7p: PM: calling do_pcm_suspend+0x0/0x27 @ 4492, parent: card0
[ 49.772262] sound pcmC0D7p: PM: do_pcm_suspend+0x0/0x27 returned 0 after 0 usecs
[ 49.772268] sound pcmC0D3p: PM: calling do_pcm_suspend+0x0/0x27 @ 4492, parent: card0
[ 49.772274] sound pcmC0D3p: PM: do_pcm_suspend+0x0/0x27 returned 0 after 0 usecs
[ 49.772279] sound pcmC0D0c: PM: calling do_pcm_suspend+0x0/0x27 @ 4492, parent: card0
[ 49.772286] sound pcmC0D0c: PM: do_pcm_suspend+0x0/0x27 returned 0 after 1 usecs
[ 49.772291] sound pcmC0D0p: PM: calling do_pcm_suspend+0x0/0x27 @ 4492, parent: card0
[ 49.772296] sound pcmC0D0p: PM: do_pcm_suspend+0x0/0x27 returned 0 after 0 usecs
[ 49.772310] rtsx_pci_sdmmc rtsx_pci_sdmmc.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0000:01:00.0
[ 49.772318] rtsx_pci_sdmmc rtsx_pci_sdmmc.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.772331] rfkill rfkill2: PM: calling rfkill_suspend+0x0/0x21 @ 4492, parent: VPC2004:00
[ 49.772337] rfkill rfkill2: PM: rfkill_suspend+0x0/0x21 returned 0 after 0 usecs
[ 49.772343] rfkill rfkill1: PM: calling rfkill_suspend+0x0/0x21 @ 4492, parent: VPC2004:00
[ 49.772348] rfkill rfkill1: PM: rfkill_suspend+0x0/0x21 returned 0 after 0 usecs
[ 49.772357] snd_hda_codec_realtek hdaudioC0D0: PM: calling hda_codec_pm_suspend+0x0/0x19 [snd_hda_codec] @ 9, parent: 0000:00:0e.0
[ 49.772367] input input14: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: VPC2004:00
[ 49.772373] input input14: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772390] rfkill rfkill0: PM: calling rfkill_suspend+0x0/0x21 @ 4492, parent: phy0
[ 49.772396] rfkill rfkill0: PM: rfkill_suspend+0x0/0x21 returned 0 after 0 usecs
[ 49.772403] leds phy0-led: PM: calling led_suspend+0x0/0x3f @ 4492, parent: 0000:02:00.0
[ 49.772409] leds phy0-led: PM: led_suspend+0x0/0x3f returned 0 after 0 usecs
[ 49.772417] platform regulatory.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.772423] platform regulatory.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.772434] input input13: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: LNXVIDEO:00
[ 49.772440] input input13: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772449] backlight intel_backlight: PM: calling backlight_suspend+0x0/0x7a [backlight] @ 4492, parent: card0-eDP-1
[ 49.772459] backlight intel_backlight: PM: backlight_suspend+0x0/0x7a [backlight] returned 0 after 0 usecs
[ 49.772497] ieee80211 phy0: PM: calling wiphy_suspend+0x0/0x124 [cfg80211] @ 107, parent: 0000:02:00.0
[ 49.772562] wlan0: deauthenticating from c8:9e:43:94:32:f2 by local choice (Reason: 3=DEAUTH_LEAVING)
[ 49.772573] input input11: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: 0018:056A:5120.0002
[ 49.772585] input input11: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772594] input input10: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: 0018:056A:5120.0002
[ 49.772600] input input10: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772607] platform HID-SENSOR-2000e1.4.auto: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0018:048D:8350.0001
[ 49.772613] platform HID-SENSOR-2000e1.4.auto: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.772621] hid_sensor_accel_3d HID-SENSOR-200073.3.auto: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0018:048D:8350.0001
[ 49.772628] hid_sensor_accel_3d HID-SENSOR-200073.3.auto: PM: platform_pm_suspend+0x0/0x4a returned 0 after 1 usecs
[ 49.772635] platform HID-SENSOR-200001.2.auto: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0018:048D:8350.0001
[ 49.772640] platform HID-SENSOR-200001.2.auto: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.772647] platform HID-SENSOR-ff830080.1.auto: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0018:048D:8350.0001
[ 49.772652] platform HID-SENSOR-ff830080.1.auto: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.772679] platform microcode: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.772685] platform microcode: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.772697] snd-soc-dummy snd-soc-dummy: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.772703] snd-soc-dummy snd-soc-dummy: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.772717] leds input3::scrolllock: PM: calling led_suspend+0x0/0x3f @ 4492, parent: input3
[ 49.772715] usb 1-8: PM: calling usb_dev_suspend+0x0/0x14 @ 105, parent: usb1
[ 49.772723] leds input3::scrolllock: PM: led_suspend+0x0/0x3f returned 0 after 0 usecs
[ 49.772729] leds input3::capslock: PM: calling led_suspend+0x0/0x3f @ 4492, parent: input3
[ 49.772734] leds input3::capslock: PM: led_suspend+0x0/0x3f returned 0 after 0 usecs
[ 49.772739] leds input3::numlock: PM: calling led_suspend+0x0/0x3f @ 4492, parent: input3
[ 49.772744] leds input3::numlock: PM: led_suspend+0x0/0x3f returned 0 after 0 usecs
[ 49.772769] input input3: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: serio0
[ 49.772775] mmcblk mmc0:0001: PM: calling mmc_bus_suspend+0x0/0x56 @ 11, parent: mmc0
[ 49.772780] usb 1-7: PM: calling usb_dev_suspend+0x0/0x14 @ 108, parent: usb1
[ 49.772801] input input3: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.772815] platform coretemp.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.772821] platform coretemp.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.772830] alarmtimer alarmtimer.0.auto: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: rtc0
[ 49.772837] alarmtimer alarmtimer.0.auto: PM: platform_pm_suspend+0x0/0x4a returned 0 after 1 usecs
[ 49.772847] psmouse serio1: PM: calling serio_suspend+0x0/0x1d @ 4492, parent: i8042
[ 49.772864] i8042: [48966] d4 -> i8042 (command)
[ 49.772921] usb 1-8: PM: usb_dev_suspend+0x0/0x14 returned 0 after 194 usecs
[ 49.773047] i8042: [48967] f5 -> i8042 (parameter)
[ 49.773116] usb 1-7: PM: usb_dev_suspend+0x0/0x14 returned 0 after 327 usecs
[ 49.776108] i8042: [48970] fa <- i8042 (interrupt, 1, 12)
[ 49.776229] i8042: [48970] d4 -> i8042 (command)
[ 49.776335] mmcblk mmc0:0001: PM: mmc_bus_suspend+0x0/0x56 returned 0 after 3546 usecs
[ 49.776436] i8042: [48970] f6 -> i8042 (parameter)
[ 49.779370] i8042: [48973] fa <- i8042 (interrupt, 1, 12)
[ 49.779529] i8042: [48973] d4 -> i8042 (command)
[ 49.779725] i8042: [48973] f4 -> i8042 (parameter)
[ 49.782466] i8042: [48976] fa <- i8042 (interrupt, 1, 12)
[ 49.782581] psmouse serio1: PM: serio_suspend+0x0/0x1d returned 0 after 9722 usecs
[ 49.782618] atkbd serio0: PM: calling serio_suspend+0x0/0x1d @ 4492, parent: i8042
[ 49.782634] i8042: [48976] f6 -> i8042 (kbd-data)
[ 49.783961] i8042: [48978] ** <- i8042 (interrupt, 0, 1)
[ 49.784045] atkbd serio0: PM: serio_suspend+0x0/0x1d returned 0 after 1417 usecs
[ 49.784074] i8042 i8042: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.784098] i8042: [48978] 60 -> i8042 (command)
[ 49.784225] i8042: [48978] 74 -> i8042 (parameter)
[ 49.784374] i8042: [48978] aa -> i8042 (command)
[ 49.784621] i8042: [48978] 55 <- i8042 (return)
[ 49.784680] i8042: [48978] 60 -> i8042 (command)
[ 49.784809] i8042: [48978] 67 -> i8042 (parameter)
[ 49.784818] i8042 i8042: PM: platform_pm_suspend+0x0/0x4a returned 0 after 735 usecs
[ 49.784870] platform intel_xhci_usb_sw: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0000:00:15.0
[ 49.784877] platform intel_xhci_usb_sw: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.784884] usb usb2: PM: calling usb_dev_suspend+0x0/0x14 @ 105, parent: 0000:00:15.0
[ 49.784888] platform Fixed MDIO bus.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.784894] platform Fixed MDIO bus.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.784936] idma64 idma64.3: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0000:00:17.1
[ 49.785013] ata2: PM: calling ata_port_pm_suspend+0x0/0x3e @ 11, parent: 0000:00:12.0
[ 49.785015] usb usb1: PM: calling usb_dev_suspend+0x0/0x14 @ 4493, parent: 0000:00:15.0
[ 49.785044] ata1: PM: calling ata_port_pm_suspend+0x0/0x3e @ 108, parent: 0000:00:12.0
[ 49.785191] ata2: PM: ata_port_pm_suspend+0x0/0x3e returned 0 after 160 usecs
[ 49.785211] i2c_hid_acpi i2c-ITE8350:00: PM: calling acpi_subsys_suspend+0x0/0x55 @ 11, parent: i2c-3
[ 49.785244] idma64 idma64.3: PM: platform_pm_suspend+0x0/0x4a returned 0 after 301 usecs
[ 49.785259] idma64 idma64.2: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0000:00:17.0
[ 49.785675] idma64 idma64.2: PM: platform_pm_suspend+0x0/0x4a returned 0 after 409 usecs
[ 49.785689] idma64 idma64.1: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0000:00:16.3
[ 49.785816] i2c_designware i2c_designware.2: PM: calling platform_pm_suspend+0x0/0x4a @ 4495, parent: 0000:00:17.0
[ 49.785862] i2c_designware i2c_designware.2: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.785873] i2c_hid_acpi i2c-WCOM5120:00: PM: calling acpi_subsys_suspend+0x0/0x55 @ 4496, parent: i2c-1
[ 49.785922] idma64 idma64.1: PM: platform_pm_suspend+0x0/0x4a returned 0 after 227 usecs
[ 49.785936] idma64 idma64.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0000:00:16.0
[ 49.785946] snd_hda_codec_realtek hdaudioC0D0: PM: hda_codec_pm_suspend+0x0/0x19 [snd_hda_codec] returned 0 after 13563 usecs
[ 49.785987] snd_hda_intel 0000:00:0e.0: PM: calling pci_pm_suspend+0x0/0x1da @ 96, parent: pci0000:00
[ 49.786074] i2c_designware i2c_designware.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4497, parent: 0000:00:16.0
[ 49.786082] i2c_designware i2c_designware.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786178] ata1: PM: ata_port_pm_suspend+0x0/0x3e returned 0 after 1121 usecs
[ 49.786354] idma64 idma64.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 411 usecs
[ 49.786365] platform intel-spi: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0000:00:1f.0
[ 49.786371] platform intel-spi: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786408] input input2: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: LNXPWRBN:00
[ 49.786416] input input2: PM: input_dev_suspend+0x0/0x47 returned 0 after 1 usecs
[ 49.786423] input input1: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: PNP0C0C:00
[ 49.786429] input input1: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.786437] input input0: PM: calling input_dev_suspend+0x0/0x47 @ 4492, parent: PNP0C0D:00
[ 49.786443] input input0: PM: input_dev_suspend+0x0/0x47 returned 0 after 0 usecs
[ 49.786497] intel_rapl_msr intel_rapl_msr.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786505] intel_rapl_msr intel_rapl_msr.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786522] rtc_cmos 00:04: PM: calling pnp_bus_suspend+0x0/0x14 @ 4492, parent: pnp0
[ 49.786672] rtc_cmos 00:04: PM: pnp_bus_suspend+0x0/0x14 returned 0 after 142 usecs
[ 49.786692] system 00:03: PM: calling pnp_bus_suspend+0x0/0x14 @ 4492, parent: pnp0
[ 49.786700] system 00:03: PM: pnp_bus_suspend+0x0/0x14 returned 0 after 0 usecs
[ 49.786707] i8042 aux 00:02: PM: calling pnp_bus_suspend+0x0/0x14 @ 4492, parent: pnp0
[ 49.786713] i8042 aux 00:02: PM: pnp_bus_suspend+0x0/0x14 returned 0 after 0 usecs
[ 49.786719] i8042 kbd 00:01: PM: calling pnp_bus_suspend+0x0/0x14 @ 4492, parent: pnp0
[ 49.786725] i8042 kbd 00:01: PM: pnp_bus_suspend+0x0/0x14 returned 0 after 0 usecs
[ 49.786731] system 00:00: PM: calling pnp_bus_suspend+0x0/0x14 @ 4492, parent: pnp0
[ 49.786736] system 00:00: PM: pnp_bus_suspend+0x0/0x14 returned 0 after 0 usecs
[ 49.786747] platform chromeos_acpi: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786752] platform chromeos_acpi: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786759] platform efivars.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786764] platform efivars.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786771] platform rtc-efi.0: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786776] platform rtc-efi.0: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786784] button LNXPWRBN:00: PM: calling acpi_button_suspend+0x0/0x19 @ 4492, parent: LNXSYSTM:00
[ 49.786792] button LNXPWRBN:00: PM: acpi_button_suspend+0x0/0x19 returned 0 after 0 usecs
[ 49.786802] acpi-fan PNP0C0B:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786808] acpi-fan PNP0C0B:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786814] platform MSFT0101:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786820] platform MSFT0101:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786826] platform INT33A1:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786832] platform INT33A1:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786840] broxton-pinctrl INT3452:03: PM: calling acpi_subsys_suspend+0x0/0x55 @ 4492, parent: platform
[ 49.786846] broxton-pinctrl INT3452:03: PM: acpi_subsys_suspend+0x0/0x55 returned 0 after 1 usecs
[ 49.786854] broxton-pinctrl INT3452:02: PM: calling acpi_subsys_suspend+0x0/0x55 @ 4492, parent: platform
[ 49.786859] broxton-pinctrl INT3452:02: PM: acpi_subsys_suspend+0x0/0x55 returned 0 after 0 usecs
[ 49.786867] broxton-pinctrl INT3452:01: PM: calling acpi_subsys_suspend+0x0/0x55 @ 4492, parent: platform
[ 49.786871] broxton-pinctrl INT3452:01: PM: acpi_subsys_suspend+0x0/0x55 returned 0 after 0 usecs
[ 49.786878] broxton-pinctrl INT3452:00: PM: calling acpi_subsys_suspend+0x0/0x55 @ 4492, parent: platform
[ 49.786883] broxton-pinctrl INT3452:00: PM: acpi_subsys_suspend+0x0/0x55 returned 0 after 0 usecs
[ 49.786888] platform PNP0103:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786894] platform PNP0103:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786900] platform PNP0C0C:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786913] platform PNP0C0C:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786920] platform ACPI0003:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: platform
[ 49.786926] platform ACPI0003:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786933] platform PNP0C0D:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: PNP0C09:00
[ 49.786938] platform PNP0C0D:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786944] platform INT33D3:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: PNP0C09:00
[ 49.786950] platform INT33D3:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786974] ideapad_acpi VPC2004:00: PM: calling acpi_subsys_suspend+0x0/0x55 @ 4492, parent: PNP0C09:00
[ 49.786981] ideapad_acpi VPC2004:00: PM: acpi_subsys_suspend+0x0/0x55 returned 0 after 0 usecs
[ 49.786987] platform PNP0C0A:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: PNP0C09:00
[ 49.786992] platform PNP0C0A:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.786996] snd_hda_intel 0000:00:0e.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 998 usecs
[ 49.786999] platform PNP0C09:00: PM: calling platform_pm_suspend+0x0/0x4a @ 4492, parent: 0000:00:1f.0
[ 49.787004] platform PNP0C09:00: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.787031] i801_smbus 0000:00:1f.1: PM: calling pci_pm_suspend+0x0/0x1da @ 108, parent: pci0000:00
[ 49.787042] thermal LNXTHERM:00: PM: calling acpi_thermal_suspend+0x0/0x1d @ 4492, parent: LNXSYBUS:01
[ 49.787052] thermal LNXTHERM:00: PM: acpi_thermal_suspend+0x0/0x1d returned 0 after 2 usecs
[ 49.787066] tpm_crb MSFT0101:00: PM: calling tpm_pm_suspend+0x0/0xcc @ 4492, parent: LNXSYBUS:00
[ 49.787114] i801_smbus 0000:00:1f.1: PM: pci_pm_suspend+0x0/0x1da returned 0 after 74 usecs
[ 49.787125] lpc_ich 0000:00:1f.0: PM: calling pci_pm_suspend+0x0/0x1da @ 108, parent: pci0000:00
[ 49.787132] lpc_ich 0000:00:1f.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 0 usecs
[ 49.787141] sdhci-pci 0000:00:1c.0: PM: calling pci_pm_suspend+0x0/0x1da @ 108, parent: pci0000:00
[ 49.787179] rtsx_pci 0000:01:00.0: PM: calling pci_pm_suspend+0x0/0x1da @ 4497, parent: 0000:00:14.0
[ 49.787209] rtsx_pci 0000:01:00.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 21 usecs
[ 49.787219] intel-lpss 0000:00:17.0: PM: calling pci_pm_suspend+0x0/0x1da @ 4497, parent: pci0000:00
[ 49.787226] intel-lpss 0000:00:17.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 1 usecs
[ 49.787242] sdhci-pci 0000:00:1c.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 94 usecs
[ 49.787254] intel-lpss 0000:00:16.0: PM: calling pci_pm_suspend+0x0/0x1da @ 108, parent: pci0000:00
[ 49.787261] intel-lpss 0000:00:16.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 0 usecs
[ 49.787806] pcieport 0000:00:14.0: PM: calling pci_pm_suspend+0x0/0x1da @ 4500, parent: pci0000:00
[ 49.787841] pcieport 0000:00:14.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 8 usecs
[ 49.787855] ahci 0000:00:12.0: PM: calling pci_pm_suspend+0x0/0x1da @ 4500, parent: pci0000:00
[ 49.787865] ahci 0000:00:12.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 4 usecs
[ 49.787880] mei_me 0000:00:0f.0: PM: calling pci_pm_suspend+0x0/0x1da @ 4500, parent: pci0000:00
[ 49.788114] i915 0000:00:02.0: PM: calling pci_pm_suspend+0x0/0x1da @ 4501, parent: pci0000:00
[ 49.788306] pci 0000:00:00.1: PM: calling pci_pm_suspend+0x0/0x1da @ 4502, parent: pci0000:00
[ 49.788318] pci 0000:00:00.1: PM: pci_pm_suspend+0x0/0x1da returned 0 after 0 usecs
[ 49.788329] pci 0000:00:00.0: PM: calling pci_pm_suspend+0x0/0x1da @ 4502, parent: pci0000:00
[ 49.788335] pci 0000:00:00.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 0 usecs
[ 49.788496] mei_me 0000:00:0f.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 608 usecs
[ 49.789927] i915 0000:00:02.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 1787 usecs
[ 49.795111] usb usb1: PM: usb_dev_suspend+0x0/0x14 returned 0 after 10067 usecs
[ 49.797580] i2c_hid_acpi i2c-ITE8350:00: PM: acpi_subsys_suspend+0x0/0x55 returned 0 after 12355 usecs
[ 49.797773] i2c_designware i2c_designware.3: PM: calling platform_pm_suspend+0x0/0x4a @ 4494, parent: 0000:00:17.1
[ 49.797799] i2c_designware i2c_designware.3: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.797943] intel-lpss 0000:00:17.1: PM: calling pci_pm_suspend+0x0/0x1da @ 4498, parent: pci0000:00
[ 49.797971] intel-lpss 0000:00:17.1: PM: pci_pm_suspend+0x0/0x1da returned 0 after 2 usecs
[ 49.798115] i2c_hid_acpi i2c-WCOM5120:00: failed to change power setting.
[ 49.798129] i2c_hid_acpi i2c-WCOM5120:00: PM: acpi_subsys_suspend+0x0/0x55 returned 0 after 12243 usecs
[ 49.798276] i2c_designware i2c_designware.1: PM: calling platform_pm_suspend+0x0/0x4a @ 9, parent: 0000:00:16.3
[ 49.798302] i2c_designware i2c_designware.1: PM: platform_pm_suspend+0x0/0x4a returned 0 after 0 usecs
[ 49.798363] intel-lpss 0000:00:16.3: PM: calling pci_pm_suspend+0x0/0x1da @ 4497, parent: pci0000:00
[ 49.798380] intel-lpss 0000:00:16.3: PM: pci_pm_suspend+0x0/0x1da returned 0 after 2 usecs
[ 49.808025] usb usb2: PM: usb_dev_suspend+0x0/0x14 returned 0 after 23120 usecs
[ 49.808065] xhci_hcd 0000:00:15.0: PM: calling pci_pm_suspend+0x0/0x1da @ 108, parent: pci0000:00
[ 49.808445] xhci_hcd 0000:00:15.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 370 usecs
[ 49.822224] ieee80211 phy0: PM: wiphy_suspend+0x0/0x124 [cfg80211] returned 0 after 49665 usecs
[ 49.822346] iwlwifi 0000:02:00.0: PM: calling pci_pm_suspend+0x0/0x1da @ 96, parent: 0000:00:14.1
[ 49.822365] iwlwifi 0000:02:00.0: PM: pci_pm_suspend+0x0/0x1da returned 0 after 3 usecs
[ 49.822399] pcieport 0000:00:14.1: PM: calling pci_pm_suspend+0x0/0x1da @ 4499, parent: pci0000:00
[ 49.822413] pcieport 0000:00:14.1: PM: pci_pm_suspend+0x0/0x1da returned 0 after 6 usecs
[ 50.109745] tpm_crb MSFT0101:00: PM: tpm_pm_suspend+0x0/0xcc returned 0 after 322665 usecs
[ 50.109791] button PNP0C0C:00: PM: calling acpi_button_suspend+0x0/0x19 @ 4492, parent: LNXSYBUS:00
[ 50.109800] button PNP0C0C:00: PM: acpi_button_suspend+0x0/0x19 returned 0 after 0 usecs
[ 50.109894] button PNP0C0D:00: PM: calling acpi_button_suspend+0x0/0x19 @ 4492, parent: PNP0C09:00
[ 50.109900] button PNP0C0D:00: PM: acpi_button_suspend+0x0/0x19 returned 0 after 0 usecs
[ 50.109922] ec PNP0C09:00: PM: calling acpi_ec_suspend+0x0/0x7d @ 4492, parent: device:01
[ 50.109931] ec PNP0C09:00: PM: acpi_ec_suspend+0x0/0x7d returned 0 after 0 usecs
[ 50.109977] PM: suspend of devices complete after 337.973 msecs
[ 50.109982] PM: start suspend of devices complete after 354.597 msecs
[ 50.110138] snd_hda_intel 0000:00:0e.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110152] snd_hda_intel 0000:00:0e.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 1 usecs
[ 50.110390] i2c_hid_acpi i2c-ITE8350:00: PM: calling acpi_subsys_suspend_late+0x0/0x52 @ 4502, parent: i2c-3
[ 50.110402] i2c_hid_acpi i2c-ITE8350:00: PM: acpi_subsys_suspend_late+0x0/0x52 returned 0 after 1 usecs
[ 50.110434] i2c_hid_acpi i2c-WCOM5120:00: PM: calling acpi_subsys_suspend_late+0x0/0x52 @ 4499, parent: i2c-1
[ 50.110463] broxton-pinctrl INT3452:03: PM: calling acpi_subsys_suspend_late+0x0/0x52 @ 4492, parent: platform
[ 50.110472] broxton-pinctrl INT3452:03: PM: acpi_subsys_suspend_late+0x0/0x52 returned 0 after 0 usecs
[ 50.110480] broxton-pinctrl INT3452:02: PM: calling acpi_subsys_suspend_late+0x0/0x52 @ 4492, parent: platform
[ 50.110485] broxton-pinctrl INT3452:02: PM: acpi_subsys_suspend_late+0x0/0x52 returned 0 after 0 usecs
[ 50.110492] broxton-pinctrl INT3452:01: PM: calling acpi_subsys_suspend_late+0x0/0x52 @ 4492, parent: platform
[ 50.110497] broxton-pinctrl INT3452:01: PM: acpi_subsys_suspend_late+0x0/0x52 returned 0 after 0 usecs
[ 50.110504] broxton-pinctrl INT3452:00: PM: calling acpi_subsys_suspend_late+0x0/0x52 @ 4492, parent: platform
[ 50.110509] broxton-pinctrl INT3452:00: PM: acpi_subsys_suspend_late+0x0/0x52 returned 0 after 0 usecs
[ 50.110518] ideapad_acpi VPC2004:00: PM: calling acpi_subsys_suspend_late+0x0/0x52 @ 4492, parent: PNP0C09:00
[ 50.110524] ideapad_acpi VPC2004:00: PM: acpi_subsys_suspend_late+0x0/0x52 returned 0 after 0 usecs
[ 50.110527] i2c_designware i2c_designware.3: PM: calling dw_i2c_plat_suspend+0x0/0x40 @ 4502, parent: 0000:00:17.1
[ 50.110549] i2c_designware i2c_designware.3: PM: dw_i2c_plat_suspend+0x0/0x40 returned 0 after 9 usecs
[ 50.110557] i2c_hid_acpi i2c-WCOM5120:00: PM: acpi_subsys_suspend_late+0x0/0x52 returned 0 after 99 usecs
[ 50.110560] iwlwifi 0000:02:00.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: 0000:00:14.1
[ 50.110570] iwlwifi 0000:02:00.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110573] rtsx_pci 0000:01:00.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4499, parent: 0000:00:14.0
[ 50.110580] i801_smbus 0000:00:1f.1: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110584] rtsx_pci 0000:01:00.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 1 usecs
[ 50.110587] i801_smbus 0000:00:1f.1: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110596] lpc_ich 0000:00:1f.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4499, parent: pci0000:00
[ 50.110598] sdhci-pci 0000:00:1c.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110605] lpc_ich 0000:00:1f.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110606] sdhci-pci 0000:00:1c.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110608] intel-lpss 0000:00:17.1: PM: calling pci_pm_suspend_late+0x0/0x3a @ 96, parent: pci0000:00
[ 50.110615] intel-lpss 0000:00:17.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110623] intel-lpss 0000:00:17.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110633] intel-lpss 0000:00:16.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110639] intel-lpss 0000:00:16.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110652] xhci_hcd 0000:00:15.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110658] xhci_hcd 0000:00:15.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110669] pcieport 0000:00:14.1: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110670] intel-lpss 0000:00:17.1: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 49 usecs
[ 50.110676] pcieport 0000:00:14.1: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110686] pcieport 0000:00:14.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 96, parent: pci0000:00
[ 50.110686] ahci 0000:00:12.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110693] ahci 0000:00:12.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110695] pcieport 0000:00:14.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110703] mei_me 0000:00:0f.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110711] mei_me 0000:00:0f.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110711] i915 0000:00:02.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 96, parent: pci0000:00
[ 50.110720] pci 0000:00:00.1: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110727] pci 0000:00:00.1: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.110734] pci 0000:00:00.0: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4502, parent: pci0000:00
[ 50.110740] pci 0000:00:00.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 0 usecs
[ 50.112733] i2c_designware i2c_designware.1: PM: calling dw_i2c_plat_suspend+0x0/0x40 @ 107, parent: 0000:00:16.3
[ 50.112760] i2c_designware i2c_designware.1: PM: dw_i2c_plat_suspend+0x0/0x40 returned 0 after 8 usecs
[ 50.112795] intel-lpss 0000:00:16.3: PM: calling pci_pm_suspend_late+0x0/0x3a @ 4499, parent: pci0000:00
[ 50.112845] intel-lpss 0000:00:16.3: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 41 usecs
[ 50.124069] i915 0000:00:02.0: PM: pci_pm_suspend_late+0x0/0x3a returned 0 after 13344 usecs
[ 50.124265] PM: late suspend of devices complete after 14.276 msecs
[ 50.124562] snd_hda_intel 0000:00:0e.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4502, parent: pci0000:00
[ 50.124832] i2c_hid_acpi i2c-ITE8350:00: PM: calling acpi_subsys_suspend_noirq+0x0/0x49 @ 4497, parent: i2c-3
[ 50.124857] i2c_hid_acpi i2c-ITE8350:00: PM: acpi_subsys_suspend_noirq+0x0/0x49 returned 0 after 1 usecs
[ 50.124871] i2c_hid_acpi i2c-WCOM5120:00: PM: calling acpi_subsys_suspend_noirq+0x0/0x49 @ 4497, parent: i2c-1
[ 50.124877] i2c_hid_acpi i2c-WCOM5120:00: PM: acpi_subsys_suspend_noirq+0x0/0x49 returned 0 after 0 usecs
[ 50.124949] broxton-pinctrl INT3452:03: PM: calling acpi_subsys_suspend_noirq+0x0/0x49 @ 4492, parent: platform
[ 50.125897] broxton-pinctrl INT3452:03: PM: acpi_subsys_suspend_noirq+0x0/0x49 returned 0 after 936 usecs
[ 50.125914] broxton-pinctrl INT3452:02: PM: calling acpi_subsys_suspend_noirq+0x0/0x49 @ 4492, parent: platform
[ 50.126766] broxton-pinctrl INT3452:02: PM: acpi_subsys_suspend_noirq+0x0/0x49 returned 0 after 846 usecs
[ 50.126774] broxton-pinctrl INT3452:01: PM: calling acpi_subsys_suspend_noirq+0x0/0x49 @ 4492, parent: platform
[ 50.128169] broxton-pinctrl INT3452:01: PM: acpi_subsys_suspend_noirq+0x0/0x49 returned 0 after 1389 usecs
[ 50.128177] broxton-pinctrl INT3452:00: PM: calling acpi_subsys_suspend_noirq+0x0/0x49 @ 4492, parent: platform
[ 50.129881] broxton-pinctrl INT3452:00: PM: acpi_subsys_suspend_noirq+0x0/0x49 returned 0 after 1698 usecs
[ 50.129892] ideapad_acpi VPC2004:00: PM: calling acpi_subsys_suspend_noirq+0x0/0x49 @ 4492, parent: PNP0C09:00
[ 50.129897] ideapad_acpi VPC2004:00: PM: acpi_subsys_suspend_noirq+0x0/0x49 returned 0 after 0 usecs
[ 50.129928] iwlwifi 0000:02:00.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 105, parent: 0000:00:14.1
[ 50.129938] rtsx_pci 0000:01:00.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 96, parent: 0000:00:14.0
[ 50.130033] ec PNP0C09:00: PM: calling acpi_ec_suspend_noirq+0x0/0x4c @ 4492, parent: device:01
[ 50.130045] ACPI: EC: interrupt blocked
[ 50.130047] ec PNP0C09:00: PM: acpi_ec_suspend_noirq+0x0/0x4c returned 0 after 2 usecs
[ 50.130109] i801_smbus 0000:00:1f.1: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4499, parent: pci0000:00
[ 50.130987] lpc_ich 0000:00:1f.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 108, parent: pci0000:00
[ 50.131033] sdhci-pci 0000:00:1c.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4497, parent: pci0000:00
[ 50.131080] i801_smbus 0000:00:1f.1: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 962 usecs
[ 50.131097] intel-lpss 0000:00:17.1: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4499, parent: pci0000:00
[ 50.131607] lpc_ich 0000:00:1f.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 610 usecs
[ 50.131619] intel-lpss 0000:00:17.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 108, parent: pci0000:00
[ 50.131625] intel-lpss 0000:00:17.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 0 usecs
[ 50.131634] intel-lpss 0000:00:16.3: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 108, parent: pci0000:00
[ 50.131734] xhci_hcd 0000:00:15.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 9, parent: pci0000:00
[ 50.131760] ahci 0000:00:12.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4498, parent: pci0000:00
[ 50.131785] mei_me 0000:00:0f.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4494, parent: pci0000:00
[ 50.131878] pci 0000:00:00.1: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 11, parent: pci0000:00
[ 50.131934] pci 0000:00:00.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4493, parent: pci0000:00
[ 50.132031] pci 0000:00:00.1: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 143 usecs
[ 50.132036] intel-lpss 0000:00:16.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 107, parent: pci0000:00
[ 50.132045] intel-lpss 0000:00:16.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 0 usecs
[ 50.132057] pci 0000:00:00.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 115 usecs
[ 50.135958] snd_hda_intel 0000:00:0e.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 11378 usecs
[ 50.135980] i915 0000:00:02.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 110, parent: pci0000:00
[ 50.135989] i915 0000:00:02.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 0 usecs
[ 50.142916] intel-lpss 0000:00:16.3: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 11276 usecs
[ 50.142918] intel-lpss 0000:00:17.1: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 11814 usecs
[ 50.143752] iwlwifi 0000:02:00.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 13808 usecs
[ 50.143753] sdhci-pci 0000:00:1c.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 12710 usecs
[ 50.143775] pcieport 0000:00:14.1: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4495, parent: pci0000:00
[ 50.143916] ahci 0000:00:12.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 12146 usecs
[ 50.144970] xhci_hcd 0000:00:15.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 13226 usecs
[ 50.144988] mei_me 0000:00:0f.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 13194 usecs
[ 50.145041] rtsx_pci 0000:01:00.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 15093 usecs
[ 50.145063] pcieport 0000:00:14.0: PM: calling pci_pm_suspend_noirq+0x0/0x20a @ 4496, parent: pci0000:00
[ 50.154918] pcieport 0000:00:14.1: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 11134 usecs
[ 50.156912] pcieport 0000:00:14.0: PM: pci_pm_suspend_noirq+0x0/0x20a returned 0 after 11840 usecs
[ 50.156935] PM: noirq suspend of devices complete after 32.458 msecs
[ 50.157091] ACPI: PM: Preparing to enter system sleep state S3
[ 50.157482] ACPI: EC: event blocked
[ 50.157486] ACPI: EC: EC stopped
[ 50.157488] ACPI: PM: Saving platform NVS memory
[ 50.157498] Disabling non-boot CPUs ...
[ 50.159689] smpboot: CPU 1 is now offline
[ 50.162156] smpboot: CPU 2 is now offline
[ 50.164533] smpboot: CPU 3 is now offline
[ 50.165205] PM: Checking wakeup interrupts
[ 50.165212] PM: Calling mce_syscore_suspend+0x0/0x16
[ 50.165222] PM: Calling timekeeping_suspend+0x0/0x285
[ 50.165334] PM: Calling save_ioapic_entries+0x0/0xb0
[ 50.166636] PM: Calling i8259A_suspend+0x0/0x2d
[ 50.166649] PM: Calling fw_suspend+0x0/0x1b
[ 50.166655] PM: Calling acpi_save_bm_rld+0x0/0x22
[ 50.166663] PM: Calling lapic_suspend+0x0/0x20e
[ 50.171621] TSC at resume: 699982126
[ 50.171659] ACPI: PM: Low-level resume complete
[ 50.171822] ACPI: EC: EC started
[ 50.171830] ACPI: PM: Restoring platform NVS memory
[ 50.171850] PM: Calling init_counter_refs+0x0/0x6d
[ 50.171890] PM: Calling lapic_resume+0x0/0x31a
[ 50.171960] PM: Calling acpi_restore_bm_rld+0x0/0x65
[ 50.171983] PM: Calling irqrouter_resume+0x0/0x48
[ 50.172004] PM: Calling i8259A_resume+0x0/0x32
[ 50.172216] PM: Calling ioapic_resume+0x0/0xcd
[ 50.172550] PM: Calling irq_pm_syscore_resume+0x0/0x17
[ 50.172657] PM: Calling timekeeping_resume+0x0/0x21d
[ 50.172806] PM: Timekeeping suspended for 12.624 seconds
[ 50.172871] PM: Calling mce_syscore_resume+0x0/0x28
[ 50.172995] PM: Calling microcode_bsp_resume+0x0/0x50
[ 50.173080] Enabling non-boot CPUs ...
[ 50.174004] x86: Booting SMP configuration:
[ 50.174020] smpboot: Booting Node 0 Processor 1 APIC 0x2
[ 50.178753] CPU1 is up
[ 50.179524] smpboot: Booting Node 0 Processor 2 APIC 0x4
[ 50.189233] CPU2 is up
[ 50.189868] smpboot: Booting Node 0 Processor 3 APIC 0x6
[ 50.194817] CPU3 is up
[ 50.195444] ACPI: PM: Waking up from system sleep state S3
[ 50.199668] pcieport 0000:00:14.1: PM: calling pci_pm_resume_noirq+0x0/0xff @ 11, parent: pci0000:00
[ 50.199669] ec PNP0C09:00: PM: calling acpi_ec_resume_noirq+0x0/0x49 @ 4492, parent: device:01
[ 50.199668] pcieport 0000:00:14.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4498, parent: pci0000:00
[ 50.199691] xhci_hcd 0000:00:15.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 105, parent: pci0000:00
[ 50.199708] ACPI: EC: interrupt unblocked
[ 50.199715] ec PNP0C09:00: PM: acpi_ec_resume_noirq+0x0/0x49 returned 0 after 6 usecs
[ 50.199749] ahci 0000:00:12.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 9, parent: pci0000:00
[ 50.199921] intel-lpss 0000:00:16.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4497, parent: pci0000:00
[ 50.199958] pcieport 0000:00:14.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 249 usecs
[ 50.199998] intel-lpss 0000:00:16.3: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4498, parent: pci0000:00
[ 50.200043] pci 0000:00:00.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4496, parent: pci0000:00
[ 50.200051] ahci 0000:00:12.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 264 usecs
[ 50.200064] pcieport 0000:00:14.1: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 333 usecs
[ 50.200072] pci 0000:00:00.1: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4495, parent: pci0000:00
[ 50.200093] intel-lpss 0000:00:17.1: PM: calling pci_pm_resume_noirq+0x0/0xff @ 9, parent: pci0000:00
[ 50.200101] sdhci-pci 0000:00:1c.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 108, parent: pci0000:00
[ 50.200107] lpc_ich 0000:00:1f.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 11, parent: pci0000:00
[ 50.200108] i915 0000:00:02.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 96, parent: pci0000:00
[ 50.200147] i801_smbus 0000:00:1f.1: PM: calling pci_pm_resume_noirq+0x0/0xff @ 110, parent: pci0000:00
[ 50.200153] mei_me 0000:00:0f.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4494, parent: pci0000:00
[ 50.200175] rtsx_pci 0000:01:00.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4502, parent: 0000:00:14.0
[ 50.200236] iwlwifi 0000:02:00.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4493, parent: 0000:00:14.1
[ 50.200410] i801_smbus 0000:00:1f.1: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 238 usecs
[ 50.200450] mei_me 0000:00:0f.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 270 usecs
[ 50.200473] intel-lpss 0000:00:16.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 522 usecs
[ 50.200493] intel-lpss 0000:00:16.3: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 471 usecs
[ 50.200522] pci 0000:00:00.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 455 usecs
[ 50.200566] intel-lpss 0000:00:17.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4499, parent: pci0000:00
[ 50.200669] pci 0000:00:00.1: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 573 usecs
[ 50.200718] intel-lpss 0000:00:17.1: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 601 usecs
[ 50.200753] i915 0000:00:02.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 624 usecs
[ 50.200787] i2c_hid_acpi i2c-WCOM5120:00: PM: calling acpi_subsys_resume_noirq+0x0/0x29 @ 4498, parent: i2c-1
[ 50.200813] i2c_hid_acpi i2c-WCOM5120:00: PM: acpi_subsys_resume_noirq+0x0/0x29 returned 0 after 1 usecs
[ 50.200861] i2c_hid_acpi i2c-ITE8350:00: PM: calling acpi_subsys_resume_noirq+0x0/0x29 @ 4501, parent: i2c-3
[ 50.200868] lpc_ich 0000:00:1f.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 734 usecs
[ 50.200889] i2c_hid_acpi i2c-ITE8350:00: PM: acpi_subsys_resume_noirq+0x0/0x29 returned 0 after 1 usecs
[ 50.200941] ideapad_acpi VPC2004:00: PM: calling acpi_subsys_resume_noirq+0x0/0x29 @ 4492, parent: PNP0C09:00
[ 50.200966] ideapad_acpi VPC2004:00: PM: acpi_subsys_resume_noirq+0x0/0x29 returned 0 after 0 usecs
[ 50.200973] intel-lpss 0000:00:17.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 383 usecs
[ 50.200991] broxton-pinctrl INT3452:00: PM: calling acpi_subsys_resume_noirq+0x0/0x29 @ 4492, parent: platform
[ 50.201322] xhci_hcd 0000:00:15.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 1597 usecs
[ 50.201495] snd_hda_intel 0000:00:0e.0: PM: calling pci_pm_resume_noirq+0x0/0xff @ 4500, parent: pci0000:00
[ 50.202084] rtsx_pci 0000:01:00.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 1880 usecs
[ 50.203870] snd_hda_intel 0000:00:0e.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 2341 usecs
[ 50.204361] broxton-pinctrl INT3452:00: PM: acpi_subsys_resume_noirq+0x0/0x29 returned 0 after 3346 usecs
[ 50.204401] broxton-pinctrl INT3452:01: PM: calling acpi_subsys_resume_noirq+0x0/0x29 @ 4492, parent: platform
[ 50.204966] iwlwifi 0000:02:00.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 4703 usecs
[ 50.205494] sdhci-pci 0000:00:1c.0: PM: pci_pm_resume_noirq+0x0/0xff returned 0 after 5366 usecs
[ 50.206551] broxton-pinctrl INT3452:01: PM: acpi_subsys_resume_noirq+0x0/0x29 returned 0 after 2130 usecs
[ 50.206579] broxton-pinctrl INT3452:02: PM: calling acpi_subsys_resume_noirq+0x0/0x29 @ 4492, parent: platform
[ 50.207478] broxton-pinctrl INT3452:02: PM: acpi_subsys_resume_noirq+0x0/0x29 returned 0 after 881 usecs
[ 50.207498] broxton-pinctrl INT3452:03: PM: calling acpi_subsys_resume_noirq+0x0/0x29 @ 4492, parent: platform
[ 50.208476] broxton-pinctrl INT3452:03: PM: acpi_subsys_resume_noirq+0x0/0x29 returned 0 after 962 usecs
[ 50.208593] i8042 i8042: PM: calling i8042_pm_resume_noirq+0x0/0x21 @ 4492, parent: platform
[ 50.208615] i8042 i8042: PM: i8042_pm_resume_noirq+0x0/0x21 returned 0 after 0 usecs
[ 50.208775] PM: noirq resume of devices complete after 9.539 msecs
[ 50.209661] pcieport 0000:00:14.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 4497, parent: pci0000:00
[ 50.209655] pcieport 0000:00:14.1: PM: calling pci_pm_resume_early+0x0/0x29 @ 4500, parent: pci0000:00
[ 50.209693] pcieport 0000:00:14.1: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 1 usecs
[ 50.209695] pcieport 0000:00:14.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.209717] mei_me 0000:00:0f.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 9, parent: pci0000:00
[ 50.209753] mei_me 0000:00:0f.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.209804] pci 0000:00:00.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 11, parent: pci0000:00
[ 50.209805] lpc_ich 0000:00:1f.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 96, parent: pci0000:00
[ 50.209825] lpc_ich 0000:00:1f.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.209829] pci 0000:00:00.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.209853] i801_smbus 0000:00:1f.1: PM: calling pci_pm_resume_early+0x0/0x29 @ 11, parent: pci0000:00
[ 50.209856] rtsx_pci 0000:01:00.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 96, parent: 0000:00:14.0
[ 50.209873] rtsx_pci 0000:01:00.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.209876] i801_smbus 0000:00:1f.1: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.209898] iwlwifi 0000:02:00.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 11, parent: 0000:00:14.1
[ 50.209892] pci 0000:00:00.1: PM: calling pci_pm_resume_early+0x0/0x29 @ 110, parent: pci0000:00
[ 50.209920] iwlwifi 0000:02:00.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.209919] intel-lpss 0000:00:17.1: PM: calling pci_pm_resume_early+0x0/0x29 @ 4501, parent: pci0000:00
[ 50.209927] pci 0000:00:00.1: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.209949] intel-lpss 0000:00:17.1: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 10 usecs
[ 50.209955] ahci 0000:00:12.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 4493, parent: pci0000:00
[ 50.209971] i915 0000:00:02.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 108, parent: pci0000:00
[ 50.209976] ahci 0000:00:12.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.210001] i2c_designware i2c_designware.3: PM: calling dw_i2c_plat_resume+0x0/0x46 @ 4493, parent: 0000:00:17.1
[ 50.210042] i2c_designware i2c_designware.3: PM: dw_i2c_plat_resume+0x0/0x46 returned 0 after 13 usecs
[ 50.210046] xhci_hcd 0000:00:15.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 4495, parent: pci0000:00
[ 50.210081] xhci_hcd 0000:00:15.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.210268] intel-lpss 0000:00:16.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 4497, parent: pci0000:00
[ 50.210306] intel-lpss 0000:00:16.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 11 usecs
[ 50.210305] i2c_hid_acpi i2c-ITE8350:00: PM: calling acpi_subsys_resume_early+0x0/0x6b @ 4506, parent: i2c-3
[ 50.210338] i2c_hid_acpi i2c-ITE8350:00: PM: acpi_subsys_resume_early+0x0/0x6b returned 0 after 0 usecs
[ 50.210340] intel-lpss 0000:00:16.3: PM: calling pci_pm_resume_early+0x0/0x29 @ 4500, parent: pci0000:00
[ 50.210400] intel-lpss 0000:00:16.3: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 33 usecs
[ 50.210436] intel-lpss 0000:00:17.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 4502, parent: pci0000:00
[ 50.210447] i2c_designware i2c_designware.1: PM: calling dw_i2c_plat_resume+0x0/0x46 @ 11, parent: 0000:00:16.3
[ 50.210474] intel-lpss 0000:00:17.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 10 usecs
[ 50.210478] i2c_designware i2c_designware.1: PM: dw_i2c_plat_resume+0x0/0x46 returned 0 after 8 usecs
[ 50.210511] sdhci-pci 0000:00:1c.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 9, parent: pci0000:00
[ 50.210533] sdhci-pci 0000:00:1c.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 0 usecs
[ 50.210542] i2c_hid_acpi i2c-WCOM5120:00: PM: calling acpi_subsys_resume_early+0x0/0x6b @ 4501, parent: i2c-1
[ 50.210561] i2c_hid_acpi i2c-WCOM5120:00: PM: acpi_subsys_resume_early+0x0/0x6b returned 0 after 0 usecs
[ 50.210606] ideapad_acpi VPC2004:00: PM: calling acpi_subsys_resume_early+0x0/0x6b @ 4492, parent: PNP0C09:00
[ 50.210627] ideapad_acpi VPC2004:00: PM: acpi_subsys_resume_early+0x0/0x6b returned 0 after 0 usecs
[ 50.210648] broxton-pinctrl INT3452:00: PM: calling acpi_subsys_resume_early+0x0/0x6b @ 4492, parent: platform
[ 50.210663] broxton-pinctrl INT3452:00: PM: acpi_subsys_resume_early+0x0/0x6b returned 0 after 0 usecs
[ 50.210680] broxton-pinctrl INT3452:01: PM: calling acpi_subsys_resume_early+0x0/0x6b @ 4492, parent: platform
[ 50.210694] broxton-pinctrl INT3452:01: PM: acpi_subsys_resume_early+0x0/0x6b returned 0 after 0 usecs
[ 50.210711] broxton-pinctrl INT3452:02: PM: calling acpi_subsys_resume_early+0x0/0x6b @ 4492, parent: platform
[ 50.210725] broxton-pinctrl INT3452:02: PM: acpi_subsys_resume_early+0x0/0x6b returned 0 after 0 usecs
[ 50.210741] broxton-pinctrl INT3452:03: PM: calling acpi_subsys_resume_early+0x0/0x6b @ 4492, parent: platform
[ 50.210755] broxton-pinctrl INT3452:03: PM: acpi_subsys_resume_early+0x0/0x6b returned 0 after 0 usecs
[ 50.213009] i915 0000:00:02.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 3010 usecs
[ 50.213166] snd_hda_intel 0000:00:0e.0: PM: calling pci_pm_resume_early+0x0/0x29 @ 4495, parent: pci0000:00
[ 50.213226] snd_hda_intel 0000:00:0e.0: PM: pci_pm_resume_early+0x0/0x29 returned 0 after 1 usecs
[ 50.213424] PM: early resume of devices complete after 4.134 msecs
[ 50.213647] pci 0000:00:00.1: PM: calling pci_pm_resume+0x0/0xed @ 4495, parent: pci0000:00
[ 50.213649] i915 0000:00:02.0: PM: calling pci_pm_resume+0x0/0xed @ 107, parent: pci0000:00
[ 50.213662] ec PNP0C09:00: PM: calling acpi_ec_resume+0x0/0x1a @ 4492, parent: device:01
[ 50.213688] pci 0000:00:00.1: PM: pci_pm_resume+0x0/0xed returned 0 after 2 usecs
[ 50.213695] ACPI: EC: event unblocked
[ 50.213724] ahci 0000:00:12.0: PM: calling pci_pm_resume+0x0/0xed @ 4495, parent: pci0000:00
[ 50.213726] ec PNP0C09:00: PM: acpi_ec_resume+0x0/0x1a returned 0 after 30 usecs
[ 50.213737] pcieport 0000:00:14.0: PM: calling pci_pm_resume+0x0/0xed @ 4499, parent: pci0000:00
[ 50.213745] battery PNP0C0A:00: PM: calling acpi_battery_resume+0x0/0x3b @ 4492, parent: PNP0C09:00
[ 50.213780] ahci 0000:00:12.0: PM: pci_pm_resume+0x0/0xed returned 0 after 33 usecs
[ 50.213804] pcieport 0000:00:14.1: PM: calling pci_pm_resume+0x0/0xed @ 4495, parent: pci0000:00
[ 50.213812] mei_me 0000:00:0f.0: PM: calling pci_pm_resume+0x0/0xed @ 108, parent: pci0000:00
[ 50.213839] pci 0000:00:00.0: PM: calling pci_pm_resume+0x0/0xed @ 4508, parent: pci0000:00
[ 50.213860] pci 0000:00:00.0: PM: pci_pm_resume+0x0/0xed returned 0 after 1 usecs
[ 50.213881] xhci_hcd 0000:00:15.0: PM: calling pci_pm_resume+0x0/0xed @ 4508, parent: pci0000:00
[ 50.213939] intel-lpss 0000:00:16.0: PM: calling pci_pm_resume+0x0/0xed @ 4501, parent: pci0000:00
[ 50.213962] intel-lpss 0000:00:16.0: PM: pci_pm_resume+0x0/0xed returned 0 after 1 usecs
[ 50.213963] pcieport 0000:00:14.0: PM: pci_pm_resume+0x0/0xed returned 0 after 186 usecs
[ 50.213968] intel-lpss 0000:00:16.3: PM: calling pci_pm_resume+0x0/0xed @ 105, parent: pci0000:00
[ 50.213985] intel-lpss 0000:00:17.0: PM: calling pci_pm_resume+0x0/0xed @ 4501, parent: pci0000:00
[ 50.213996] intel-lpss 0000:00:17.1: PM: calling pci_pm_resume+0x0/0xed @ 4499, parent: pci0000:00
[ 50.213998] intel-lpss 0000:00:16.3: PM: pci_pm_resume+0x0/0xed returned 0 after 2 usecs
[ 50.214004] intel-lpss 0000:00:17.0: PM: pci_pm_resume+0x0/0xed returned 0 after 1 usecs
[ 50.214020] intel-lpss 0000:00:17.1: PM: pci_pm_resume+0x0/0xed returned 0 after 1 usecs
[ 50.214020] sdhci-pci 0000:00:1c.0: PM: calling pci_pm_resume+0x0/0xed @ 105, parent: pci0000:00
[ 50.214028] lpc_ich 0000:00:1f.0: PM: calling pci_pm_resume+0x0/0xed @ 4501, parent: pci0000:00
[ 50.214049] lpc_ich 0000:00:1f.0: PM: pci_pm_resume+0x0/0xed returned 0 after 1 usecs
[ 50.214048] i801_smbus 0000:00:1f.1: PM: calling pci_pm_resume+0x0/0xed @ 4499, parent: pci0000:00
[ 50.214074] rtsx_pci 0000:01:00.0: PM: calling pci_pm_resume+0x0/0xed @ 4501, parent: 0000:00:14.0
[ 50.214087] i801_smbus 0000:00:1f.1: PM: pci_pm_resume+0x0/0xed returned 0 after 21 usecs
[ 50.214245] pcieport 0000:00:14.1: PM: pci_pm_resume+0x0/0xed returned 0 after 421 usecs
[ 50.214296] i2c_designware i2c_designware.0: PM: calling platform_pm_resume+0x0/0x41 @ 4495, parent: 0000:00:16.0
[ 50.214301] i2c_designware i2c_designware.1: PM: calling platform_pm_resume+0x0/0x41 @ 4493, parent: 0000:00:16.3
[ 50.214319] i2c_designware i2c_designware.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.214326] i2c_designware i2c_designware.1: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.214349] iwlwifi 0000:02:00.0: PM: calling pci_pm_resume+0x0/0xed @ 4499, parent: 0000:00:14.1
[ 50.214369] i2c_designware i2c_designware.2: PM: calling platform_pm_resume+0x0/0x41 @ 9, parent: 0000:00:17.0
[ 50.214411] i2c_designware i2c_designware.2: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.214435] i2c_designware i2c_designware.3: PM: calling platform_pm_resume+0x0/0x41 @ 9, parent: 0000:00:17.1
[ 50.214453] i2c_designware i2c_designware.3: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.214476] i2c_hid_acpi i2c-ITE8350:00: PM: calling acpi_subsys_resume+0x0/0x5d @ 9, parent: i2c-3
[ 50.214494] iwlwifi 0000:02:00.0: PM: pci_pm_resume+0x0/0xed returned 0 after 124 usecs
[ 50.214557] ata1: PM: calling ata_port_pm_resume+0x0/0x56 @ 4499, parent: 0000:00:12.0
[ 50.214594] ata1: PM: ata_port_pm_resume+0x0/0x56 returned 0 after 18 usecs
[ 50.214613] ata2: PM: calling ata_port_pm_resume+0x0/0x56 @ 4499, parent: 0000:00:12.0
[ 50.214638] ata2: PM: ata_port_pm_resume+0x0/0x56 returned 0 after 10 usecs
[ 50.214649] sdhci-pci 0000:00:1c.0: PM: pci_pm_resume+0x0/0xed returned 0 after 610 usecs
[ 50.214736] i2c_hid_acpi i2c-WCOM5120:00: PM: calling acpi_subsys_resume+0x0/0x5d @ 4493, parent: i2c-1
[ 50.215332] xhci_hcd 0000:00:15.0: PM: pci_pm_resume+0x0/0xed returned 0 after 1428 usecs
[ 50.215429] usb usb1: PM: calling usb_dev_resume+0x0/0x14 @ 4499, parent: 0000:00:15.0
[ 50.215492] rtsx_pci 0000:01:00.0: PM: pci_pm_resume+0x0/0xed returned 0 after 1397 usecs
[ 50.216584] usb usb2: PM: calling usb_dev_resume+0x0/0x14 @ 4506, parent: 0000:00:15.0
[ 50.216669] mei_me 0000:00:0f.0: PM: pci_pm_resume+0x0/0xed returned 0 after 2827 usecs
[ 50.217589] mmcblk mmc0:0001: PM: calling mmc_bus_resume+0x0/0x53 @ 4512, parent: mmc0
[ 50.217630] mmcblk mmc0:0001: PM: mmc_bus_resume+0x0/0x53 returned 0 after 11 usecs
[ 50.218292] ieee80211 phy0: PM: calling wiphy_resume+0x0/0x158 [cfg80211] @ 4516, parent: 0000:02:00.0
[ 50.228367] i915 0000:00:02.0: PM: pci_pm_resume+0x0/0xed returned 0 after 14687 usecs
[ 50.228499] snd_hda_intel 0000:00:0e.0: PM: calling pci_pm_resume+0x0/0xed @ 4517, parent: pci0000:00
[ 50.236650] battery PNP0C0A:00: PM: acpi_battery_resume+0x0/0x3b returned 0 after 22881 usecs
[ 50.236694] button PNP0C0D:00: PM: calling acpi_button_resume+0x0/0xa9 @ 4492, parent: PNP0C09:00
[ 50.238620] usb usb2: PM: usb_dev_resume+0x0/0x14 returned 0 after 21999 usecs
[ 50.239640] button PNP0C0D:00: PM: acpi_button_resume+0x0/0xa9 returned 0 after 2923 usecs
[ 50.239741] ac ACPI0003:00: PM: calling acpi_ac_resume+0x0/0x59 @ 4492, parent: LNXSYBUS:00
[ 50.240966] ac ACPI0003:00: PM: acpi_ac_resume+0x0/0x59 returned 0 after 1205 usecs
[ 50.241008] button PNP0C0C:00: PM: calling acpi_button_resume+0x0/0xa9 @ 4492, parent: LNXSYBUS:00
[ 50.241023] button PNP0C0C:00: PM: acpi_button_resume+0x0/0xa9 returned 0 after 0 usecs
[ 50.241041] tpm_crb MSFT0101:00: PM: calling tpm_pm_resume+0x0/0x30 @ 4492, parent: LNXSYBUS:00
[ 50.241055] tpm_crb MSFT0101:00: PM: tpm_pm_resume+0x0/0x30 returned 0 after 0 usecs
[ 50.241072] thermal LNXTHERM:00: PM: calling acpi_thermal_resume+0x0/0x11e @ 4492, parent: LNXSYBUS:01
[ 50.241145] thermal LNXTHERM:00: PM: acpi_thermal_resume+0x0/0x11e returned 0 after 61 usecs
[ 50.241186] platform PNP0C09:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0000:00:1f.0
[ 50.241201] platform PNP0C09:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.241212] platform PNP0C0A:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: PNP0C09:00
[ 50.241223] platform PNP0C0A:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.241235] ideapad_acpi VPC2004:00: PM: calling acpi_subsys_resume+0x0/0x5d @ 4492, parent: PNP0C09:00
[ 50.242055] snd_hda_intel 0000:00:0e.0: PM: pci_pm_resume+0x0/0xed returned 0 after 13511 usecs
[ 50.242120] snd_hda_codec_realtek hdaudioC0D0: PM: calling hda_codec_pm_resume+0x0/0x19 [snd_hda_codec] @ 4518, parent: 0000:00:0e.0
[ 50.247406] i8042: [49434] a8 -> i8042 (command)
[ 50.247468] ideapad_acpi VPC2004:00: PM: acpi_subsys_resume+0x0/0x5d returned 0 after 6220 usecs
[ 50.247495] platform INT33D3:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: PNP0C09:00
[ 50.247510] platform INT33D3:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247522] platform PNP0C0D:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: PNP0C09:00
[ 50.247532] platform PNP0C0D:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247544] platform ACPI0003:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247554] platform ACPI0003:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247565] platform PNP0C0C:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247575] platform PNP0C0C:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247587] platform PNP0103:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247597] platform PNP0103:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247609] broxton-pinctrl INT3452:00: PM: calling acpi_subsys_resume+0x0/0x5d @ 4492, parent: platform
[ 50.247621] broxton-pinctrl INT3452:00: PM: acpi_subsys_resume+0x0/0x5d returned 0 after 2 usecs
[ 50.247632] broxton-pinctrl INT3452:01: PM: calling acpi_subsys_resume+0x0/0x5d @ 4492, parent: platform
[ 50.247642] broxton-pinctrl INT3452:01: PM: acpi_subsys_resume+0x0/0x5d returned 0 after 0 usecs
[ 50.247653] broxton-pinctrl INT3452:02: PM: calling acpi_subsys_resume+0x0/0x5d @ 4492, parent: platform
[ 50.247663] broxton-pinctrl INT3452:02: PM: acpi_subsys_resume+0x0/0x5d returned 0 after 0 usecs
[ 50.247674] broxton-pinctrl INT3452:03: PM: calling acpi_subsys_resume+0x0/0x5d @ 4492, parent: platform
[ 50.247684] broxton-pinctrl INT3452:03: PM: acpi_subsys_resume+0x0/0x5d returned 0 after 0 usecs
[ 50.247695] platform INT33A1:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247705] platform INT33A1:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247717] platform MSFT0101:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247727] platform MSFT0101:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247738] acpi-fan PNP0C0B:00: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247751] acpi-fan PNP0C0B:00: PM: platform_pm_resume+0x0/0x41 returned 0 after 2 usecs
[ 50.247765] button LNXPWRBN:00: PM: calling acpi_button_resume+0x0/0xa9 @ 4492, parent: LNXSYSTM:00
[ 50.247779] button LNXPWRBN:00: PM: acpi_button_resume+0x0/0xa9 returned 0 after 0 usecs
[ 50.247790] platform rtc-efi.0: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247801] platform rtc-efi.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247812] platform efivars.0: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247822] platform efivars.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247833] platform chromeos_acpi: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247844] platform chromeos_acpi: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.247859] system 00:00: PM: calling pnp_bus_resume+0x0/0x9d @ 4492, parent: pnp0
[ 50.247872] system 00:00: PM: pnp_bus_resume+0x0/0x9d returned 0 after 1 usecs
[ 50.247883] i8042 kbd 00:01: PM: calling pnp_bus_resume+0x0/0x9d @ 4492, parent: pnp0
[ 50.247894] i8042 kbd 00:01: PM: pnp_bus_resume+0x0/0x9d returned 0 after 0 usecs
[ 50.247906] i8042 aux 00:02: PM: calling pnp_bus_resume+0x0/0x9d @ 4492, parent: pnp0
[ 50.247916] i8042 aux 00:02: PM: pnp_bus_resume+0x0/0x9d returned 0 after 0 usecs
[ 50.247927] system 00:03: PM: calling pnp_bus_resume+0x0/0x9d @ 4492, parent: pnp0
[ 50.247937] system 00:03: PM: pnp_bus_resume+0x0/0x9d returned 0 after 0 usecs
[ 50.247948] rtc_cmos 00:04: PM: calling pnp_bus_resume+0x0/0x9d @ 4492, parent: pnp0
[ 50.247960] rtc_cmos 00:04: PM: pnp_bus_resume+0x0/0x9d returned 0 after 1 usecs
[ 50.247978] intel_rapl_msr intel_rapl_msr.0: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.247990] intel_rapl_msr intel_rapl_msr.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.248020] input input0: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: PNP0C0D:00
[ 50.248034] input input0: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.248045] input input1: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: PNP0C0C:00
[ 50.248055] input input1: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.248067] input input2: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: LNXPWRBN:00
[ 50.248077] input input2: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.248109] platform intel-spi: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0000:00:1f.0
[ 50.248120] platform intel-spi: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.248132] idma64 idma64.0: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0000:00:16.0
[ 50.248144] idma64 idma64.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.248157] idma64 idma64.1: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0000:00:16.3
[ 50.248169] idma64 idma64.1: PM: platform_pm_resume+0x0/0x41 returned 0 after 1 usecs
[ 50.248184] idma64 idma64.2: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0000:00:17.0
[ 50.248195] idma64 idma64.2: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.248208] idma64 idma64.3: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0000:00:17.1
[ 50.248219] idma64 idma64.3: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.248246] platform Fixed MDIO bus.0: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.248257] platform Fixed MDIO bus.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.248271] platform intel_xhci_usb_sw: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0000:00:15.0
[ 50.248282] platform intel_xhci_usb_sw: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.248301] i8042 i8042: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.248377] i8042: [49434] 55 <- i8042 (flush, kbd)
[ 50.248407] i8042: [49435] aa -> i8042 (command)
[ 50.248601] i8042: [49435] 00 <- i8042 (return)
[ 50.248604] i8042: [49435] i8042 controller selftest: 0x0 != 0x55
[ 50.269406] snd_hda_codec_realtek hdaudioC0D0: PM: hda_codec_pm_resume+0x0/0x19 [snd_hda_codec] returned 0 after 27250 usecs
[ 50.277581] i2c_hid_acpi i2c-ITE8350:00: PM: acpi_subsys_resume+0x0/0x5d returned 0 after 63082 usecs
[ 50.300456] i8042: [49487] aa -> i8042 (command)
[ 50.300491] i8042: [49487] 55 <- i8042 (return)
[ 50.300729] i8042: [49487] 60 -> i8042 (command)
[ 50.300858] i8042: [49487] 74 -> i8042 (parameter)
[ 50.300987] i8042: [49487] 60 -> i8042 (command)
[ 50.301116] i8042: [49487] 56 -> i8042 (parameter)
[ 50.301245] i8042: [49487] 60 -> i8042 (command)
[ 50.301430] i8042: [49488] 47 -> i8042 (parameter)
[ 50.301462] i8042: [49488] ** <- i8042 (interrupt, 0, 0)
[ 50.301477] i8042 i8042: PM: platform_pm_resume+0x0/0x41 returned 0 after 53162 usecs
[ 50.301509] atkbd serio0: PM: calling serio_resume+0x0/0x94 @ 4492, parent: i8042
[ 50.301533] atkbd serio0: PM: serio_resume+0x0/0x94 returned 0 after 10 usecs
[ 50.301546] psmouse serio1: PM: calling serio_resume+0x0/0x94 @ 4492, parent: i8042
[ 50.301563] psmouse serio1: PM: serio_resume+0x0/0x94 returned 0 after 6 usecs
[ 50.301581] alarmtimer alarmtimer.0.auto: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: rtc0
[ 50.301594] alarmtimer alarmtimer.0.auto: PM: platform_pm_resume+0x0/0x41 returned 0 after 1 usecs
[ 50.301610] platform coretemp.0: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.301621] platform coretemp.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.301638] input input3: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: serio0
[ 50.301655] input input3: PM: input_dev_resume+0x0/0x42 returned 0 after 3 usecs
[ 50.301668] leds input3::numlock: PM: calling led_resume+0x0/0x20 @ 4492, parent: input3
[ 50.301679] leds input3::numlock: PM: led_resume+0x0/0x20 returned 0 after 0 usecs
[ 50.301689] leds input3::capslock: PM: calling led_resume+0x0/0x20 @ 4492, parent: input3
[ 50.301699] leds input3::capslock: PM: led_resume+0x0/0x20 returned 0 after 0 usecs
[ 50.301708] leds input3::scrolllock: PM: calling led_resume+0x0/0x20 @ 4492, parent: input3
[ 50.301717] leds input3::scrolllock: PM: led_resume+0x0/0x20 returned 0 after 0 usecs
[ 50.301733] snd-soc-dummy snd-soc-dummy: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.301744] snd-soc-dummy snd-soc-dummy: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.301759] platform microcode: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.301770] platform microcode: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.301803] platform HID-SENSOR-ff830080.1.auto: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0018:048D:8350.0001
[ 50.301815] platform HID-SENSOR-ff830080.1.auto: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.301827] platform HID-SENSOR-200001.2.auto: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0018:048D:8350.0001
[ 50.301838] platform HID-SENSOR-200001.2.auto: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.301850] hid_sensor_accel_3d HID-SENSOR-200073.3.auto: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0018:048D:8350.0001
[ 50.301863] hid_sensor_accel_3d HID-SENSOR-200073.3.auto: PM: platform_pm_resume+0x0/0x41 returned 0 after 1 usecs
[ 50.301876] platform HID-SENSOR-2000e1.4.auto: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0018:048D:8350.0001
[ 50.301886] platform HID-SENSOR-2000e1.4.auto: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.301915] i8042: [49488] f2 -> i8042 (kbd-data)
[ 50.303993] i8042: [49490] ** <- i8042 (interrupt, 0, 1)
[ 50.304628] i8042: [49491] ** <- i8042 (interrupt, 0, 1)
[ 50.305277] i8042: [49491] ** <- i8042 (interrupt, 0, 1)
[ 50.305365] i8042: [49491] f5 -> i8042 (kbd-data)
[ 50.306621] i8042: [49493] ** <- i8042 (interrupt, 0, 1)
[ 50.306689] i8042: [49493] ed -> i8042 (kbd-data)
[ 50.308474] i8042: [49495] ** <- i8042 (interrupt, 0, 1)
[ 50.308539] i8042: [49495] 00 -> i8042 (kbd-data)
[ 50.309213] i2c_hid_acpi i2c-WCOM5120:00: PM: acpi_subsys_resume+0x0/0x5d returned 0 after 94454 usecs
[ 50.309308] input input10: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: 0018:056A:5120.0002
[ 50.309325] input input10: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.309339] input input11: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: 0018:056A:5120.0002
[ 50.309349] input input11: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.309385] backlight intel_backlight: PM: calling backlight_resume+0x0/0x7a [backlight] @ 4492, parent: card0-eDP-1
[ 50.309404] backlight intel_backlight: PM: backlight_resume+0x0/0x7a [backlight] returned 0 after 0 usecs
[ 50.309421] input input13: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: LNXVIDEO:00
[ 50.309432] input input13: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.309450] platform regulatory.0: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: platform
[ 50.309461] platform regulatory.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.309477] leds phy0-led: PM: calling led_resume+0x0/0x20 @ 4492, parent: 0000:02:00.0
[ 50.309487] leds phy0-led: PM: led_resume+0x0/0x20 returned 0 after 0 usecs
[ 50.309829] i8042: [49496] ** <- i8042 (interrupt, 0, 1)
[ 50.309897] i8042: [49496] f3 -> i8042 (kbd-data)
[ 50.311816] i8042: [49498] ** <- i8042 (interrupt, 0, 1)
[ 50.311924] i8042: [49498] 00 -> i8042 (kbd-data)
[ 50.313358] i8042: [49499] ** <- i8042 (interrupt, 0, 1)
[ 50.313465] i8042: [49500] f4 -> i8042 (kbd-data)
[ 50.314895] i8042: [49501] ** <- i8042 (interrupt, 0, 1)
[ 50.315021] i8042: [49501] d4 -> i8042 (command)
[ 50.315213] i8042: [49501] ff -> i8042 (parameter)
[ 50.318150] i8042: [49504] fa <- i8042 (interrupt, 1, 12)
[ 50.332604] usb usb1: PM: usb_dev_resume+0x0/0x14 returned 0 after 117134 usecs
[ 50.332669] usb 1-8: PM: calling usb_dev_resume+0x0/0x14 @ 4514, parent: usb1
[ 50.332683] usb 1-8: PM: usb_dev_resume+0x0/0x14 returned 0 after 1 usecs
[ 50.332882] usb 1-7: PM: calling usb_dev_resume+0x0/0x14 @ 4512, parent: usb1
[ 50.332901] usb 1-7: PM: usb_dev_resume+0x0/0x14 returned 0 after 0 usecs
[ 50.419131] i8042: [49605] aa <- i8042 (interrupt, 1, 12)
[ 50.420627] i8042: [49607] 00 <- i8042 (interrupt, 1, 12)
[ 50.420726] i8042: [49607] d4 -> i8042 (command)
[ 50.420918] i8042: [49607] f6 -> i8042 (parameter)
[ 50.423919] i8042: [49610] fa <- i8042 (interrupt, 1, 12)
[ 50.424038] i8042: [49610] ed -> i8042 (kbd-data)
[ 50.425491] i8042: [49612] ** <- i8042 (interrupt, 0, 1)
[ 50.425549] i8042: [49612] 00 -> i8042 (kbd-data)
[ 50.426953] i8042: [49613] ** <- i8042 (interrupt, 0, 1)
[ 50.427063] i8042: [49613] f3 -> i8042 (kbd-data)
[ 50.428493] i8042: [49615] ** <- i8042 (interrupt, 0, 1)
[ 50.428555] i8042: [49615] 00 -> i8042 (kbd-data)
[ 50.429960] i8042: [49616] ** <- i8042 (interrupt, 0, 1)
[ 50.430080] i8042: [49616] d4 -> i8042 (command)
[ 50.430272] i8042: [49616] f5 -> i8042 (parameter)
[ 50.433097] i8042: [49619] fa <- i8042 (interrupt, 1, 12)
[ 50.433192] i8042: [49619] d4 -> i8042 (command)
[ 50.433382] i8042: [49619] e6 -> i8042 (parameter)
[ 50.436344] i8042: [49622] fa <- i8042 (interrupt, 1, 12)
[ 50.436480] i8042: [49623] d4 -> i8042 (command)
[ 50.436669] i8042: [49623] e6 -> i8042 (parameter)
[ 50.439478] i8042: [49626] fa <- i8042 (interrupt, 1, 12)
[ 50.439585] i8042: [49626] d4 -> i8042 (command)
[ 50.439776] i8042: [49626] e6 -> i8042 (parameter)
[ 50.442706] i8042: [49629] fa <- i8042 (interrupt, 1, 12)
[ 50.442810] i8042: [49629] d4 -> i8042 (command)
[ 50.443054] i8042: [49629] e9 -> i8042 (parameter)
[ 50.445866] i8042: [49632] fa <- i8042 (interrupt, 1, 12)
[ 50.447615] i8042: [49634] 3c <- i8042 (interrupt, 1, 12)
[ 50.448995] i8042: [49635] 03 <- i8042 (interrupt, 1, 12)
[ 50.450583] i8042: [49637] 00 <- i8042 (interrupt, 1, 12)
[ 50.450673] i8042: [49637] d4 -> i8042 (command)
[ 50.450919] i8042: [49637] e6 -> i8042 (parameter)
[ 50.453235] ieee80211 phy0: PM: wiphy_resume+0x0/0x158 [cfg80211] returned 0 after 234755 usecs
[ 50.453408] rfkill rfkill0: PM: calling rfkill_resume+0x0/0x67 @ 4492, parent: phy0
[ 50.453455] rfkill rfkill0: PM: rfkill_resume+0x0/0x67 returned 0 after 11 usecs
[ 50.453489] input input14: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: VPC2004:00
[ 50.453504] input input14: PM: input_dev_resume+0x0/0x42 returned 0 after 1 usecs
[ 50.453517] rfkill rfkill1: PM: calling rfkill_resume+0x0/0x67 @ 4492, parent: VPC2004:00
[ 50.453528] rfkill rfkill1: PM: rfkill_resume+0x0/0x67 returned 0 after 0 usecs
[ 50.453539] rfkill rfkill2: PM: calling rfkill_resume+0x0/0x67 @ 4492, parent: VPC2004:00
[ 50.453549] rfkill rfkill2: PM: rfkill_resume+0x0/0x67 returned 0 after 0 usecs
[ 50.453564] rtsx_pci_sdmmc rtsx_pci_sdmmc.0: PM: calling platform_pm_resume+0x0/0x41 @ 4492, parent: 0000:01:00.0
[ 50.453579] rtsx_pci_sdmmc rtsx_pci_sdmmc.0: PM: platform_pm_resume+0x0/0x41 returned 0 after 0 usecs
[ 50.453611] input input15: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: card0
[ 50.453623] input input15: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.453636] input input16: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: card0
[ 50.453646] input input16: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.453658] input input18: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: card0
[ 50.453668] input input18: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.453680] input input19: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: card0
[ 50.453690] input input19: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.453702] input input20: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: card0
[ 50.453712] input input20: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.453725] input input21: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: card0
[ 50.453748] i8042: [49640] fa <- i8042 (interrupt, 1, 12)
[ 50.453766] input input21: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.453779] input input22: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: card0
[ 50.453789] input input22: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.453803] input input17: PM: calling input_dev_resume+0x0/0x42 @ 4492, parent: serio1
[ 50.453814] input input17: PM: input_dev_resume+0x0/0x42 returned 0 after 0 usecs
[ 50.453820] i8042: [49640] d4 -> i8042 (command)
[ 50.453829] rfkill rfkill3: PM: calling rfkill_resume+0x0/0x67 @ 4492, parent: hci0
[ 50.453844] rfkill rfkill3: PM: rfkill_resume+0x0/0x67 returned 0 after 3 usecs
[ 50.453872] PM: resume of devices complete after 240.427 msecs
[ 50.454013] i8042: [49640] e8 -> i8042 (parameter)
[ 50.454369] PM: Finishing wakeup.
[ 50.454403] OOM killer enabled.
[ 50.454408] Restarting tasks ...
[ 50.454576] usb 1-7: USB disconnect, device number 2
[ 50.456934] i8042: [49643] fa <- i8042 (interrupt, 1, 12)
[ 50.457782] done.
[ 50.460008] i8042: [49646] d4 -> i8042 (command)
[ 50.460255] i8042: [49646] 00 -> i8042 (parameter)
[ 50.463159] i8042: [49649] fa <- i8042 (interrupt, 1, 12)
[ 50.463195] i8042: [49649] d4 -> i8042 (command)
[ 50.463436] i8042: [49649] e8 -> i8042 (parameter)
[ 50.466349] i8042: [49652] fa <- i8042 (interrupt, 1, 12)
[ 50.466400] i8042: [49653] d4 -> i8042 (command)
[ 50.466639] i8042: [49653] 00 -> i8042 (parameter)
[ 50.469552] i8042: [49656] fa <- i8042 (interrupt, 1, 12)
[ 50.469597] i8042: [49656] d4 -> i8042 (command)
[ 50.469840] i8042: [49656] e8 -> i8042 (parameter)
[ 50.472952] i8042: [49659] fa <- i8042 (interrupt, 1, 12)
[ 50.472989] i8042: [49659] d4 -> i8042 (command)
[ 50.473178] i8042: [49659] 00 -> i8042 (parameter)
[ 50.475928] i8042: [49662] fa <- i8042 (interrupt, 1, 12)
[ 50.475970] i8042: [49662] d4 -> i8042 (command)
[ 50.476267] i8042: [49662] e8 -> i8042 (parameter)
[ 50.479122] i8042: [49665] fa <- i8042 (interrupt, 1, 12)
[ 50.479160] i8042: [49665] d4 -> i8042 (command)
[ 50.479348] i8042: [49665] 01 -> i8042 (parameter)
[ 50.482321] i8042: [49668] fa <- i8042 (interrupt, 1, 12)
[ 50.482374] i8042: [49668] d4 -> i8042 (command)
[ 50.482560] i8042: [49668] e9 -> i8042 (parameter)
[ 50.485508] i8042: [49672] fa <- i8042 (interrupt, 1, 12)
[ 50.487079] i8042: [49673] 5e <- i8042 (interrupt, 1, 12)
[ 50.488660] i8042: [49675] 0f <- i8042 (interrupt, 1, 12)
[ 50.490245] i8042: [49676] 01 <- i8042 (interrupt, 1, 12)
[ 50.490291] i8042: [49676] d4 -> i8042 (command)
[ 50.490476] i8042: [49676] f8 -> i8042 (parameter)
[ 50.493448] i8042: [49680] fa <- i8042 (interrupt, 1, 12)
[ 50.493742] i8042: [49680] d4 -> i8042 (command)
[ 50.493931] i8042: [49680] 00 -> i8042 (parameter)
[ 50.496642] i8042: [49683] fa <- i8042 (interrupt, 1, 12)
[ 50.496692] i8042: [49683] d4 -> i8042 (command)
[ 50.496880] i8042: [49683] f8 -> i8042 (parameter)
[ 50.499835] i8042: [49686] fa <- i8042 (interrupt, 1, 12)
[ 50.499968] i8042: [49686] d4 -> i8042 (command)
[ 50.500152] i8042: [49686] 07 -> i8042 (parameter)
[ 50.503028] i8042: [49689] fa <- i8042 (interrupt, 1, 12)
[ 50.503076] i8042: [49689] d4 -> i8042 (command)
[ 50.503320] i8042: [49689] f8 -> i8042 (parameter)
[ 50.506221] i8042: [49692] fa <- i8042 (interrupt, 1, 12)
[ 50.506263] i8042: [49692] d4 -> i8042 (command)
[ 50.506505] i8042: [49692] 00 -> i8042 (parameter)
[ 50.509422] i8042: [49696] fa <- i8042 (interrupt, 1, 12)
[ 50.509467] i8042: [49696] d4 -> i8042 (command)
[ 50.509710] i8042: [49696] f8 -> i8042 (parameter)
[ 50.512607] i8042: [49699] fa <- i8042 (interrupt, 1, 12)
[ 50.512647] i8042: [49699] d4 -> i8042 (command)
[ 50.512887] i8042: [49699] 01 -> i8042 (parameter)
[ 50.515798] i8042: [49702] fa <- i8042 (interrupt, 1, 12)
[ 50.515847] i8042: [49702] d4 -> i8042 (command)
[ 50.516033] i8042: [49702] e6 -> i8042 (parameter)
[ 50.518998] i8042: [49705] fa <- i8042 (interrupt, 1, 12)
[ 50.519042] i8042: [49705] d4 -> i8042 (command)
[ 50.519228] i8042: [49705] f3 -> i8042 (parameter)
[ 50.522186] i8042: [49708] fa <- i8042 (interrupt, 1, 12)
[ 50.522576] ata2: SATA link down (SStatus 4 SControl 300)
[ 50.522617] ata1: SATA link down (SStatus 4 SControl 300)
[ 50.524835] i8042: [49711] d4 -> i8042 (command)
[ 50.525086] i8042: [49711] 64 -> i8042 (parameter)
[ 50.527903] i8042: [49714] fa <- i8042 (interrupt, 1, 12)
[ 50.527956] i8042: [49714] d4 -> i8042 (command)
[ 50.528143] i8042: [49714] e8 -> i8042 (parameter)
[ 50.531346] i8042: [49717] fa <- i8042 (interrupt, 1, 12)
[ 50.531396] i8042: [49718] d4 -> i8042 (command)
[ 50.531581] i8042: [49718] 03 -> i8042 (parameter)
[ 50.534290] i8042: [49720] fa <- i8042 (interrupt, 1, 12)
[ 50.534783] i8042: [49721] d4 -> i8042 (command)
[ 50.534975] i8042: [49721] e6 -> i8042 (parameter)
[ 50.537986] i8042: [49724] fa <- i8042 (interrupt, 1, 12)
[ 50.538449] i8042: [49725] d4 -> i8042 (command)
[ 50.538637] i8042: [49725] f4 -> i8042 (parameter)
[ 50.541192] i8042: [49727] fa <- i8042 (interrupt, 1, 12)
[ 50.576434] usb 1-7: new full-speed USB device number 4 using xhci_hcd
[ 50.586027] Resume cause unknown
[ 50.586043] PM: suspend exit
[ 50.698236] Lockdown: flashrom: raw io port access is restricted; see man kernel_lockdown.7
[ 50.703494] usb 1-7: New USB device found, idVendor=8087, idProduct=0a2b, bcdDevice= 0.10
[ 50.703511] usb 1-7: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 50.705666] usb 1-7: GPIO lookup for consumer reset
[ 50.705676] usb 1-7: using ACPI for GPIO lookup
[ 50.705680] acpi device:19: GPIO: looking up reset-gpios
[ 50.705685] acpi device:19: GPIO: looking up reset-gpio
[ 50.705687] usb 1-7: using lookup tables for GPIO lookup
[ 50.705690] usb 1-7: No GPIO consumer reset found
[ 50.706474] usb 1-8: USB disconnect, device number 3
[ 50.706840] Bluetooth: btintel_version_info() hci0: Bootloader revision 0.0 build 26 week 38 2015
[ 50.707848] Bluetooth: btintel_read_boot_params() hci0: Device revision is 16
[ 50.707862] Bluetooth: btintel_read_boot_params() hci0: Secure boot is enabled
[ 50.707865] Bluetooth: btintel_read_boot_params() hci0: OTP lock is enabled
[ 50.707868] Bluetooth: btintel_read_boot_params() hci0: API lock is enabled
[ 50.707870] Bluetooth: btintel_read_boot_params() hci0: Debug lock is disabled
[ 50.707873] Bluetooth: btintel_read_boot_params() hci0: Minimum firmware build 1 week 10 2014
[ 50.715536] Bluetooth: btintel_download_fw() hci0: Found device firmware: intel/ibt-12-16.sfi
[ 50.778532] i8042: [49965] ed -> i8042 (kbd-data)
[ 50.779830] i8042: [49966] ** <- i8042 (interrupt, 0, 1)
[ 50.781001] i8042: [49967] 00 -> i8042 (kbd-data)
[ 50.782260] i8042: [49968] ** <- i8042 (interrupt, 0, 1)
[ 50.782725] i8042: [49969] f3 -> i8042 (kbd-data)
[ 50.783993] i8042: [49970] ** <- i8042 (interrupt, 0, 1)
[ 50.784351] i8042: [49970] 00 -> i8042 (kbd-data)
[ 50.785649] i8042: [49972] ** <- i8042 (interrupt, 0, 1)
[ 50.884403] usb 1-8: new high-speed USB device number 5 using xhci_hcd
[ 51.075480] usb 1-8: New USB device found, idVendor=04f2, idProduct=b5a2, bcdDevice=10.34
[ 51.075497] usb 1-8: New USB device strings: Mfr=3, Product=1, SerialNumber=2
[ 51.075501] usb 1-8: Product: Lenovo EasyCamera
[ 51.075504] usb 1-8: Manufacturer: Chicony Electronics Co.,Ltd.
[ 51.075508] usb 1-8: SerialNumber: 0001
[ 51.084442] usb 1-8: GPIO lookup for consumer privacy
[ 51.084454] usb 1-8: using ACPI for GPIO lookup
[ 51.084458] acpi device:1a: GPIO: looking up privacy-gpios
[ 51.084462] acpi device:1a: GPIO: looking up privacy-gpio
[ 51.084464] usb 1-8: using lookup tables for GPIO lookup
[ 51.084467] usb 1-8: No GPIO consumer privacy found
[ 51.084470] usb 1-8: Found UVC 1.00 device Lenovo EasyCamera (04f2:b5a2)
[ 52.530425] Bluetooth: btintel_download_wait() hci0: Waiting for firmware download to complete
[ 52.530913] Bluetooth: btintel_download_wait() hci0: Firmware loaded in 1772813 usecs
[ 52.531169] Bluetooth: btintel_boot_wait() hci0: Waiting for device to boot
[ 52.543947] Bluetooth: btintel_boot_wait() hci0: Device booted in 12568 usecs
[ 52.543954] Bluetooth: msft_skb_pull() hci0: Malformed MSFT vendor event: 0x02
[ 52.555633] Bluetooth: btintel_load_ddc_config() hci0: Found Intel DDC parameters: intel/ibt-12-16.ddc
[ 52.559002] Bluetooth: btintel_load_ddc_config() hci0: Applying Intel DDC parameters completed
[ 52.559911] Bluetooth: btintel_version_info() hci0: Firmware revision 0.1 build 197 week 12 2021
[ 52.561939] Bluetooth: btintel_read_debug_features() hci0: Reading supported features failed (-16)
[ 52.561967] Bluetooth: btintel_register_devcoredump_support() hci0: Error reading debug features
[ 52.830508] i8042: [52017] 08 <- i8042 (interrupt, 1, 12)
[ 52.832093] i8042: [52018] 00 <- i8042 (interrupt, 1, 12)
[ 52.833638] i8042: [52020] 00 <- i8042 (interrupt, 1, 12)
[ 52.839836] i8042: [52026] 54 <- i8042 (interrupt, 1, 12)
[ 52.841388] i8042: [52028] 01 <- i8042 (interrupt, 1, 12)
[ 52.842972] i8042: [52029] 00 <- i8042 (interrupt, 1, 12)
[ 52.843008] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 52.844520] i8042: [52031] 10 <- i8042 (interrupt, 1, 12)
[ 52.846098] i8042: [52032] 00 <- i8042 (interrupt, 1, 12)
[ 52.847677] i8042: [52034] 00 <- i8042 (interrupt, 1, 12)
[ 52.849262] i8042: [52035] 54 <- i8042 (interrupt, 1, 12)
[ 52.850855] i8042: [52037] 13 <- i8042 (interrupt, 1, 12)
[ 52.852495] i8042: [52039] cb <- i8042 (interrupt, 1, 12)
[ 52.852531] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 52.854120] i8042: [52040] 31 <- i8042 (interrupt, 1, 12)
[ 52.855648] i8042: [52042] 12 <- i8042 (interrupt, 1, 12)
[ 52.857249] i8042: [52043] 74 <- i8042 (interrupt, 1, 12)
[ 52.858802] i8042: [52045] 54 <- i8042 (interrupt, 1, 12)
[ 52.860346] i8042: [52046] 13 <- i8042 (interrupt, 1, 12)
[ 52.861927] i8042: [52048] cb <- i8042 (interrupt, 1, 12)
[ 52.861963] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 52.863559] i8042: [52050] 31 <- i8042 (interrupt, 1, 12)
[ 52.865126] i8042: [52051] 92 <- i8042 (interrupt, 1, 12)
[ 52.866734] i8042: [52053] 74 <- i8042 (interrupt, 1, 12)
[ 52.868329] i8042: [52054] 54 <- i8042 (interrupt, 1, 12)
[ 52.869946] i8042: [52056] 23 <- i8042 (interrupt, 1, 12)
[ 52.871425] i8042: [52058] cb <- i8042 (interrupt, 1, 12)
[ 52.871458] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 52.873079] i8042: [52059] 31 <- i8042 (interrupt, 1, 12)
[ 52.874639] i8042: [52061] 02 <- i8042 (interrupt, 1, 12)
[ 52.876184] i8042: [52062] 74 <- i8042 (interrupt, 1, 12)
[ 52.877799] i8042: [52064] 54 <- i8042 (interrupt, 1, 12)
[ 52.879359] i8042: [52065] 23 <- i8042 (interrupt, 1, 12)
[ 52.880932] i8042: [52067] cb <- i8042 (interrupt, 1, 12)
[ 52.880968] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 52.880985] psmouse serio1: issuing reconnect request
[ 52.881026] i8042: [52067] d4 -> i8042 (command)
[ 52.881272] i8042: [52067] ff -> i8042 (parameter)
[ 52.884245] i8042: [52070] fa <- i8042 (interrupt, 1, 12)
[ 52.985217] i8042: [52171] aa <- i8042 (interrupt, 1, 12)
[ 52.986908] i8042: [52173] 00 <- i8042 (interrupt, 1, 12)
[ 52.986990] i8042: [52173] d4 -> i8042 (command)
[ 52.987180] i8042: [52173] f6 -> i8042 (parameter)
[ 52.990010] i8042: [52176] fa <- i8042 (interrupt, 1, 12)
[ 52.990084] i8042: [52176] d4 -> i8042 (command)
[ 52.990274] i8042: [52176] f5 -> i8042 (parameter)
[ 52.993210] i8042: [52179] fa <- i8042 (interrupt, 1, 12)
[ 52.993279] i8042: [52179] d4 -> i8042 (command)
[ 52.993468] i8042: [52180] e6 -> i8042 (parameter)
[ 52.996416] i8042: [52183] fa <- i8042 (interrupt, 1, 12)
[ 52.996472] i8042: [52183] d4 -> i8042 (command)
[ 52.996662] i8042: [52183] e6 -> i8042 (parameter)
[ 52.999629] i8042: [52186] fa <- i8042 (interrupt, 1, 12)
[ 52.999699] i8042: [52186] d4 -> i8042 (command)
[ 52.999888] i8042: [52186] e6 -> i8042 (parameter)
[ 53.002943] i8042: [52189] fa <- i8042 (interrupt, 1, 12)
[ 53.003009] i8042: [52189] d4 -> i8042 (command)
[ 53.003198] i8042: [52189] e9 -> i8042 (parameter)
[ 53.006021] i8042: [52192] fa <- i8042 (interrupt, 1, 12)
[ 53.007588] i8042: [52194] 3c <- i8042 (interrupt, 1, 12)
[ 53.009134] i8042: [52195] 03 <- i8042 (interrupt, 1, 12)
[ 53.010715] i8042: [52197] 00 <- i8042 (interrupt, 1, 12)
[ 53.010776] i8042: [52197] d4 -> i8042 (command)
[ 53.010965] i8042: [52197] e6 -> i8042 (parameter)
[ 53.013926] i8042: [52200] fa <- i8042 (interrupt, 1, 12)
[ 53.014013] i8042: [52200] d4 -> i8042 (command)
[ 53.014202] i8042: [52200] e8 -> i8042 (parameter)
[ 53.017160] i8042: [52203] fa <- i8042 (interrupt, 1, 12)
[ 53.017225] i8042: [52203] d4 -> i8042 (command)
[ 53.017470] i8042: [52203] 00 -> i8042 (parameter)
[ 53.020380] i8042: [52206] fa <- i8042 (interrupt, 1, 12)
[ 53.020476] i8042: [52207] d4 -> i8042 (command)
[ 53.020665] i8042: [52207] e8 -> i8042 (parameter)
[ 53.023569] i8042: [52210] fa <- i8042 (interrupt, 1, 12)
[ 53.023637] i8042: [52210] d4 -> i8042 (command)
[ 53.023826] i8042: [52210] 00 -> i8042 (parameter)
[ 53.026706] i8042: [52213] fa <- i8042 (interrupt, 1, 12)
[ 53.026760] i8042: [52213] d4 -> i8042 (command)
[ 53.026948] i8042: [52213] e8 -> i8042 (parameter)
[ 53.029939] i8042: [52216] fa <- i8042 (interrupt, 1, 12)
[ 53.030054] i8042: [52216] d4 -> i8042 (command)
[ 53.030243] i8042: [52216] 00 -> i8042 (parameter)
[ 53.033126] i8042: [52219] fa <- i8042 (interrupt, 1, 12)
[ 53.033196] i8042: [52219] d4 -> i8042 (command)
[ 53.033386] i8042: [52220] e8 -> i8042 (parameter)
[ 53.036395] i8042: [52222] fa <- i8042 (interrupt, 1, 12)
[ 53.036495] i8042: [52223] d4 -> i8042 (command)
[ 53.036685] i8042: [52223] 01 -> i8042 (parameter)
[ 53.039490] i8042: [52226] fa <- i8042 (interrupt, 1, 12)
[ 53.039565] i8042: [52226] d4 -> i8042 (command)
[ 53.039754] i8042: [52226] e9 -> i8042 (parameter)
[ 53.042674] i8042: [52229] fa <- i8042 (interrupt, 1, 12)
[ 53.044281] i8042: [52230] 5e <- i8042 (interrupt, 1, 12)
[ 53.045866] i8042: [52232] 0f <- i8042 (interrupt, 1, 12)
[ 53.047424] i8042: [52234] 01 <- i8042 (interrupt, 1, 12)
[ 53.047485] i8042: [52234] d4 -> i8042 (command)
[ 53.047676] i8042: [52234] f8 -> i8042 (parameter)
[ 53.050690] i8042: [52237] fa <- i8042 (interrupt, 1, 12)
[ 53.050786] i8042: [52237] d4 -> i8042 (command)
[ 53.050976] i8042: [52237] 00 -> i8042 (parameter)
[ 53.053881] i8042: [52240] fa <- i8042 (interrupt, 1, 12)
[ 53.053964] i8042: [52240] d4 -> i8042 (command)
[ 53.054154] i8042: [52240] f8 -> i8042 (parameter)
[ 53.056998] i8042: [52243] fa <- i8042 (interrupt, 1, 12)
[ 53.057095] i8042: [52243] d4 -> i8042 (command)
[ 53.057285] i8042: [52243] 07 -> i8042 (parameter)
[ 53.060199] i8042: [52246] fa <- i8042 (interrupt, 1, 12)
[ 53.060263] i8042: [52246] d4 -> i8042 (command)
[ 53.060451] i8042: [52246] f8 -> i8042 (parameter)
[ 53.063392] i8042: [52249] fa <- i8042 (interrupt, 1, 12)
[ 53.063493] i8042: [52250] d4 -> i8042 (command)
[ 53.063683] i8042: [52250] 00 -> i8042 (parameter)
[ 53.066689] i8042: [52253] fa <- i8042 (interrupt, 1, 12)
[ 53.066783] i8042: [52253] d4 -> i8042 (command)
[ 53.067030] i8042: [52253] f8 -> i8042 (parameter)
[ 53.069869] i8042: [52256] fa <- i8042 (interrupt, 1, 12)
[ 53.070074] i8042: [52256] d4 -> i8042 (command)
[ 53.070323] i8042: [52256] 01 -> i8042 (parameter)
[ 53.072980] i8042: [52259] fa <- i8042 (interrupt, 1, 12)
[ 53.073075] i8042: [52259] d4 -> i8042 (command)
[ 53.073265] i8042: [52259] e6 -> i8042 (parameter)
[ 53.076175] i8042: [52262] fa <- i8042 (interrupt, 1, 12)
[ 53.076243] i8042: [52262] d4 -> i8042 (command)
[ 53.076432] i8042: [52263] f3 -> i8042 (parameter)
[ 53.079367] i8042: [52265] fa <- i8042 (interrupt, 1, 12)
[ 53.079465] i8042: [52266] d4 -> i8042 (command)
[ 53.079656] i8042: [52266] 64 -> i8042 (parameter)
[ 53.082561] i8042: [52269] fa <- i8042 (interrupt, 1, 12)
[ 53.082627] i8042: [52269] d4 -> i8042 (command)
[ 53.082816] i8042: [52269] e8 -> i8042 (parameter)
[ 53.085823] i8042: [52272] fa <- i8042 (interrupt, 1, 12)
[ 53.085896] i8042: [52272] d4 -> i8042 (command)
[ 53.086142] i8042: [52272] 03 -> i8042 (parameter)
[ 53.089017] i8042: [52275] fa <- i8042 (interrupt, 1, 12)
[ 53.089097] i8042: [52275] d4 -> i8042 (command)
[ 53.089287] i8042: [52275] e6 -> i8042 (parameter)
[ 53.092256] i8042: [52278] fa <- i8042 (interrupt, 1, 12)
[ 53.092359] i8042: [52278] d4 -> i8042 (command)
[ 53.092549] i8042: [52279] f4 -> i8042 (parameter)
[ 53.095463] i8042: [52282] fa <- i8042 (interrupt, 1, 12)
[ 53.116634] i8042: [52303] 08 <- i8042 (interrupt, 1, 12)
[ 53.118231] i8042: [52304] 00 <- i8042 (interrupt, 1, 12)
[ 53.119854] i8042: [52306] 00 <- i8042 (interrupt, 1, 12)
[ 53.126415] i8042: [52313] 54 <- i8042 (interrupt, 1, 12)
[ 53.128026] i8042: [52314] 01 <- i8042 (interrupt, 1, 12)
[ 53.129593] i8042: [52316] 00 <- i8042 (interrupt, 1, 12)
[ 53.129629] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.131158] i8042: [52317] 10 <- i8042 (interrupt, 1, 12)
[ 53.132742] i8042: [52319] 00 <- i8042 (interrupt, 1, 12)
[ 53.134286] i8042: [52320] 00 <- i8042 (interrupt, 1, 12)
[ 53.135873] i8042: [52322] 54 <- i8042 (interrupt, 1, 12)
[ 53.137525] i8042: [52324] 13 <- i8042 (interrupt, 1, 12)
[ 53.139076] i8042: [52325] 23 <- i8042 (interrupt, 1, 12)
[ 53.139112] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.140693] i8042: [52327] 31 <- i8042 (interrupt, 1, 12)
[ 53.142240] i8042: [52328] d2 <- i8042 (interrupt, 1, 12)
[ 53.143785] i8042: [52330] f3 <- i8042 (interrupt, 1, 12)
[ 53.145367] i8042: [52331] 54 <- i8042 (interrupt, 1, 12)
[ 53.146985] i8042: [52333] 23 <- i8042 (interrupt, 1, 12)
[ 53.148571] i8042: [52335] 23 <- i8042 (interrupt, 1, 12)
[ 53.148606] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.150119] i8042: [52336] 31 <- i8042 (interrupt, 1, 12)
[ 53.151789] i8042: [52338] 42 <- i8042 (interrupt, 1, 12)
[ 53.153392] i8042: [52339] f3 <- i8042 (interrupt, 1, 12)
[ 53.154866] i8042: [52341] 54 <- i8042 (interrupt, 1, 12)
[ 53.156494] i8042: [52343] 23 <- i8042 (interrupt, 1, 12)
[ 53.158034] i8042: [52344] 95 <- i8042 (interrupt, 1, 12)
[ 53.158069] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.159690] i8042: [52346] 31 <- i8042 (interrupt, 1, 12)
[ 53.161209] i8042: [52347] 72 <- i8042 (interrupt, 1, 12)
[ 53.162823] i8042: [52349] df <- i8042 (interrupt, 1, 12)
[ 53.164369] i8042: [52350] 54 <- i8042 (interrupt, 1, 12)
[ 53.165951] i8042: [52352] 23 <- i8042 (interrupt, 1, 12)
[ 53.167531] i8042: [52354] 9b <- i8042 (interrupt, 1, 12)
[ 53.167564] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.167580] psmouse serio1: issuing reconnect request
[ 53.167614] i8042: [52354] d4 -> i8042 (command)
[ 53.167803] i8042: [52354] ff -> i8042 (parameter)
[ 53.170856] i8042: [52357] fa <- i8042 (interrupt, 1, 12)
[ 53.271809] i8042: [52458] aa <- i8042 (interrupt, 1, 12)
[ 53.273382] i8042: [52459] 00 <- i8042 (interrupt, 1, 12)
[ 53.273466] i8042: [52460] d4 -> i8042 (command)
[ 53.273654] i8042: [52460] f6 -> i8042 (parameter)
[ 53.276527] i8042: [52463] fa <- i8042 (interrupt, 1, 12)
[ 53.276591] i8042: [52463] d4 -> i8042 (command)
[ 53.276780] i8042: [52463] f5 -> i8042 (parameter)
[ 53.279787] i8042: [52466] fa <- i8042 (interrupt, 1, 12)
[ 53.279861] i8042: [52466] d4 -> i8042 (command)
[ 53.280050] i8042: [52466] e6 -> i8042 (parameter)
[ 53.282989] i8042: [52469] fa <- i8042 (interrupt, 1, 12)
[ 53.283062] i8042: [52469] d4 -> i8042 (command)
[ 53.283307] i8042: [52469] e6 -> i8042 (parameter)
[ 53.286216] i8042: [52472] fa <- i8042 (interrupt, 1, 12)
[ 53.286298] i8042: [52472] d4 -> i8042 (command)
[ 53.286487] i8042: [52473] e6 -> i8042 (parameter)
[ 53.289378] i8042: [52475] fa <- i8042 (interrupt, 1, 12)
[ 53.289480] i8042: [52476] d4 -> i8042 (command)
[ 53.289669] i8042: [52476] e9 -> i8042 (parameter)
[ 53.292507] i8042: [52479] fa <- i8042 (interrupt, 1, 12)
[ 53.294099] i8042: [52480] 3c <- i8042 (interrupt, 1, 12)
[ 53.295648] i8042: [52482] 03 <- i8042 (interrupt, 1, 12)
[ 53.297228] i8042: [52483] 00 <- i8042 (interrupt, 1, 12)
[ 53.297279] i8042: [52483] d4 -> i8042 (command)
[ 53.297468] i8042: [52483] e6 -> i8042 (parameter)
[ 53.300521] i8042: [52487] fa <- i8042 (interrupt, 1, 12)
[ 53.300591] i8042: [52487] d4 -> i8042 (command)
[ 53.300779] i8042: [52487] e8 -> i8042 (parameter)
[ 53.303670] i8042: [52490] fa <- i8042 (interrupt, 1, 12)
[ 53.303735] i8042: [52490] d4 -> i8042 (command)
[ 53.303923] i8042: [52490] 00 -> i8042 (parameter)
[ 53.306872] i8042: [52493] fa <- i8042 (interrupt, 1, 12)
[ 53.306922] i8042: [52493] d4 -> i8042 (command)
[ 53.307109] i8042: [52493] e8 -> i8042 (parameter)
[ 53.310052] i8042: [52496] fa <- i8042 (interrupt, 1, 12)
[ 53.310095] i8042: [52496] d4 -> i8042 (command)
[ 53.310280] i8042: [52496] 00 -> i8042 (parameter)
[ 53.313234] i8042: [52499] fa <- i8042 (interrupt, 1, 12)
[ 53.313270] i8042: [52499] d4 -> i8042 (command)
[ 53.313511] i8042: [52499] e8 -> i8042 (parameter)
[ 53.316543] i8042: [52503] fa <- i8042 (interrupt, 1, 12)
[ 53.316613] i8042: [52503] d4 -> i8042 (command)
[ 53.316801] i8042: [52503] 00 -> i8042 (parameter)
[ 53.319674] i8042: [52506] fa <- i8042 (interrupt, 1, 12)
[ 53.319750] i8042: [52506] d4 -> i8042 (command)
[ 53.319935] i8042: [52506] e8 -> i8042 (parameter)
[ 53.322809] i8042: [52509] fa <- i8042 (interrupt, 1, 12)
[ 53.322861] i8042: [52509] d4 -> i8042 (command)
[ 53.323102] i8042: [52509] 01 -> i8042 (parameter)
[ 53.325995] i8042: [52512] fa <- i8042 (interrupt, 1, 12)
[ 53.326040] i8042: [52512] d4 -> i8042 (command)
[ 53.326225] i8042: [52512] e9 -> i8042 (parameter)
[ 53.329184] i8042: [52515] fa <- i8042 (interrupt, 1, 12)
[ 53.330855] i8042: [52517] 5e <- i8042 (interrupt, 1, 12)
[ 53.332498] i8042: [52519] 0f <- i8042 (interrupt, 1, 12)
[ 53.333956] i8042: [52520] 01 <- i8042 (interrupt, 1, 12)
[ 53.334001] i8042: [52520] d4 -> i8042 (command)
[ 53.334186] i8042: [52520] f8 -> i8042 (parameter)
[ 53.337189] i8042: [52523] fa <- i8042 (interrupt, 1, 12)
[ 53.337250] i8042: [52523] d4 -> i8042 (command)
[ 53.337436] i8042: [52523] 00 -> i8042 (parameter)
[ 53.340349] i8042: [52526] fa <- i8042 (interrupt, 1, 12)
[ 53.340407] i8042: [52527] d4 -> i8042 (command)
[ 53.340592] i8042: [52527] f8 -> i8042 (parameter)
[ 53.343585] i8042: [52530] fa <- i8042 (interrupt, 1, 12)
[ 53.343645] i8042: [52530] d4 -> i8042 (command)
[ 53.343833] i8042: [52530] 07 -> i8042 (parameter)
[ 53.346706] i8042: [52533] fa <- i8042 (interrupt, 1, 12)
[ 53.346986] i8042: [52533] d4 -> i8042 (command)
[ 53.347235] i8042: [52533] f8 -> i8042 (parameter)
[ 53.349902] i8042: [52536] fa <- i8042 (interrupt, 1, 12)
[ 53.349959] i8042: [52536] d4 -> i8042 (command)
[ 53.350149] i8042: [52536] 00 -> i8042 (parameter)
[ 53.353144] i8042: [52539] fa <- i8042 (interrupt, 1, 12)
[ 53.353204] i8042: [52539] d4 -> i8042 (command)
[ 53.353393] i8042: [52539] f8 -> i8042 (parameter)
[ 53.356293] i8042: [52542] fa <- i8042 (interrupt, 1, 12)
[ 53.356338] i8042: [52542] d4 -> i8042 (command)
[ 53.356526] i8042: [52542] 01 -> i8042 (parameter)
[ 53.359491] i8042: [52546] fa <- i8042 (interrupt, 1, 12)
[ 53.359562] i8042: [52546] d4 -> i8042 (command)
[ 53.359750] i8042: [52546] e6 -> i8042 (parameter)
[ 53.362711] i8042: [52549] fa <- i8042 (interrupt, 1, 12)
[ 53.362775] i8042: [52549] d4 -> i8042 (command)
[ 53.362962] i8042: [52549] f3 -> i8042 (parameter)
[ 53.365933] i8042: [52552] fa <- i8042 (interrupt, 1, 12)
[ 53.365996] i8042: [52552] d4 -> i8042 (command)
[ 53.366239] i8042: [52552] 64 -> i8042 (parameter)
[ 53.369127] i8042: [52555] fa <- i8042 (interrupt, 1, 12)
[ 53.369195] i8042: [52555] d4 -> i8042 (command)
[ 53.369379] i8042: [52555] e8 -> i8042 (parameter)
[ 53.372256] i8042: [52558] fa <- i8042 (interrupt, 1, 12)
[ 53.372306] i8042: [52558] d4 -> i8042 (command)
[ 53.372492] i8042: [52558] 03 -> i8042 (parameter)
[ 53.375451] i8042: [52562] fa <- i8042 (interrupt, 1, 12)
[ 53.375498] i8042: [52562] d4 -> i8042 (command)
[ 53.375741] i8042: [52562] e6 -> i8042 (parameter)
[ 53.378679] i8042: [52565] fa <- i8042 (interrupt, 1, 12)
[ 53.378726] i8042: [52565] d4 -> i8042 (command)
[ 53.378966] i8042: [52565] f4 -> i8042 (parameter)
[ 53.381921] i8042: [52568] fa <- i8042 (interrupt, 1, 12)
[ 53.402618] i8042: [52589] 08 <- i8042 (interrupt, 1, 12)
[ 53.404194] i8042: [52590] 00 <- i8042 (interrupt, 1, 12)
[ 53.405791] i8042: [52592] 00 <- i8042 (interrupt, 1, 12)
[ 53.412374] i8042: [52598] 54 <- i8042 (interrupt, 1, 12)
[ 53.413955] i8042: [52600] 01 <- i8042 (interrupt, 1, 12)
[ 53.415565] i8042: [52602] 00 <- i8042 (interrupt, 1, 12)
[ 53.415597] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.417200] i8042: [52603] 10 <- i8042 (interrupt, 1, 12)
[ 53.418826] i8042: [52605] 00 <- i8042 (interrupt, 1, 12)
[ 53.420428] i8042: [52607] 00 <- i8042 (interrupt, 1, 12)
[ 53.421914] i8042: [52608] 54 <- i8042 (interrupt, 1, 12)
[ 53.423453] i8042: [52610] 12 <- i8042 (interrupt, 1, 12)
[ 53.425039] i8042: [52611] c1 <- i8042 (interrupt, 1, 12)
[ 53.425066] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.426620] i8042: [52613] 31 <- i8042 (interrupt, 1, 12)
[ 53.428234] i8042: [52614] f3 <- i8042 (interrupt, 1, 12)
[ 53.429819] i8042: [52616] c6 <- i8042 (interrupt, 1, 12)
[ 53.431505] i8042: [52618] 54 <- i8042 (interrupt, 1, 12)
[ 53.433017] i8042: [52619] 22 <- i8042 (interrupt, 1, 12)
[ 53.434541] i8042: [52621] c1 <- i8042 (interrupt, 1, 12)
[ 53.434601] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.436167] i8042: [52622] 31 <- i8042 (interrupt, 1, 12)
[ 53.437705] i8042: [52624] 43 <- i8042 (interrupt, 1, 12)
[ 53.439351] i8042: [52625] c6 <- i8042 (interrupt, 1, 12)
[ 53.440944] i8042: [52627] 54 <- i8042 (interrupt, 1, 12)
[ 53.442467] i8042: [52629] 22 <- i8042 (interrupt, 1, 12)
[ 53.444040] i8042: [52630] c1 <- i8042 (interrupt, 1, 12)
[ 53.444074] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.445657] i8042: [52632] 31 <- i8042 (interrupt, 1, 12)
[ 53.447236] i8042: [52633] 73 <- i8042 (interrupt, 1, 12)
[ 53.448781] i8042: [52635] c6 <- i8042 (interrupt, 1, 12)
[ 53.450472] i8042: [52637] 54 <- i8042 (interrupt, 1, 12)
[ 53.452068] i8042: [52638] 22 <- i8042 (interrupt, 1, 12)
[ 53.453554] i8042: [52640] a9 <- i8042 (interrupt, 1, 12)
[ 53.453589] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.453605] psmouse serio1: issuing reconnect request
[ 53.453680] i8042: [52640] d4 -> i8042 (command)
[ 53.453870] i8042: [52640] ff -> i8042 (parameter)
[ 53.456907] i8042: [52643] fa <- i8042 (interrupt, 1, 12)
[ 53.557835] i8042: [52744] aa <- i8042 (interrupt, 1, 12)
[ 53.559422] i8042: [52746] 00 <- i8042 (interrupt, 1, 12)
[ 53.559481] i8042: [52746] d4 -> i8042 (command)
[ 53.559671] i8042: [52746] f6 -> i8042 (parameter)
[ 53.562624] i8042: [52749] fa <- i8042 (interrupt, 1, 12)
[ 53.562677] i8042: [52749] d4 -> i8042 (command)
[ 53.562865] i8042: [52749] f5 -> i8042 (parameter)
[ 53.565819] i8042: [52752] fa <- i8042 (interrupt, 1, 12)
[ 53.565886] i8042: [52752] d4 -> i8042 (command)
[ 53.566075] i8042: [52752] e6 -> i8042 (parameter)
[ 53.569011] i8042: [52755] fa <- i8042 (interrupt, 1, 12)
[ 53.569056] i8042: [52755] d4 -> i8042 (command)
[ 53.569302] i8042: [52755] e6 -> i8042 (parameter)
[ 53.572204] i8042: [52758] fa <- i8042 (interrupt, 1, 12)
[ 53.572258] i8042: [52758] d4 -> i8042 (command)
[ 53.572447] i8042: [52759] e6 -> i8042 (parameter)
[ 53.575410] i8042: [52762] fa <- i8042 (interrupt, 1, 12)
[ 53.575465] i8042: [52762] d4 -> i8042 (command)
[ 53.575654] i8042: [52762] e9 -> i8042 (parameter)
[ 53.578629] i8042: [52765] fa <- i8042 (interrupt, 1, 12)
[ 53.580171] i8042: [52766] 3c <- i8042 (interrupt, 1, 12)
[ 53.581748] i8042: [52768] 03 <- i8042 (interrupt, 1, 12)
[ 53.583341] i8042: [52769] 00 <- i8042 (interrupt, 1, 12)
[ 53.583962] i8042: [52770] d4 -> i8042 (command)
[ 53.584157] i8042: [52770] e6 -> i8042 (parameter)
[ 53.587154] i8042: [52773] fa <- i8042 (interrupt, 1, 12)
[ 53.587225] i8042: [52773] d4 -> i8042 (command)
[ 53.587412] i8042: [52773] e8 -> i8042 (parameter)
[ 53.590242] i8042: [52776] fa <- i8042 (interrupt, 1, 12)
[ 53.590310] i8042: [52776] d4 -> i8042 (command)
[ 53.590499] i8042: [52776] 00 -> i8042 (parameter)
[ 53.593437] i8042: [52780] fa <- i8042 (interrupt, 1, 12)
[ 53.593491] i8042: [52780] d4 -> i8042 (command)
[ 53.593680] i8042: [52780] e8 -> i8042 (parameter)
[ 53.596666] i8042: [52783] fa <- i8042 (interrupt, 1, 12)
[ 53.596738] i8042: [52783] d4 -> i8042 (command)
[ 53.596927] i8042: [52783] 00 -> i8042 (parameter)
[ 53.599823] i8042: [52786] fa <- i8042 (interrupt, 1, 12)
[ 53.599873] i8042: [52786] d4 -> i8042 (command)
[ 53.600060] i8042: [52786] e8 -> i8042 (parameter)
[ 53.603151] i8042: [52789] fa <- i8042 (interrupt, 1, 12)
[ 53.603223] i8042: [52789] d4 -> i8042 (command)
[ 53.603411] i8042: [52789] 00 -> i8042 (parameter)
[ 53.606277] i8042: [52792] fa <- i8042 (interrupt, 1, 12)
[ 53.606354] i8042: [52792] d4 -> i8042 (command)
[ 53.606544] i8042: [52793] e8 -> i8042 (parameter)
[ 53.609431] i8042: [52796] fa <- i8042 (interrupt, 1, 12)
[ 53.609490] i8042: [52796] d4 -> i8042 (command)
[ 53.609681] i8042: [52796] 01 -> i8042 (parameter)
[ 53.612598] i8042: [52799] fa <- i8042 (interrupt, 1, 12)
[ 53.612672] i8042: [52799] d4 -> i8042 (command)
[ 53.612861] i8042: [52799] e9 -> i8042 (parameter)
[ 53.615786] i8042: [52802] fa <- i8042 (interrupt, 1, 12)
[ 53.617354] i8042: [52803] 5e <- i8042 (interrupt, 1, 12)
[ 53.618939] i8042: [52805] 0f <- i8042 (interrupt, 1, 12)
[ 53.619351] wlan0: authenticate with c8:9e:43:94:32:f2
[ 53.620606] i8042: [52807] 01 <- i8042 (interrupt, 1, 12)
[ 53.620632] i8042: [52807] d4 -> i8042 (command)
[ 53.620874] i8042: [52807] f8 -> i8042 (parameter)
[ 53.623743] i8042: [52810] fa <- i8042 (interrupt, 1, 12)
[ 53.623775] i8042: [52810] d4 -> i8042 (command)
[ 53.624017] i8042: [52810] 00 -> i8042 (parameter)
[ 53.626925] i8042: [52813] fa <- i8042 (interrupt, 1, 12)
[ 53.626956] i8042: [52813] d4 -> i8042 (command)
[ 53.627197] i8042: [52813] f8 -> i8042 (parameter)
[ 53.627268] wlan0: send auth to c8:9e:43:94:32:f2 (try 1/3)
[ 53.630118] i8042: [52816] fa <- i8042 (interrupt, 1, 12)
[ 53.630144] i8042: [52816] d4 -> i8042 (command)
[ 53.630384] i8042: [52816] 07 -> i8042 (parameter)
[ 53.633310] i8042: [52819] fa <- i8042 (interrupt, 1, 12)
[ 53.633328] i8042: [52819] d4 -> i8042 (command)
[ 53.633569] i8042: [52819] f8 -> i8042 (parameter)
[ 53.634465] wlan0: authenticated
[ 53.635413] wlan0: associate with c8:9e:43:94:32:f2 (try 1/3)
[ 53.636511] i8042: [52823] fa <- i8042 (interrupt, 1, 12)
[ 53.636536] i8042: [52823] d4 -> i8042 (command)
[ 53.636778] i8042: [52823] 00 -> i8042 (parameter)
[ 53.636854] wlan0: RX AssocResp from c8:9e:43:94:32:f2 (capab=0x11 status=0 aid=28)
[ 53.639700] i8042: [52826] fa <- i8042 (interrupt, 1, 12)
[ 53.639731] i8042: [52826] d4 -> i8042 (command)
[ 53.639972] i8042: [52826] f8 -> i8042 (parameter)
[ 53.642900] i8042: [52829] fa <- i8042 (interrupt, 1, 12)
[ 53.642942] i8042: [52829] d4 -> i8042 (command)
[ 53.643183] i8042: [52829] 01 -> i8042 (parameter)
[ 53.646089] i8042: [52832] fa <- i8042 (interrupt, 1, 12)
[ 53.646885] i8042: [52833] d4 -> i8042 (command)
[ 53.647078] i8042: [52833] e6 -> i8042 (parameter)
[ 53.648097] wlan0: associated
[ 53.649787] i8042: [52836] fa <- i8042 (interrupt, 1, 12)
[ 53.649828] i8042: [52836] d4 -> i8042 (command)
[ 53.650069] i8042: [52836] f3 -> i8042 (parameter)
[ 53.653013] i8042: [52839] fa <- i8042 (interrupt, 1, 12)
[ 53.653048] i8042: [52839] d4 -> i8042 (command)
[ 53.653233] i8042: [52839] 64 -> i8042 (parameter)
[ 53.656205] i8042: [52842] fa <- i8042 (interrupt, 1, 12)
[ 53.656244] i8042: [52842] d4 -> i8042 (command)
[ 53.656429] i8042: [52843] e8 -> i8042 (parameter)
[ 53.659369] i8042: [52845] fa <- i8042 (interrupt, 1, 12)
[ 53.659417] i8042: [52846] d4 -> i8042 (command)
[ 53.659657] i8042: [52846] 03 -> i8042 (parameter)
[ 53.662561] i8042: [52849] fa <- i8042 (interrupt, 1, 12)
[ 53.662597] i8042: [52849] d4 -> i8042 (command)
[ 53.662835] i8042: [52849] e6 -> i8042 (parameter)
[ 53.665774] i8042: [52852] fa <- i8042 (interrupt, 1, 12)
[ 53.665808] i8042: [52852] d4 -> i8042 (command)
[ 53.666049] i8042: [52852] f4 -> i8042 (parameter)
[ 53.668990] i8042: [52855] fa <- i8042 (interrupt, 1, 12)
[ 53.672903] wlan0: Limiting TX power to 30 (30 - 0) dBm as advertised by c8:9e:43:94:32:f2
[ 53.675491] wlan0: dropped frame to c8:9e:43:94:32:f2 (unauthorized port)
[ 53.689694] i8042: [52876] 08 <- i8042 (interrupt, 1, 12)
[ 53.691275] i8042: [52877] 00 <- i8042 (interrupt, 1, 12)
[ 53.692865] i8042: [52879] 00 <- i8042 (interrupt, 1, 12)
[ 53.699488] i8042: [52886] 54 <- i8042 (interrupt, 1, 12)
[ 53.701075] i8042: [52887] 01 <- i8042 (interrupt, 1, 12)
[ 53.702663] i8042: [52889] 00 <- i8042 (interrupt, 1, 12)
[ 53.702683] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.704251] i8042: [52890] 10 <- i8042 (interrupt, 1, 12)
[ 53.705821] i8042: [52892] 00 <- i8042 (interrupt, 1, 12)
[ 53.707412] i8042: [52894] 00 <- i8042 (interrupt, 1, 12)
[ 53.708986] i8042: [52895] 54 <- i8042 (interrupt, 1, 12)
[ 53.710574] i8042: [52897] 25 <- i8042 (interrupt, 1, 12)
[ 53.712156] i8042: [52898] 8b <- i8042 (interrupt, 1, 12)
[ 53.712179] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.713770] i8042: [52900] 31 <- i8042 (interrupt, 1, 12)
[ 53.715351] i8042: [52901] 42 <- i8042 (interrupt, 1, 12)
[ 53.716923] i8042: [52903] 75 <- i8042 (interrupt, 1, 12)
[ 53.718491] i8042: [52905] 54 <- i8042 (interrupt, 1, 12)
[ 53.720086] i8042: [52906] 25 <- i8042 (interrupt, 1, 12)
[ 53.721659] i8042: [52908] 8b <- i8042 (interrupt, 1, 12)
[ 53.721679] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.723246] i8042: [52909] 31 <- i8042 (interrupt, 1, 12)
[ 53.724859] i8042: [52911] 72 <- i8042 (interrupt, 1, 12)
[ 53.726409] i8042: [52913] 75 <- i8042 (interrupt, 1, 12)
[ 53.727996] i8042: [52914] 54 <- i8042 (interrupt, 1, 12)
[ 53.729577] i8042: [52916] 25 <- i8042 (interrupt, 1, 12)
[ 53.731163] i8042: [52917] 44 <- i8042 (interrupt, 1, 12)
[ 53.731188] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.732744] i8042: [52919] 31 <- i8042 (interrupt, 1, 12)
[ 53.734376] i8042: [52920] a2 <- i8042 (interrupt, 1, 12)
[ 53.735974] i8042: [52922] 74 <- i8042 (interrupt, 1, 12)
[ 53.737526] i8042: [52924] 54 <- i8042 (interrupt, 1, 12)
[ 53.739078] i8042: [52925] 25 <- i8042 (interrupt, 1, 12)
[ 53.740657] i8042: [52927] 3b <- i8042 (interrupt, 1, 12)
[ 53.740680] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.740689] psmouse serio1: issuing reconnect request
[ 53.740723] i8042: [52927] d4 -> i8042 (command)
[ 53.740955] i8042: [52927] ff -> i8042 (parameter)
[ 53.743877] i8042: [52930] fa <- i8042 (interrupt, 1, 12)
[ 53.844964] i8042: [53031] aa <- i8042 (interrupt, 1, 12)
[ 53.846452] i8042: [53032] 00 <- i8042 (interrupt, 1, 12)
[ 53.846528] i8042: [53033] d4 -> i8042 (command)
[ 53.846718] i8042: [53033] f6 -> i8042 (parameter)
[ 53.849696] i8042: [53036] fa <- i8042 (interrupt, 1, 12)
[ 53.849764] i8042: [53036] d4 -> i8042 (command)
[ 53.849954] i8042: [53036] f5 -> i8042 (parameter)
[ 53.852923] i8042: [53039] fa <- i8042 (interrupt, 1, 12)
[ 53.853004] i8042: [53039] d4 -> i8042 (command)
[ 53.853193] i8042: [53039] e6 -> i8042 (parameter)
[ 53.856048] i8042: [53042] fa <- i8042 (interrupt, 1, 12)
[ 53.856105] i8042: [53042] d4 -> i8042 (command)
[ 53.856293] i8042: [53042] e6 -> i8042 (parameter)
[ 53.859275] i8042: [53045] fa <- i8042 (interrupt, 1, 12)
[ 53.859344] i8042: [53045] d4 -> i8042 (command)
[ 53.859533] i8042: [53046] e6 -> i8042 (parameter)
[ 53.862437] i8042: [53049] fa <- i8042 (interrupt, 1, 12)
[ 53.862490] i8042: [53049] d4 -> i8042 (command)
[ 53.862678] i8042: [53049] e9 -> i8042 (parameter)
[ 53.865667] i8042: [53052] fa <- i8042 (interrupt, 1, 12)
[ 53.867305] i8042: [53053] 3c <- i8042 (interrupt, 1, 12)
[ 53.868919] i8042: [53055] 03 <- i8042 (interrupt, 1, 12)
[ 53.870541] i8042: [53057] 00 <- i8042 (interrupt, 1, 12)
[ 53.870620] i8042: [53057] d4 -> i8042 (command)
[ 53.870808] i8042: [53057] e6 -> i8042 (parameter)
[ 53.873620] i8042: [53060] fa <- i8042 (interrupt, 1, 12)
[ 53.873729] i8042: [53060] d4 -> i8042 (command)
[ 53.873919] i8042: [53060] e8 -> i8042 (parameter)
[ 53.876774] i8042: [53063] fa <- i8042 (interrupt, 1, 12)
[ 53.876837] i8042: [53063] d4 -> i8042 (command)
[ 53.877026] i8042: [53063] 00 -> i8042 (parameter)
[ 53.879962] i8042: [53066] fa <- i8042 (interrupt, 1, 12)
[ 53.880039] i8042: [53066] d4 -> i8042 (command)
[ 53.880284] i8042: [53066] e8 -> i8042 (parameter)
[ 53.883157] i8042: [53069] fa <- i8042 (interrupt, 1, 12)
[ 53.883207] i8042: [53069] d4 -> i8042 (command)
[ 53.883395] i8042: [53069] 00 -> i8042 (parameter)
[ 53.886535] i8042: [53073] fa <- i8042 (interrupt, 1, 12)
[ 53.886604] i8042: [53073] d4 -> i8042 (command)
[ 53.886792] i8042: [53073] e8 -> i8042 (parameter)
[ 53.889549] i8042: [53076] fa <- i8042 (interrupt, 1, 12)
[ 53.889608] i8042: [53076] d4 -> i8042 (command)
[ 53.889796] i8042: [53076] 00 -> i8042 (parameter)
[ 53.892744] i8042: [53079] fa <- i8042 (interrupt, 1, 12)
[ 53.892806] i8042: [53079] d4 -> i8042 (command)
[ 53.892995] i8042: [53079] e8 -> i8042 (parameter)
[ 53.895994] i8042: [53082] fa <- i8042 (interrupt, 1, 12)
[ 53.896067] i8042: [53082] d4 -> i8042 (command)
[ 53.896255] i8042: [53082] 01 -> i8042 (parameter)
[ 53.899173] i8042: [53085] fa <- i8042 (interrupt, 1, 12)
[ 53.899240] i8042: [53085] d4 -> i8042 (command)
[ 53.899429] i8042: [53085] e9 -> i8042 (parameter)
[ 53.902324] i8042: [53088] fa <- i8042 (interrupt, 1, 12)
[ 53.903999] i8042: [53090] 5e <- i8042 (interrupt, 1, 12)
[ 53.905482] i8042: [53092] 0f <- i8042 (interrupt, 1, 12)
[ 53.907061] i8042: [53093] 01 <- i8042 (interrupt, 1, 12)
[ 53.907134] i8042: [53093] d4 -> i8042 (command)
[ 53.907323] i8042: [53093] f8 -> i8042 (parameter)
[ 53.910270] i8042: [53096] fa <- i8042 (interrupt, 1, 12)
[ 53.910330] i8042: [53096] d4 -> i8042 (command)
[ 53.910520] i8042: [53096] 00 -> i8042 (parameter)
[ 53.913460] i8042: [53100] fa <- i8042 (interrupt, 1, 12)
[ 53.913515] i8042: [53100] d4 -> i8042 (command)
[ 53.913703] i8042: [53100] f8 -> i8042 (parameter)
[ 53.916713] i8042: [53103] fa <- i8042 (interrupt, 1, 12)
[ 53.916766] i8042: [53103] d4 -> i8042 (command)
[ 53.916953] i8042: [53103] 07 -> i8042 (parameter)
[ 53.919981] i8042: [53106] fa <- i8042 (interrupt, 1, 12)
[ 53.920053] i8042: [53106] d4 -> i8042 (command)
[ 53.920241] i8042: [53106] f8 -> i8042 (parameter)
[ 53.923066] i8042: [53109] fa <- i8042 (interrupt, 1, 12)
[ 53.923134] i8042: [53109] d4 -> i8042 (command)
[ 53.923322] i8042: [53109] 00 -> i8042 (parameter)
[ 53.926245] i8042: [53112] fa <- i8042 (interrupt, 1, 12)
[ 53.926308] i8042: [53112] d4 -> i8042 (command)
[ 53.926497] i8042: [53113] f8 -> i8042 (parameter)
[ 53.929443] i8042: [53116] fa <- i8042 (interrupt, 1, 12)
[ 53.929512] i8042: [53116] d4 -> i8042 (command)
[ 53.929702] i8042: [53116] 01 -> i8042 (parameter)
[ 53.932627] i8042: [53119] fa <- i8042 (interrupt, 1, 12)
[ 53.932679] i8042: [53119] d4 -> i8042 (command)
[ 53.932868] i8042: [53119] e6 -> i8042 (parameter)
[ 53.935931] i8042: [53122] fa <- i8042 (interrupt, 1, 12)
[ 53.936011] i8042: [53122] d4 -> i8042 (command)
[ 53.936200] i8042: [53122] f3 -> i8042 (parameter)
[ 53.939056] i8042: [53125] fa <- i8042 (interrupt, 1, 12)
[ 53.939115] i8042: [53125] d4 -> i8042 (command)
[ 53.939303] i8042: [53125] 64 -> i8042 (parameter)
[ 53.942216] i8042: [53128] fa <- i8042 (interrupt, 1, 12)
[ 53.942269] i8042: [53128] d4 -> i8042 (command)
[ 53.942513] i8042: [53129] e8 -> i8042 (parameter)
[ 53.945412] i8042: [53131] fa <- i8042 (interrupt, 1, 12)
[ 53.945463] i8042: [53132] d4 -> i8042 (command)
[ 53.945652] i8042: [53132] 03 -> i8042 (parameter)
[ 53.948705] i8042: [53135] fa <- i8042 (interrupt, 1, 12)
[ 53.948773] i8042: [53135] d4 -> i8042 (command)
[ 53.948961] i8042: [53135] e6 -> i8042 (parameter)
[ 53.951933] i8042: [53138] fa <- i8042 (interrupt, 1, 12)
[ 53.952005] i8042: [53138] d4 -> i8042 (command)
[ 53.952193] i8042: [53138] f4 -> i8042 (parameter)
[ 53.955021] i8042: [53141] fa <- i8042 (interrupt, 1, 12)
[ 53.975744] i8042: [53162] 08 <- i8042 (interrupt, 1, 12)
[ 53.977388] i8042: [53164] 00 <- i8042 (interrupt, 1, 12)
[ 53.978974] i8042: [53165] 00 <- i8042 (interrupt, 1, 12)
[ 53.985581] i8042: [53172] 64 <- i8042 (interrupt, 1, 12)
[ 53.987215] i8042: [53173] 01 <- i8042 (interrupt, 1, 12)
[ 53.988755] i8042: [53175] 00 <- i8042 (interrupt, 1, 12)
[ 53.988792] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.990354] i8042: [53176] 10 <- i8042 (interrupt, 1, 12)
[ 53.991904] i8042: [53178] 00 <- i8042 (interrupt, 1, 12)
[ 53.993449] i8042: [53180] 00 <- i8042 (interrupt, 1, 12)
[ 53.995101] i8042: [53181] 64 <- i8042 (interrupt, 1, 12)
[ 53.996655] i8042: [53183] 24 <- i8042 (interrupt, 1, 12)
[ 53.998233] i8042: [53184] a3 <- i8042 (interrupt, 1, 12)
[ 53.998267] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 53.999826] i8042: [53186] 31 <- i8042 (interrupt, 1, 12)
[ 54.001411] i8042: [53187] 22 <- i8042 (interrupt, 1, 12)
[ 54.003033] i8042: [53189] 17 <- i8042 (interrupt, 1, 12)
[ 54.004526] i8042: [53191] 54 <- i8042 (interrupt, 1, 12)
[ 54.006149] i8042: [53192] 24 <- i8042 (interrupt, 1, 12)
[ 54.007737] i8042: [53194] a3 <- i8042 (interrupt, 1, 12)
[ 54.007772] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.009278] i8042: [53195] 31 <- i8042 (interrupt, 1, 12)
[ 54.010943] i8042: [53197] 72 <- i8042 (interrupt, 1, 12)
[ 54.012490] i8042: [53199] 17 <- i8042 (interrupt, 1, 12)
[ 54.014074] i8042: [53200] 54 <- i8042 (interrupt, 1, 12)
[ 54.015612] i8042: [53202] 24 <- i8042 (interrupt, 1, 12)
[ 54.017200] i8042: [53203] df <- i8042 (interrupt, 1, 12)
[ 54.017232] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.018828] i8042: [53205] 31 <- i8042 (interrupt, 1, 12)
[ 54.020363] i8042: [53206] b2 <- i8042 (interrupt, 1, 12)
[ 54.021950] i8042: [53208] 2f <- i8042 (interrupt, 1, 12)
[ 54.023581] i8042: [53210] 54 <- i8042 (interrupt, 1, 12)
[ 54.025147] i8042: [53211] 25 <- i8042 (interrupt, 1, 12)
[ 54.026701] i8042: [53213] 21 <- i8042 (interrupt, 1, 12)
[ 54.026737] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.026753] psmouse serio1: issuing reconnect request
[ 54.026798] i8042: [53213] d4 -> i8042 (command)
[ 54.027044] i8042: [53213] ff -> i8042 (parameter)
[ 54.030007] i8042: [53216] fa <- i8042 (interrupt, 1, 12)
[ 54.130996] i8042: [53317] aa <- i8042 (interrupt, 1, 12)
[ 54.132590] i8042: [53319] 00 <- i8042 (interrupt, 1, 12)
[ 54.132646] i8042: [53319] d4 -> i8042 (command)
[ 54.132836] i8042: [53319] f6 -> i8042 (parameter)
[ 54.135871] i8042: [53322] fa <- i8042 (interrupt, 1, 12)
[ 54.135949] i8042: [53322] d4 -> i8042 (command)
[ 54.136138] i8042: [53322] f5 -> i8042 (parameter)
[ 54.139022] i8042: [53325] fa <- i8042 (interrupt, 1, 12)
[ 54.139086] i8042: [53325] d4 -> i8042 (command)
[ 54.139276] i8042: [53325] e6 -> i8042 (parameter)
[ 54.142252] i8042: [53328] fa <- i8042 (interrupt, 1, 12)
[ 54.142366] i8042: [53328] d4 -> i8042 (command)
[ 54.142556] i8042: [53329] e6 -> i8042 (parameter)
[ 54.145444] i8042: [53332] fa <- i8042 (interrupt, 1, 12)
[ 54.145536] i8042: [53332] d4 -> i8042 (command)
[ 54.145725] i8042: [53332] e6 -> i8042 (parameter)
[ 54.148565] i8042: [53335] fa <- i8042 (interrupt, 1, 12)
[ 54.148623] i8042: [53335] d4 -> i8042 (command)
[ 54.148813] i8042: [53335] e9 -> i8042 (parameter)
[ 54.151857] i8042: [53338] fa <- i8042 (interrupt, 1, 12)
[ 54.153351] i8042: [53339] 3c <- i8042 (interrupt, 1, 12)
[ 54.154948] i8042: [53341] 03 <- i8042 (interrupt, 1, 12)
[ 54.156495] i8042: [53343] 00 <- i8042 (interrupt, 1, 12)
[ 54.156610] i8042: [53343] d4 -> i8042 (command)
[ 54.156801] i8042: [53343] e6 -> i8042 (parameter)
[ 54.159706] i8042: [53346] fa <- i8042 (interrupt, 1, 12)
[ 54.159768] i8042: [53346] d4 -> i8042 (command)
[ 54.159958] i8042: [53346] e8 -> i8042 (parameter)
[ 54.162901] i8042: [53349] fa <- i8042 (interrupt, 1, 12)
[ 54.162965] i8042: [53349] d4 -> i8042 (command)
[ 54.163211] i8042: [53349] 00 -> i8042 (parameter)
[ 54.166094] i8042: [53352] fa <- i8042 (interrupt, 1, 12)
[ 54.166161] i8042: [53352] d4 -> i8042 (command)
[ 54.166350] i8042: [53352] e8 -> i8042 (parameter)
[ 54.169364] i8042: [53355] fa <- i8042 (interrupt, 1, 12)
[ 54.169554] i8042: [53356] d4 -> i8042 (command)
[ 54.169745] i8042: [53356] 00 -> i8042 (parameter)
[ 54.172488] i8042: [53359] fa <- i8042 (interrupt, 1, 12)
[ 54.172579] i8042: [53359] d4 -> i8042 (command)
[ 54.172769] i8042: [53359] e8 -> i8042 (parameter)
[ 54.175772] i8042: [53362] fa <- i8042 (interrupt, 1, 12)
[ 54.175858] i8042: [53362] d4 -> i8042 (command)
[ 54.176048] i8042: [53362] 00 -> i8042 (parameter)
[ 54.178945] i8042: [53365] fa <- i8042 (interrupt, 1, 12)
[ 54.179057] i8042: [53365] d4 -> i8042 (command)
[ 54.179246] i8042: [53365] e8 -> i8042 (parameter)
[ 54.182070] i8042: [53368] fa <- i8042 (interrupt, 1, 12)
[ 54.182112] i8042: [53368] d4 -> i8042 (command)
[ 54.182353] i8042: [53368] 01 -> i8042 (parameter)
[ 54.185334] i8042: [53371] fa <- i8042 (interrupt, 1, 12)
[ 54.185421] i8042: [53372] d4 -> i8042 (command)
[ 54.185621] i8042: [53372] e9 -> i8042 (parameter)
[ 54.188533] i8042: [53375] fa <- i8042 (interrupt, 1, 12)
[ 54.190085] i8042: [53376] 5e <- i8042 (interrupt, 1, 12)
[ 54.191615] i8042: [53378] 0f <- i8042 (interrupt, 1, 12)
[ 54.193195] i8042: [53379] 01 <- i8042 (interrupt, 1, 12)
[ 54.193246] i8042: [53379] d4 -> i8042 (command)
[ 54.193431] i8042: [53379] f8 -> i8042 (parameter)
[ 54.196507] i8042: [53383] fa <- i8042 (interrupt, 1, 12)
[ 54.196596] i8042: [53383] d4 -> i8042 (command)
[ 54.196788] i8042: [53383] 00 -> i8042 (parameter)
[ 54.199600] i8042: [53386] fa <- i8042 (interrupt, 1, 12)
[ 54.199672] i8042: [53386] d4 -> i8042 (command)
[ 54.199872] i8042: [53386] f8 -> i8042 (parameter)
[ 54.202899] i8042: [53389] fa <- i8042 (interrupt, 1, 12)
[ 54.202972] i8042: [53389] d4 -> i8042 (command)
[ 54.203159] i8042: [53389] 07 -> i8042 (parameter)
[ 54.206055] i8042: [53392] fa <- i8042 (interrupt, 1, 12)
[ 54.206112] i8042: [53392] d4 -> i8042 (command)
[ 54.206297] i8042: [53392] f8 -> i8042 (parameter)
[ 54.209207] i8042: [53395] fa <- i8042 (interrupt, 1, 12)
[ 54.209268] i8042: [53395] d4 -> i8042 (command)
[ 54.209458] i8042: [53396] 00 -> i8042 (parameter)
[ 54.212385] i8042: [53398] fa <- i8042 (interrupt, 1, 12)
[ 54.212481] i8042: [53399] d4 -> i8042 (command)
[ 54.212727] i8042: [53399] f8 -> i8042 (parameter)
[ 54.215568] i8042: [53402] fa <- i8042 (interrupt, 1, 12)
[ 54.215623] i8042: [53402] d4 -> i8042 (command)
[ 54.215811] i8042: [53402] 01 -> i8042 (parameter)
[ 54.218873] i8042: [53405] fa <- i8042 (interrupt, 1, 12)
[ 54.218956] i8042: [53405] d4 -> i8042 (command)
[ 54.219145] i8042: [53405] e6 -> i8042 (parameter)
[ 54.222025] i8042: [53408] fa <- i8042 (interrupt, 1, 12)
[ 54.222108] i8042: [53408] d4 -> i8042 (command)
[ 54.222297] i8042: [53408] f3 -> i8042 (parameter)
[ 54.225238] i8042: [53411] fa <- i8042 (interrupt, 1, 12)
[ 54.225316] i8042: [53411] d4 -> i8042 (command)
[ 54.225504] i8042: [53411] 64 -> i8042 (parameter)
[ 54.228347] i8042: [53414] fa <- i8042 (interrupt, 1, 12)
[ 54.228449] i8042: [53415] d4 -> i8042 (command)
[ 54.228639] i8042: [53415] e8 -> i8042 (parameter)
[ 54.231583] i8042: [53418] fa <- i8042 (interrupt, 1, 12)
[ 54.231643] i8042: [53418] d4 -> i8042 (command)
[ 54.231831] i8042: [53418] 03 -> i8042 (parameter)
[ 54.234805] i8042: [53421] fa <- i8042 (interrupt, 1, 12)
[ 54.234881] i8042: [53421] d4 -> i8042 (command)
[ 54.235070] i8042: [53421] e6 -> i8042 (parameter)
[ 54.237966] i8042: [53424] fa <- i8042 (interrupt, 1, 12)
[ 54.238021] i8042: [53424] d4 -> i8042 (command)
[ 54.238211] i8042: [53424] f4 -> i8042 (parameter)
[ 54.241163] i8042: [53427] fa <- i8042 (interrupt, 1, 12)
[ 54.262368] i8042: [53448] 08 <- i8042 (interrupt, 1, 12)
[ 54.263954] i8042: [53450] 00 <- i8042 (interrupt, 1, 12)
[ 54.265537] i8042: [53452] 00 <- i8042 (interrupt, 1, 12)
[ 54.271659] i8042: [53458] 54 <- i8042 (interrupt, 1, 12)
[ 54.273250] i8042: [53459] 01 <- i8042 (interrupt, 1, 12)
[ 54.274832] i8042: [53461] 00 <- i8042 (interrupt, 1, 12)
[ 54.274865] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.276413] i8042: [53463] 10 <- i8042 (interrupt, 1, 12)
[ 54.277998] i8042: [53464] 00 <- i8042 (interrupt, 1, 12)
[ 54.279579] i8042: [53466] 00 <- i8042 (interrupt, 1, 12)
[ 54.281164] i8042: [53467] 54 <- i8042 (interrupt, 1, 12)
[ 54.282742] i8042: [53469] 11 <- i8042 (interrupt, 1, 12)
[ 54.284328] i8042: [53470] 9c <- i8042 (interrupt, 1, 12)
[ 54.284356] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.285910] i8042: [53472] 31 <- i8042 (interrupt, 1, 12)
[ 54.287537] i8042: [53474] d1 <- i8042 (interrupt, 1, 12)
[ 54.289114] i8042: [53475] f2 <- i8042 (interrupt, 1, 12)
[ 54.290658] i8042: [53477] 54 <- i8042 (interrupt, 1, 12)
[ 54.292243] i8042: [53478] 21 <- i8042 (interrupt, 1, 12)
[ 54.293831] i8042: [53480] 9c <- i8042 (interrupt, 1, 12)
[ 54.293860] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.295444] i8042: [53482] 31 <- i8042 (interrupt, 1, 12)
[ 54.296998] i8042: [53483] 21 <- i8042 (interrupt, 1, 12)
[ 54.298712] i8042: [53485] f2 <- i8042 (interrupt, 1, 12)
[ 54.300213] i8042: [53486] 54 <- i8042 (interrupt, 1, 12)
[ 54.301835] i8042: [53488] 21 <- i8042 (interrupt, 1, 12)
[ 54.303457] i8042: [53490] 9c <- i8042 (interrupt, 1, 12)
[ 54.303493] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.304908] i8042: [53491] 31 <- i8042 (interrupt, 1, 12)
[ 54.306501] i8042: [53493] 61 <- i8042 (interrupt, 1, 12)
[ 54.308073] i8042: [53494] f2 <- i8042 (interrupt, 1, 12)
[ 54.309697] i8042: [53496] 54 <- i8042 (interrupt, 1, 12)
[ 54.311271] i8042: [53497] 21 <- i8042 (interrupt, 1, 12)
[ 54.312827] i8042: [53499] ab <- i8042 (interrupt, 1, 12)
[ 54.312860] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.312875] psmouse serio1: issuing reconnect request
[ 54.312916] i8042: [53499] d4 -> i8042 (command)
[ 54.313105] i8042: [53499] ff -> i8042 (parameter)
[ 54.316040] i8042: [53502] fa <- i8042 (interrupt, 1, 12)
[ 54.417073] i8042: [53603] aa <- i8042 (interrupt, 1, 12)
[ 54.418647] i8042: [53605] 00 <- i8042 (interrupt, 1, 12)
[ 54.418682] i8042: [53605] d4 -> i8042 (command)
[ 54.418867] i8042: [53605] f6 -> i8042 (parameter)
[ 54.421825] i8042: [53608] fa <- i8042 (interrupt, 1, 12)
[ 54.422482] i8042: [53609] d4 -> i8042 (command)
[ 54.422673] i8042: [53609] f5 -> i8042 (parameter)
[ 54.425532] i8042: [53612] fa <- i8042 (interrupt, 1, 12)
[ 54.425791] i8042: [53612] d4 -> i8042 (command)
[ 54.425977] i8042: [53612] e6 -> i8042 (parameter)
[ 54.428732] i8042: [53615] fa <- i8042 (interrupt, 1, 12)
[ 54.428774] i8042: [53615] d4 -> i8042 (command)
[ 54.429018] i8042: [53615] e6 -> i8042 (parameter)
[ 54.431986] i8042: [53618] fa <- i8042 (interrupt, 1, 12)
[ 54.432043] i8042: [53618] d4 -> i8042 (command)
[ 54.432284] i8042: [53618] e6 -> i8042 (parameter)
[ 54.435109] i8042: [53621] fa <- i8042 (interrupt, 1, 12)
[ 54.435145] i8042: [53621] d4 -> i8042 (command)
[ 54.435385] i8042: [53622] e9 -> i8042 (parameter)
[ 54.438297] i8042: [53624] fa <- i8042 (interrupt, 1, 12)
[ 54.439868] i8042: [53626] 3c <- i8042 (interrupt, 1, 12)
[ 54.441452] i8042: [53628] 03 <- i8042 (interrupt, 1, 12)
[ 54.443098] i8042: [53629] 00 <- i8042 (interrupt, 1, 12)
[ 54.443178] i8042: [53629] d4 -> i8042 (command)
[ 54.443365] i8042: [53629] e6 -> i8042 (parameter)
[ 54.446256] i8042: [53632] fa <- i8042 (interrupt, 1, 12)
[ 54.446372] i8042: [53632] d4 -> i8042 (command)
[ 54.446559] i8042: [53633] e8 -> i8042 (parameter)
[ 54.449480] i8042: [53636] fa <- i8042 (interrupt, 1, 12)
[ 54.449514] i8042: [53636] d4 -> i8042 (command)
[ 54.449755] i8042: [53636] 00 -> i8042 (parameter)
[ 54.452704] i8042: [53639] fa <- i8042 (interrupt, 1, 12)
[ 54.452746] i8042: [53639] d4 -> i8042 (command)
[ 54.452988] i8042: [53639] e8 -> i8042 (parameter)
[ 54.455898] i8042: [53642] fa <- i8042 (interrupt, 1, 12)
[ 54.455943] i8042: [53642] d4 -> i8042 (command)
[ 54.456184] i8042: [53642] 00 -> i8042 (parameter)
[ 54.459057] i8042: [53645] fa <- i8042 (interrupt, 1, 12)
[ 54.459097] i8042: [53645] d4 -> i8042 (command)
[ 54.459281] i8042: [53645] e8 -> i8042 (parameter)
[ 54.462206] i8042: [53648] fa <- i8042 (interrupt, 1, 12)
[ 54.462300] i8042: [53648] d4 -> i8042 (command)
[ 54.462485] i8042: [53649] 00 -> i8042 (parameter)
[ 54.465412] i8042: [53651] fa <- i8042 (interrupt, 1, 12)
[ 54.465447] i8042: [53652] d4 -> i8042 (command)
[ 54.465689] i8042: [53652] e8 -> i8042 (parameter)
[ 54.468658] i8042: [53655] fa <- i8042 (interrupt, 1, 12)
[ 54.468730] i8042: [53655] d4 -> i8042 (command)
[ 54.468916] i8042: [53655] 01 -> i8042 (parameter)
[ 54.471789] i8042: [53658] fa <- i8042 (interrupt, 1, 12)
[ 54.471978] i8042: [53658] d4 -> i8042 (command)
[ 54.472165] i8042: [53658] e9 -> i8042 (parameter)
[ 54.474981] i8042: [53661] fa <- i8042 (interrupt, 1, 12)
[ 54.476549] i8042: [53663] 5e <- i8042 (interrupt, 1, 12)
[ 54.478133] i8042: [53664] 0f <- i8042 (interrupt, 1, 12)
[ 54.479724] i8042: [53666] 01 <- i8042 (interrupt, 1, 12)
[ 54.479769] i8042: [53666] d4 -> i8042 (command)
[ 54.479954] i8042: [53666] f8 -> i8042 (parameter)
[ 54.482929] i8042: [53669] fa <- i8042 (interrupt, 1, 12)
[ 54.482967] i8042: [53669] d4 -> i8042 (command)
[ 54.483152] i8042: [53669] 00 -> i8042 (parameter)
[ 54.486128] i8042: [53672] fa <- i8042 (interrupt, 1, 12)
[ 54.486171] i8042: [53672] d4 -> i8042 (command)
[ 54.486412] i8042: [53673] f8 -> i8042 (parameter)
[ 54.489325] i8042: [53675] fa <- i8042 (interrupt, 1, 12)
[ 54.489379] i8042: [53676] d4 -> i8042 (command)
[ 54.489564] i8042: [53676] 07 -> i8042 (parameter)
[ 54.492511] i8042: [53679] fa <- i8042 (interrupt, 1, 12)
[ 54.492562] i8042: [53679] d4 -> i8042 (command)
[ 54.492803] i8042: [53679] f8 -> i8042 (parameter)
[ 54.495710] i8042: [53682] fa <- i8042 (interrupt, 1, 12)
[ 54.496635] i8042: [53683] d4 -> i8042 (command)
[ 54.496829] i8042: [53683] 00 -> i8042 (parameter)
[ 54.499410] i8042: [53685] fa <- i8042 (interrupt, 1, 12)
[ 54.499949] i8042: [53686] d4 -> i8042 (command)
[ 54.500140] i8042: [53686] f8 -> i8042 (parameter)
[ 54.503179] i8042: [53689] fa <- i8042 (interrupt, 1, 12)
[ 54.503361] i8042: [53689] d4 -> i8042 (command)
[ 54.503547] i8042: [53690] 01 -> i8042 (parameter)
[ 54.506368] i8042: [53692] fa <- i8042 (interrupt, 1, 12)
[ 54.506542] i8042: [53693] d4 -> i8042 (command)
[ 54.506729] i8042: [53693] e6 -> i8042 (parameter)
[ 54.509581] i8042: [53696] fa <- i8042 (interrupt, 1, 12)
[ 54.509763] i8042: [53696] d4 -> i8042 (command)
[ 54.509949] i8042: [53696] f3 -> i8042 (parameter)
[ 54.512756] i8042: [53699] fa <- i8042 (interrupt, 1, 12)
[ 54.512828] i8042: [53699] d4 -> i8042 (command)
[ 54.513013] i8042: [53699] 64 -> i8042 (parameter)
[ 54.515887] i8042: [53702] fa <- i8042 (interrupt, 1, 12)
[ 54.515933] i8042: [53702] d4 -> i8042 (command)
[ 54.516118] i8042: [53702] e8 -> i8042 (parameter)
[ 54.519084] i8042: [53705] fa <- i8042 (interrupt, 1, 12)
[ 54.519122] i8042: [53705] d4 -> i8042 (command)
[ 54.519364] i8042: [53705] 03 -> i8042 (parameter)
[ 54.522283] i8042: [53708] fa <- i8042 (interrupt, 1, 12)
[ 54.522325] i8042: [53708] d4 -> i8042 (command)
[ 54.522566] i8042: [53709] e6 -> i8042 (parameter)
[ 54.525471] i8042: [53712] fa <- i8042 (interrupt, 1, 12)
[ 54.525508] i8042: [53712] d4 -> i8042 (command)
[ 54.525749] i8042: [53712] f4 -> i8042 (parameter)
[ 54.528729] i8042: [53715] fa <- i8042 (interrupt, 1, 12)
[ 54.540939] i8042: [53727] 08 <- i8042 (interrupt, 1, 12)
[ 54.542531] i8042: [53729] 00 <- i8042 (interrupt, 1, 12)
[ 54.544122] i8042: [53730] 00 <- i8042 (interrupt, 1, 12)
[ 54.550129] i8042: [53736] 54 <- i8042 (interrupt, 1, 12)
[ 54.551709] i8042: [53738] 01 <- i8042 (interrupt, 1, 12)
[ 54.553294] i8042: [53739] 00 <- i8042 (interrupt, 1, 12)
[ 54.553317] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.554877] i8042: [53741] 10 <- i8042 (interrupt, 1, 12)
[ 54.556458] i8042: [53743] 00 <- i8042 (interrupt, 1, 12)
[ 54.558075] i8042: [53744] 00 <- i8042 (interrupt, 1, 12)
[ 54.559656] i8042: [53746] 54 <- i8042 (interrupt, 1, 12)
[ 54.561235] i8042: [53747] 13 <- i8042 (interrupt, 1, 12)
[ 54.562915] i8042: [53749] 6b <- i8042 (interrupt, 1, 12)
[ 54.562951] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.564411] i8042: [53751] 31 <- i8042 (interrupt, 1, 12)
[ 54.566059] i8042: [53752] 71 <- i8042 (interrupt, 1, 12)
[ 54.567544] i8042: [53754] e2 <- i8042 (interrupt, 1, 12)
[ 54.569151] i8042: [53755] 54 <- i8042 (interrupt, 1, 12)
[ 54.570810] i8042: [53757] 23 <- i8042 (interrupt, 1, 12)
[ 54.572449] i8042: [53759] 6b <- i8042 (interrupt, 1, 12)
[ 54.572481] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.573894] i8042: [53760] 31 <- i8042 (interrupt, 1, 12)
[ 54.575478] i8042: [53762] 01 <- i8042 (interrupt, 1, 12)
[ 54.577057] i8042: [53763] e2 <- i8042 (interrupt, 1, 12)
[ 54.578722] i8042: [53765] 54 <- i8042 (interrupt, 1, 12)
[ 54.580259] i8042: [53766] 22 <- i8042 (interrupt, 1, 12)
[ 54.581791] i8042: [53768] f0 <- i8042 (interrupt, 1, 12)
[ 54.581815] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.583363] i8042: [53769] 31 <- i8042 (interrupt, 1, 12)
[ 54.585007] i8042: [53771] 71 <- i8042 (interrupt, 1, 12)
[ 54.586535] i8042: [53773] de <- i8042 (interrupt, 1, 12)
[ 54.588171] i8042: [53774] 54 <- i8042 (interrupt, 1, 12)
[ 54.589754] i8042: [53776] 22 <- i8042 (interrupt, 1, 12)
[ 54.591339] i8042: [53777] df <- i8042 (interrupt, 1, 12)
[ 54.591365] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.591374] psmouse serio1: issuing reconnect request
[ 54.591445] i8042: [53778] d4 -> i8042 (command)
[ 54.591629] i8042: [53778] ff -> i8042 (parameter)
[ 54.594639] i8042: [53781] fa <- i8042 (interrupt, 1, 12)
[ 54.695585] i8042: [53882] aa <- i8042 (interrupt, 1, 12)
[ 54.697161] i8042: [53883] 00 <- i8042 (interrupt, 1, 12)
[ 54.697211] i8042: [53883] d4 -> i8042 (command)
[ 54.697395] i8042: [53883] f6 -> i8042 (parameter)
[ 54.700369] i8042: [53886] fa <- i8042 (interrupt, 1, 12)
[ 54.700428] i8042: [53887] d4 -> i8042 (command)
[ 54.700614] i8042: [53887] f5 -> i8042 (parameter)
[ 54.703595] i8042: [53890] fa <- i8042 (interrupt, 1, 12)
[ 54.703664] i8042: [53890] d4 -> i8042 (command)
[ 54.703851] i8042: [53890] e6 -> i8042 (parameter)
[ 54.706785] i8042: [53893] fa <- i8042 (interrupt, 1, 12)
[ 54.706852] i8042: [53893] d4 -> i8042 (command)
[ 54.707038] i8042: [53893] e6 -> i8042 (parameter)
[ 54.709981] i8042: [53896] fa <- i8042 (interrupt, 1, 12)
[ 54.710134] i8042: [53896] d4 -> i8042 (command)
[ 54.710320] i8042: [53896] e6 -> i8042 (parameter)
[ 54.713188] i8042: [53899] fa <- i8042 (interrupt, 1, 12)
[ 54.713344] i8042: [53899] d4 -> i8042 (command)
[ 54.713588] i8042: [53900] e9 -> i8042 (parameter)
[ 54.716408] i8042: [53903] fa <- i8042 (interrupt, 1, 12)
[ 54.717970] i8042: [53904] 3c <- i8042 (interrupt, 1, 12)
[ 54.719532] i8042: [53906] 03 <- i8042 (interrupt, 1, 12)
[ 54.721102] i8042: [53907] 00 <- i8042 (interrupt, 1, 12)
[ 54.721256] i8042: [53907] d4 -> i8042 (command)
[ 54.721451] i8042: [53908] e6 -> i8042 (parameter)
[ 54.724279] i8042: [53910] fa <- i8042 (interrupt, 1, 12)
[ 54.724313] i8042: [53910] d4 -> i8042 (command)
[ 54.724554] i8042: [53911] e8 -> i8042 (parameter)
[ 54.727505] i8042: [53914] fa <- i8042 (interrupt, 1, 12)
[ 54.727540] i8042: [53914] d4 -> i8042 (command)
[ 54.727725] i8042: [53914] 00 -> i8042 (parameter)
[ 54.730727] i8042: [53917] fa <- i8042 (interrupt, 1, 12)
[ 54.730784] i8042: [53917] d4 -> i8042 (command)
[ 54.730968] i8042: [53917] e8 -> i8042 (parameter)
[ 54.733867] i8042: [53920] fa <- i8042 (interrupt, 1, 12)
[ 54.733911] i8042: [53920] d4 -> i8042 (command)
[ 54.734152] i8042: [53920] 00 -> i8042 (parameter)
[ 54.737129] i8042: [53923] fa <- i8042 (interrupt, 1, 12)
[ 54.737185] i8042: [53923] d4 -> i8042 (command)
[ 54.737370] i8042: [53923] e8 -> i8042 (parameter)
[ 54.740258] i8042: [53926] fa <- i8042 (interrupt, 1, 12)
[ 54.740745] i8042: [53927] d4 -> i8042 (command)
[ 54.740991] i8042: [53927] 00 -> i8042 (parameter)
[ 54.744017] i8042: [53930] fa <- i8042 (interrupt, 1, 12)
[ 54.744072] i8042: [53930] d4 -> i8042 (command)
[ 54.744257] i8042: [53930] e8 -> i8042 (parameter)
[ 54.747151] i8042: [53933] fa <- i8042 (interrupt, 1, 12)
[ 54.747198] i8042: [53933] d4 -> i8042 (command)
[ 54.747439] i8042: [53933] 01 -> i8042 (parameter)
[ 54.750433] i8042: [53937] fa <- i8042 (interrupt, 1, 12)
[ 54.750501] i8042: [53937] d4 -> i8042 (command)
[ 54.750686] i8042: [53937] e9 -> i8042 (parameter)
[ 54.753536] i8042: [53940] fa <- i8042 (interrupt, 1, 12)
[ 54.755105] i8042: [53941] 5e <- i8042 (interrupt, 1, 12)
[ 54.756750] i8042: [53943] 0f <- i8042 (interrupt, 1, 12)
[ 54.758273] i8042: [53944] 01 <- i8042 (interrupt, 1, 12)
[ 54.758349] i8042: [53944] d4 -> i8042 (command)
[ 54.758535] i8042: [53944] f8 -> i8042 (parameter)
[ 54.761491] i8042: [53948] fa <- i8042 (interrupt, 1, 12)
[ 54.761539] i8042: [53948] d4 -> i8042 (command)
[ 54.761725] i8042: [53948] 00 -> i8042 (parameter)
[ 54.764677] i8042: [53951] fa <- i8042 (interrupt, 1, 12)
[ 54.764724] i8042: [53951] d4 -> i8042 (command)
[ 54.764966] i8042: [53951] f8 -> i8042 (parameter)
[ 54.767906] i8042: [53954] fa <- i8042 (interrupt, 1, 12)
[ 54.767970] i8042: [53954] d4 -> i8042 (command)
[ 54.768211] i8042: [53954] 07 -> i8042 (parameter)
[ 54.771066] i8042: [53957] fa <- i8042 (interrupt, 1, 12)
[ 54.771119] i8042: [53957] d4 -> i8042 (command)
[ 54.771361] i8042: [53957] f8 -> i8042 (parameter)
[ 54.774326] i8042: [53960] fa <- i8042 (interrupt, 1, 12)
[ 54.774415] i8042: [53961] d4 -> i8042 (command)
[ 54.774601] i8042: [53961] 00 -> i8042 (parameter)
[ 54.777455] i8042: [53964] fa <- i8042 (interrupt, 1, 12)
[ 54.777496] i8042: [53964] d4 -> i8042 (command)
[ 54.777738] i8042: [53964] f8 -> i8042 (parameter)
[ 54.780720] i8042: [53967] fa <- i8042 (interrupt, 1, 12)
[ 54.780801] i8042: [53967] d4 -> i8042 (command)
[ 54.780987] i8042: [53967] 01 -> i8042 (parameter)
[ 54.783928] i8042: [53970] fa <- i8042 (interrupt, 1, 12)
[ 54.783994] i8042: [53970] d4 -> i8042 (command)
[ 54.784179] i8042: [53970] e6 -> i8042 (parameter)
[ 54.787074] i8042: [53973] fa <- i8042 (interrupt, 1, 12)
[ 54.787141] i8042: [53973] d4 -> i8042 (command)
[ 54.787328] i8042: [53973] f3 -> i8042 (parameter)
[ 54.790257] i8042: [53976] fa <- i8042 (interrupt, 1, 12)
[ 54.790327] i8042: [53976] d4 -> i8042 (command)
[ 54.790513] i8042: [53977] 64 -> i8042 (parameter)
[ 54.793477] i8042: [53980] fa <- i8042 (interrupt, 1, 12)
[ 54.793542] i8042: [53980] d4 -> i8042 (command)
[ 54.793728] i8042: [53980] e8 -> i8042 (parameter)
[ 54.796686] i8042: [53983] fa <- i8042 (interrupt, 1, 12)
[ 54.796759] i8042: [53983] d4 -> i8042 (command)
[ 54.796946] i8042: [53983] 03 -> i8042 (parameter)
[ 54.799850] i8042: [53986] fa <- i8042 (interrupt, 1, 12)
[ 54.799930] i8042: [53986] d4 -> i8042 (command)
[ 54.800116] i8042: [53986] e6 -> i8042 (parameter)
[ 54.803072] i8042: [53989] fa <- i8042 (interrupt, 1, 12)
[ 54.803153] i8042: [53989] d4 -> i8042 (command)
[ 54.803339] i8042: [53989] f4 -> i8042 (parameter)
[ 54.806264] i8042: [53992] fa <- i8042 (interrupt, 1, 12)
[ 54.827069] i8042: [54013] 08 <- i8042 (interrupt, 1, 12)
[ 54.828532] i8042: [54015] 00 <- i8042 (interrupt, 1, 12)
[ 54.830213] i8042: [54016] 00 <- i8042 (interrupt, 1, 12)
[ 54.836848] i8042: [54023] 64 <- i8042 (interrupt, 1, 12)
[ 54.838478] i8042: [54025] 01 <- i8042 (interrupt, 1, 12)
[ 54.839998] i8042: [54026] 00 <- i8042 (interrupt, 1, 12)
[ 54.840037] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.841577] i8042: [54028] 10 <- i8042 (interrupt, 1, 12)
[ 54.843197] i8042: [54029] 00 <- i8042 (interrupt, 1, 12)
[ 54.844764] i8042: [54031] 00 <- i8042 (interrupt, 1, 12)
[ 54.846363] i8042: [54032] 64 <- i8042 (interrupt, 1, 12)
[ 54.847939] i8042: [54034] 25 <- i8042 (interrupt, 1, 12)
[ 54.849515] i8042: [54036] 48 <- i8042 (interrupt, 1, 12)
[ 54.849553] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.851104] i8042: [54037] 31 <- i8042 (interrupt, 1, 12)
[ 54.852605] i8042: [54039] 92 <- i8042 (interrupt, 1, 12)
[ 54.854280] i8042: [54040] 51 <- i8042 (interrupt, 1, 12)
[ 54.855861] i8042: [54042] 64 <- i8042 (interrupt, 1, 12)
[ 54.857445] i8042: [54044] 25 <- i8042 (interrupt, 1, 12)
[ 54.859016] i8042: [54045] 48 <- i8042 (interrupt, 1, 12)
[ 54.859056] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.860621] i8042: [54047] 31 <- i8042 (interrupt, 1, 12)
[ 54.862192] i8042: [54048] e2 <- i8042 (interrupt, 1, 12)
[ 54.863775] i8042: [54050] 51 <- i8042 (interrupt, 1, 12)
[ 54.865351] i8042: [54051] 64 <- i8042 (interrupt, 1, 12)
[ 54.866931] i8042: [54053] 35 <- i8042 (interrupt, 1, 12)
[ 54.868515] i8042: [54055] 48 <- i8042 (interrupt, 1, 12)
[ 54.868553] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.870097] i8042: [54056] 31 <- i8042 (interrupt, 1, 12)
[ 54.871648] i8042: [54058] 22 <- i8042 (interrupt, 1, 12)
[ 54.873261] i8042: [54059] 51 <- i8042 (interrupt, 1, 12)
[ 54.874838] i8042: [54061] 64 <- i8042 (interrupt, 1, 12)
[ 54.876437] i8042: [54063] 35 <- i8042 (interrupt, 1, 12)
[ 54.878017] i8042: [54064] 48 <- i8042 (interrupt, 1, 12)
[ 54.878056] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 54.878074] psmouse serio1: issuing reconnect request
[ 54.878159] i8042: [54064] d4 -> i8042 (command)
[ 54.878348] i8042: [54064] ff -> i8042 (parameter)
[ 54.881233] i8042: [54067] fa <- i8042 (interrupt, 1, 12)
[ 54.982187] i8042: [54168] aa <- i8042 (interrupt, 1, 12)
[ 54.983778] i8042: [54170] 00 <- i8042 (interrupt, 1, 12)
[ 54.983877] i8042: [54170] d4 -> i8042 (command)
[ 54.984066] i8042: [54170] f6 -> i8042 (parameter)
[ 54.986939] i8042: [54173] fa <- i8042 (interrupt, 1, 12)
[ 54.986980] i8042: [54173] d4 -> i8042 (command)
[ 54.987165] i8042: [54173] f5 -> i8042 (parameter)
[ 54.990161] i8042: [54176] fa <- i8042 (interrupt, 1, 12)
[ 54.990268] i8042: [54176] d4 -> i8042 (command)
[ 54.990457] i8042: [54177] e6 -> i8042 (parameter)
[ 54.993402] i8042: [54180] fa <- i8042 (interrupt, 1, 12)
[ 54.993498] i8042: [54180] d4 -> i8042 (command)
[ 54.993745] i8042: [54180] e6 -> i8042 (parameter)
[ 54.996521] i8042: [54183] fa <- i8042 (interrupt, 1, 12)
[ 54.996623] i8042: [54183] d4 -> i8042 (command)
[ 54.996813] i8042: [54183] e6 -> i8042 (parameter)
[ 54.999769] i8042: [54186] fa <- i8042 (interrupt, 1, 12)
[ 54.999934] i8042: [54186] d4 -> i8042 (command)
[ 55.000125] i8042: [54186] e9 -> i8042 (parameter)
[ 55.002996] i8042: [54189] fa <- i8042 (interrupt, 1, 12)
[ 55.004552] i8042: [54191] 3c <- i8042 (interrupt, 1, 12)
[ 55.006130] i8042: [54192] 03 <- i8042 (interrupt, 1, 12)
[ 55.007687] i8042: [54194] 00 <- i8042 (interrupt, 1, 12)
[ 55.007790] i8042: [54194] d4 -> i8042 (command)
[ 55.007979] i8042: [54194] e6 -> i8042 (parameter)
[ 55.010930] i8042: [54197] fa <- i8042 (interrupt, 1, 12)
[ 55.011040] i8042: [54197] d4 -> i8042 (command)
[ 55.011286] i8042: [54197] e8 -> i8042 (parameter)
[ 55.014114] i8042: [54200] fa <- i8042 (interrupt, 1, 12)
[ 55.014214] i8042: [54200] d4 -> i8042 (command)
[ 55.014460] i8042: [54201] 00 -> i8042 (parameter)
[ 55.017319] i8042: [54203] fa <- i8042 (interrupt, 1, 12)
[ 55.017450] i8042: [54204] d4 -> i8042 (command)
[ 55.017635] i8042: [54204] e8 -> i8042 (parameter)
[ 55.020536] i8042: [54207] fa <- i8042 (interrupt, 1, 12)
[ 55.020608] i8042: [54207] d4 -> i8042 (command)
[ 55.020797] i8042: [54207] 00 -> i8042 (parameter)
[ 55.023642] i8042: [54210] fa <- i8042 (interrupt, 1, 12)
[ 55.023715] i8042: [54210] d4 -> i8042 (command)
[ 55.023900] i8042: [54210] e8 -> i8042 (parameter)
[ 55.026927] i8042: [54213] fa <- i8042 (interrupt, 1, 12)
[ 55.026992] i8042: [54213] d4 -> i8042 (command)
[ 55.027177] i8042: [54213] 00 -> i8042 (parameter)
[ 55.030104] i8042: [54216] fa <- i8042 (interrupt, 1, 12)
[ 55.030225] i8042: [54216] d4 -> i8042 (command)
[ 55.030470] i8042: [54217] e8 -> i8042 (parameter)
[ 55.033288] i8042: [54219] fa <- i8042 (interrupt, 1, 12)
[ 55.033424] i8042: [54220] d4 -> i8042 (command)
[ 55.033616] i8042: [54220] 01 -> i8042 (parameter)
[ 55.036481] i8042: [54223] fa <- i8042 (interrupt, 1, 12)
[ 55.036583] i8042: [54223] d4 -> i8042 (command)
[ 55.036773] i8042: [54223] e9 -> i8042 (parameter)
[ 55.039682] i8042: [54226] fa <- i8042 (interrupt, 1, 12)
[ 55.041244] i8042: [54227] 5e <- i8042 (interrupt, 1, 12)
[ 55.042820] i8042: [54229] 0f <- i8042 (interrupt, 1, 12)
[ 55.044380] i8042: [54230] 01 <- i8042 (interrupt, 1, 12)
[ 55.044473] i8042: [54231] d4 -> i8042 (command)
[ 55.044658] i8042: [54231] f8 -> i8042 (parameter)
[ 55.047596] i8042: [54234] fa <- i8042 (interrupt, 1, 12)
[ 55.047709] i8042: [54234] d4 -> i8042 (command)
[ 55.047898] i8042: [54234] 00 -> i8042 (parameter)
[ 55.050819] i8042: [54237] fa <- i8042 (interrupt, 1, 12)
[ 55.050920] i8042: [54237] d4 -> i8042 (command)
[ 55.051166] i8042: [54237] f8 -> i8042 (parameter)
[ 55.054002] i8042: [54240] fa <- i8042 (interrupt, 1, 12)
[ 55.054086] i8042: [54240] d4 -> i8042 (command)
[ 55.054276] i8042: [54240] 07 -> i8042 (parameter)
[ 55.057211] i8042: [54243] fa <- i8042 (interrupt, 1, 12)
[ 55.057334] i8042: [54243] d4 -> i8042 (command)
[ 55.057524] i8042: [54244] f8 -> i8042 (parameter)
[ 55.060432] i8042: [54247] fa <- i8042 (interrupt, 1, 12)
[ 55.060511] i8042: [54247] d4 -> i8042 (command)
[ 55.060700] i8042: [54247] 00 -> i8042 (parameter)
[ 55.063524] i8042: [54250] fa <- i8042 (interrupt, 1, 12)
[ 55.063603] i8042: [54250] d4 -> i8042 (command)
[ 55.063793] i8042: [54250] f8 -> i8042 (parameter)
[ 55.066787] i8042: [54253] fa <- i8042 (interrupt, 1, 12)
[ 55.066888] i8042: [54253] d4 -> i8042 (command)
[ 55.067078] i8042: [54253] 01 -> i8042 (parameter)
[ 55.069982] i8042: [54256] fa <- i8042 (interrupt, 1, 12)
[ 55.070084] i8042: [54256] d4 -> i8042 (command)
[ 55.070273] i8042: [54256] e6 -> i8042 (parameter)
[ 55.073201] i8042: [54259] fa <- i8042 (interrupt, 1, 12)
[ 55.073279] i8042: [54259] d4 -> i8042 (command)
[ 55.073476] i8042: [54259] f3 -> i8042 (parameter)
[ 55.076409] i8042: [54262] fa <- i8042 (interrupt, 1, 12)
[ 55.076524] i8042: [54263] d4 -> i8042 (command)
[ 55.076768] i8042: [54263] 64 -> i8042 (parameter)
[ 55.079502] i8042: [54266] fa <- i8042 (interrupt, 1, 12)
[ 55.079541] i8042: [54266] d4 -> i8042 (command)
[ 55.079781] i8042: [54266] e8 -> i8042 (parameter)
[ 55.082726] i8042: [54269] fa <- i8042 (interrupt, 1, 12)
[ 55.082799] i8042: [54269] d4 -> i8042 (command)
[ 55.082984] i8042: [54269] 03 -> i8042 (parameter)
[ 55.085994] i8042: [54272] fa <- i8042 (interrupt, 1, 12)
[ 55.086102] i8042: [54272] d4 -> i8042 (command)
[ 55.086302] i8042: [54272] e6 -> i8042 (parameter)
[ 55.089173] i8042: [54275] fa <- i8042 (interrupt, 1, 12)
[ 55.089301] i8042: [54275] d4 -> i8042 (command)
[ 55.089491] i8042: [54276] f4 -> i8042 (parameter)
[ 55.092299] i8042: [54278] fa <- i8042 (interrupt, 1, 12)
[ 55.113113] i8042: [54299] 08 <- i8042 (interrupt, 1, 12)
[ 55.114637] i8042: [54301] 00 <- i8042 (interrupt, 1, 12)
[ 55.116252] i8042: [54302] 00 <- i8042 (interrupt, 1, 12)
[ 55.122846] i8042: [54309] 64 <- i8042 (interrupt, 1, 12)
[ 55.124478] i8042: [54311] 01 <- i8042 (interrupt, 1, 12)
[ 55.126049] i8042: [54312] 00 <- i8042 (interrupt, 1, 12)
[ 55.126089] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.127537] i8042: [54314] 10 <- i8042 (interrupt, 1, 12)
[ 55.129219] i8042: [54315] 00 <- i8042 (interrupt, 1, 12)
[ 55.130801] i8042: [54317] 00 <- i8042 (interrupt, 1, 12)
[ 55.132383] i8042: [54318] 64 <- i8042 (interrupt, 1, 12)
[ 55.133969] i8042: [54320] 23 <- i8042 (interrupt, 1, 12)
[ 55.135519] i8042: [54322] 03 <- i8042 (interrupt, 1, 12)
[ 55.135556] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.137079] i8042: [54323] 31 <- i8042 (interrupt, 1, 12)
[ 55.138701] i8042: [54325] 22 <- i8042 (interrupt, 1, 12)
[ 55.140313] i8042: [54326] 18 <- i8042 (interrupt, 1, 12)
[ 55.141881] i8042: [54328] 54 <- i8042 (interrupt, 1, 12)
[ 55.143489] i8042: [54330] 23 <- i8042 (interrupt, 1, 12)
[ 55.144948] i8042: [54331] 03 <- i8042 (interrupt, 1, 12)
[ 55.144981] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.146557] i8042: [54333] 31 <- i8042 (interrupt, 1, 12)
[ 55.148221] i8042: [54334] 72 <- i8042 (interrupt, 1, 12)
[ 55.149800] i8042: [54336] 18 <- i8042 (interrupt, 1, 12)
[ 55.151284] i8042: [54337] 54 <- i8042 (interrupt, 1, 12)
[ 55.152974] i8042: [54339] 23 <- i8042 (interrupt, 1, 12)
[ 55.154524] i8042: [54341] 4a <- i8042 (interrupt, 1, 12)
[ 55.154562] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.156031] i8042: [54342] 31 <- i8042 (interrupt, 1, 12)
[ 55.157709] i8042: [54344] c2 <- i8042 (interrupt, 1, 12)
[ 55.159298] i8042: [54345] 2a <- i8042 (interrupt, 1, 12)
[ 55.160883] i8042: [54347] 64 <- i8042 (interrupt, 1, 12)
[ 55.162493] i8042: [54349] 23 <- i8042 (interrupt, 1, 12)
[ 55.163980] i8042: [54350] 9d <- i8042 (interrupt, 1, 12)
[ 55.164001] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.164008] psmouse serio1: issuing reconnect request
[ 55.164035] i8042: [54350] d4 -> i8042 (command)
[ 55.164220] i8042: [54350] ff -> i8042 (parameter)
[ 55.167275] i8042: [54353] fa <- i8042 (interrupt, 1, 12)
[ 55.268267] i8042: [54454] aa <- i8042 (interrupt, 1, 12)
[ 55.269840] i8042: [54456] 00 <- i8042 (interrupt, 1, 12)
[ 55.269921] i8042: [54456] d4 -> i8042 (command)
[ 55.270111] i8042: [54456] f6 -> i8042 (parameter)
[ 55.273047] i8042: [54459] fa <- i8042 (interrupt, 1, 12)
[ 55.273129] i8042: [54459] d4 -> i8042 (command)
[ 55.273318] i8042: [54459] f5 -> i8042 (parameter)
[ 55.276243] i8042: [54462] fa <- i8042 (interrupt, 1, 12)
[ 55.276325] i8042: [54462] d4 -> i8042 (command)
[ 55.276572] i8042: [54463] e6 -> i8042 (parameter)
[ 55.279477] i8042: [54466] fa <- i8042 (interrupt, 1, 12)
[ 55.279537] i8042: [54466] d4 -> i8042 (command)
[ 55.279723] i8042: [54466] e6 -> i8042 (parameter)
[ 55.282537] i8042: [54469] fa <- i8042 (interrupt, 1, 12)
[ 55.282615] i8042: [54469] d4 -> i8042 (command)
[ 55.282826] i8042: [54469] e6 -> i8042 (parameter)
[ 55.285809] i8042: [54472] fa <- i8042 (interrupt, 1, 12)
[ 55.285866] i8042: [54472] d4 -> i8042 (command)
[ 55.286051] i8042: [54472] e9 -> i8042 (parameter)
[ 55.289056] i8042: [54475] fa <- i8042 (interrupt, 1, 12)
[ 55.290540] i8042: [54477] 3c <- i8042 (interrupt, 1, 12)
[ 55.292165] i8042: [54478] 03 <- i8042 (interrupt, 1, 12)
[ 55.293696] i8042: [54480] 00 <- i8042 (interrupt, 1, 12)
[ 55.293802] i8042: [54480] d4 -> i8042 (command)
[ 55.294049] i8042: [54480] e6 -> i8042 (parameter)
[ 55.296966] i8042: [54483] fa <- i8042 (interrupt, 1, 12)
[ 55.297068] i8042: [54483] d4 -> i8042 (command)
[ 55.297257] i8042: [54483] e8 -> i8042 (parameter)
[ 55.300160] i8042: [54486] fa <- i8042 (interrupt, 1, 12)
[ 55.300259] i8042: [54486] d4 -> i8042 (command)
[ 55.300449] i8042: [54487] 00 -> i8042 (parameter)
[ 55.303362] i8042: [54489] fa <- i8042 (interrupt, 1, 12)
[ 55.303465] i8042: [54490] d4 -> i8042 (command)
[ 55.303654] i8042: [54490] e8 -> i8042 (parameter)
[ 55.306551] i8042: [54493] fa <- i8042 (interrupt, 1, 12)
[ 55.306650] i8042: [54493] d4 -> i8042 (command)
[ 55.306840] i8042: [54493] 00 -> i8042 (parameter)
[ 55.309745] i8042: [54496] fa <- i8042 (interrupt, 1, 12)
[ 55.309846] i8042: [54496] d4 -> i8042 (command)
[ 55.310092] i8042: [54496] e8 -> i8042 (parameter)
[ 55.312944] i8042: [54499] fa <- i8042 (interrupt, 1, 12)
[ 55.313044] i8042: [54499] d4 -> i8042 (command)
[ 55.313234] i8042: [54499] 00 -> i8042 (parameter)
[ 55.316138] i8042: [54502] fa <- i8042 (interrupt, 1, 12)
[ 55.316240] i8042: [54502] d4 -> i8042 (command)
[ 55.316430] i8042: [54503] e8 -> i8042 (parameter)
[ 55.319333] i8042: [54505] fa <- i8042 (interrupt, 1, 12)
[ 55.319432] i8042: [54506] d4 -> i8042 (command)
[ 55.319622] i8042: [54506] 01 -> i8042 (parameter)
[ 55.322533] i8042: [54509] fa <- i8042 (interrupt, 1, 12)
[ 55.322635] i8042: [54509] d4 -> i8042 (command)
[ 55.322825] i8042: [54509] e9 -> i8042 (parameter)
[ 55.325721] i8042: [54512] fa <- i8042 (interrupt, 1, 12)
[ 55.327292] i8042: [54513] 5e <- i8042 (interrupt, 1, 12)
[ 55.328839] i8042: [54515] 0f <- i8042 (interrupt, 1, 12)
[ 55.330455] i8042: [54517] 01 <- i8042 (interrupt, 1, 12)
[ 55.330558] i8042: [54517] d4 -> i8042 (command)
[ 55.330747] i8042: [54517] f8 -> i8042 (parameter)
[ 55.333671] i8042: [54520] fa <- i8042 (interrupt, 1, 12)
[ 55.333774] i8042: [54520] d4 -> i8042 (command)
[ 55.333964] i8042: [54520] 00 -> i8042 (parameter)
[ 55.336855] i8042: [54523] fa <- i8042 (interrupt, 1, 12)
[ 55.336959] i8042: [54523] d4 -> i8042 (command)
[ 55.337148] i8042: [54523] f8 -> i8042 (parameter)
[ 55.340050] i8042: [54526] fa <- i8042 (interrupt, 1, 12)
[ 55.340156] i8042: [54526] d4 -> i8042 (command)
[ 55.340345] i8042: [54526] 07 -> i8042 (parameter)
[ 55.343245] i8042: [54529] fa <- i8042 (interrupt, 1, 12)
[ 55.343351] i8042: [54529] d4 -> i8042 (command)
[ 55.343540] i8042: [54530] f8 -> i8042 (parameter)
[ 55.346436] i8042: [54533] fa <- i8042 (interrupt, 1, 12)
[ 55.346538] i8042: [54533] d4 -> i8042 (command)
[ 55.346728] i8042: [54533] 00 -> i8042 (parameter)
[ 55.349629] i8042: [54536] fa <- i8042 (interrupt, 1, 12)
[ 55.349733] i8042: [54536] d4 -> i8042 (command)
[ 55.349923] i8042: [54536] f8 -> i8042 (parameter)
[ 55.352825] i8042: [54539] fa <- i8042 (interrupt, 1, 12)
[ 55.352929] i8042: [54539] d4 -> i8042 (command)
[ 55.353118] i8042: [54539] 01 -> i8042 (parameter)
[ 55.356018] i8042: [54542] fa <- i8042 (interrupt, 1, 12)
[ 55.356120] i8042: [54542] d4 -> i8042 (command)
[ 55.356310] i8042: [54542] e6 -> i8042 (parameter)
[ 55.359214] i8042: [54545] fa <- i8042 (interrupt, 1, 12)
[ 55.359319] i8042: [54545] d4 -> i8042 (command)
[ 55.359508] i8042: [54546] f3 -> i8042 (parameter)
[ 55.362404] i8042: [54549] fa <- i8042 (interrupt, 1, 12)
[ 55.362503] i8042: [54549] d4 -> i8042 (command)
[ 55.362692] i8042: [54549] 64 -> i8042 (parameter)
[ 55.365597] i8042: [54552] fa <- i8042 (interrupt, 1, 12)
[ 55.365700] i8042: [54552] d4 -> i8042 (command)
[ 55.365889] i8042: [54552] e8 -> i8042 (parameter)
[ 55.368797] i8042: [54555] fa <- i8042 (interrupt, 1, 12)
[ 55.368898] i8042: [54555] d4 -> i8042 (command)
[ 55.369144] i8042: [54555] 03 -> i8042 (parameter)
[ 55.371990] i8042: [54558] fa <- i8042 (interrupt, 1, 12)
[ 55.372092] i8042: [54558] d4 -> i8042 (command)
[ 55.372282] i8042: [54558] e6 -> i8042 (parameter)
[ 55.375188] i8042: [54561] fa <- i8042 (interrupt, 1, 12)
[ 55.375292] i8042: [54561] d4 -> i8042 (command)
[ 55.375482] i8042: [54562] f4 -> i8042 (parameter)
[ 55.378388] i8042: [54564] fa <- i8042 (interrupt, 1, 12)
[ 55.389025] i8042: [54575] 08 <- i8042 (interrupt, 1, 12)
[ 55.390523] i8042: [54577] 00 <- i8042 (interrupt, 1, 12)
[ 55.392177] i8042: [54578] 00 <- i8042 (interrupt, 1, 12)
[ 55.398323] i8042: [54584] 54 <- i8042 (interrupt, 1, 12)
[ 55.399895] i8042: [54586] 01 <- i8042 (interrupt, 1, 12)
[ 55.401511] i8042: [54588] 00 <- i8042 (interrupt, 1, 12)
[ 55.401549] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.402966] i8042: [54589] 10 <- i8042 (interrupt, 1, 12)
[ 55.404552] i8042: [54591] 00 <- i8042 (interrupt, 1, 12)
[ 55.406228] i8042: [54592] 00 <- i8042 (interrupt, 1, 12)
[ 55.407814] i8042: [54594] 54 <- i8042 (interrupt, 1, 12)
[ 55.409300] i8042: [54595] 12 <- i8042 (interrupt, 1, 12)
[ 55.410977] i8042: [54597] 64 <- i8042 (interrupt, 1, 12)
[ 55.411010] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.412592] i8042: [54599] 31 <- i8042 (interrupt, 1, 12)
[ 55.414153] i8042: [54600] 51 <- i8042 (interrupt, 1, 12)
[ 55.415739] i8042: [54602] 96 <- i8042 (interrupt, 1, 12)
[ 55.417352] i8042: [54603] 54 <- i8042 (interrupt, 1, 12)
[ 55.418918] i8042: [54605] 12 <- i8042 (interrupt, 1, 12)
[ 55.420504] i8042: [54607] 64 <- i8042 (interrupt, 1, 12)
[ 55.420541] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.421961] i8042: [54608] 31 <- i8042 (interrupt, 1, 12)
[ 55.423651] i8042: [54610] f1 <- i8042 (interrupt, 1, 12)
[ 55.425228] i8042: [54611] 96 <- i8042 (interrupt, 1, 12)
[ 55.426817] i8042: [54613] 54 <- i8042 (interrupt, 1, 12)
[ 55.428394] i8042: [54614] 22 <- i8042 (interrupt, 1, 12)
[ 55.429994] i8042: [54616] 4b <- i8042 (interrupt, 1, 12)
[ 55.430033] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.431522] i8042: [54618] 31 <- i8042 (interrupt, 1, 12)
[ 55.433087] i8042: [54619] 61 <- i8042 (interrupt, 1, 12)
[ 55.434710] i8042: [54621] 92 <- i8042 (interrupt, 1, 12)
[ 55.436314] i8042: [54622] 54 <- i8042 (interrupt, 1, 12)
[ 55.437892] i8042: [54624] 22 <- i8042 (interrupt, 1, 12)
[ 55.439512] i8042: [54626] 4a <- i8042 (interrupt, 1, 12)
[ 55.439550] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.439567] psmouse serio1: issuing reconnect request
[ 55.439647] i8042: [54626] d4 -> i8042 (command)
[ 55.439894] i8042: [54626] ff -> i8042 (parameter)
[ 55.442701] i8042: [54629] fa <- i8042 (interrupt, 1, 12)
[ 55.543726] i8042: [54730] aa <- i8042 (interrupt, 1, 12)
[ 55.545296] i8042: [54731] 00 <- i8042 (interrupt, 1, 12)
[ 55.545377] i8042: [54731] d4 -> i8042 (command)
[ 55.545567] i8042: [54731] f6 -> i8042 (parameter)
[ 55.548513] i8042: [54735] fa <- i8042 (interrupt, 1, 12)
[ 55.548615] i8042: [54735] d4 -> i8042 (command)
[ 55.548804] i8042: [54735] f5 -> i8042 (parameter)
[ 55.551709] i8042: [54738] fa <- i8042 (interrupt, 1, 12)
[ 55.551811] i8042: [54738] d4 -> i8042 (command)
[ 55.552058] i8042: [54738] e6 -> i8042 (parameter)
[ 55.554896] i8042: [54741] fa <- i8042 (interrupt, 1, 12)
[ 55.554998] i8042: [54741] d4 -> i8042 (command)
[ 55.555187] i8042: [54741] e6 -> i8042 (parameter)
[ 55.558098] i8042: [54744] fa <- i8042 (interrupt, 1, 12)
[ 55.558199] i8042: [54744] d4 -> i8042 (command)
[ 55.558389] i8042: [54745] e6 -> i8042 (parameter)
[ 55.561287] i8042: [54747] fa <- i8042 (interrupt, 1, 12)
[ 55.561424] i8042: [54748] d4 -> i8042 (command)
[ 55.561615] i8042: [54748] e9 -> i8042 (parameter)
[ 55.564480] i8042: [54751] fa <- i8042 (interrupt, 1, 12)
[ 55.566042] i8042: [54752] 3c <- i8042 (interrupt, 1, 12)
[ 55.567532] i8042: [54754] 03 <- i8042 (interrupt, 1, 12)
[ 55.569205] i8042: [54755] 00 <- i8042 (interrupt, 1, 12)
[ 55.569283] i8042: [54755] d4 -> i8042 (command)
[ 55.569471] i8042: [54756] e6 -> i8042 (parameter)
[ 55.572311] i8042: [54758] fa <- i8042 (interrupt, 1, 12)
[ 55.573066] i8042: [54759] d4 -> i8042 (command)
[ 55.573264] i8042: [54759] e8 -> i8042 (parameter)
[ 55.576017] i8042: [54762] fa <- i8042 (interrupt, 1, 12)
[ 55.576051] i8042: [54762] d4 -> i8042 (command)
[ 55.576296] i8042: [54762] 00 -> i8042 (parameter)
[ 55.579315] i8042: [54765] fa <- i8042 (interrupt, 1, 12)
[ 55.579434] i8042: [54766] d4 -> i8042 (command)
[ 55.579680] i8042: [54766] e8 -> i8042 (parameter)
[ 55.582402] i8042: [54769] fa <- i8042 (interrupt, 1, 12)
[ 55.582624] i8042: [54769] d4 -> i8042 (command)
[ 55.582815] i8042: [54769] 00 -> i8042 (parameter)
[ 55.585606] i8042: [54772] fa <- i8042 (interrupt, 1, 12)
[ 55.585676] i8042: [54772] d4 -> i8042 (command)
[ 55.585866] i8042: [54772] e8 -> i8042 (parameter)
[ 55.588890] i8042: [54775] fa <- i8042 (interrupt, 1, 12)
[ 55.588995] i8042: [54775] d4 -> i8042 (command)
[ 55.589184] i8042: [54775] 00 -> i8042 (parameter)
[ 55.592033] i8042: [54778] fa <- i8042 (interrupt, 1, 12)
[ 55.592122] i8042: [54778] d4 -> i8042 (command)
[ 55.592311] i8042: [54778] e8 -> i8042 (parameter)
[ 55.595173] i8042: [54781] fa <- i8042 (interrupt, 1, 12)
[ 55.595224] i8042: [54781] d4 -> i8042 (command)
[ 55.595412] i8042: [54781] 01 -> i8042 (parameter)
[ 55.598464] i8042: [54785] fa <- i8042 (interrupt, 1, 12)
[ 55.598538] i8042: [54785] d4 -> i8042 (command)
[ 55.598727] i8042: [54785] e9 -> i8042 (parameter)
[ 55.601569] i8042: [54788] fa <- i8042 (interrupt, 1, 12)
[ 55.603211] i8042: [54789] 5e <- i8042 (interrupt, 1, 12)
[ 55.604786] i8042: [54791] 0f <- i8042 (interrupt, 1, 12)
[ 55.606383] i8042: [54793] 01 <- i8042 (interrupt, 1, 12)
[ 55.606487] i8042: [54793] d4 -> i8042 (command)
[ 55.606677] i8042: [54793] f8 -> i8042 (parameter)
[ 55.609578] i8042: [54796] fa <- i8042 (interrupt, 1, 12)
[ 55.609682] i8042: [54796] d4 -> i8042 (command)
[ 55.609871] i8042: [54796] 00 -> i8042 (parameter)
[ 55.612778] i8042: [54799] fa <- i8042 (interrupt, 1, 12)
[ 55.612883] i8042: [54799] d4 -> i8042 (command)
[ 55.613129] i8042: [54799] f8 -> i8042 (parameter)
[ 55.615996] i8042: [54802] fa <- i8042 (interrupt, 1, 12)
[ 55.616100] i8042: [54802] d4 -> i8042 (command)
[ 55.616290] i8042: [54802] 07 -> i8042 (parameter)
[ 55.619193] i8042: [54805] fa <- i8042 (interrupt, 1, 12)
[ 55.619303] i8042: [54805] d4 -> i8042 (command)
[ 55.619494] i8042: [54806] f8 -> i8042 (parameter)
[ 55.622406] i8042: [54809] fa <- i8042 (interrupt, 1, 12)
[ 55.622509] i8042: [54809] d4 -> i8042 (command)
[ 55.622698] i8042: [54809] 00 -> i8042 (parameter)
[ 55.625591] i8042: [54812] fa <- i8042 (interrupt, 1, 12)
[ 55.625695] i8042: [54812] d4 -> i8042 (command)
[ 55.625884] i8042: [54812] f8 -> i8042 (parameter)
[ 55.628787] i8042: [54815] fa <- i8042 (interrupt, 1, 12)
[ 55.628892] i8042: [54815] d4 -> i8042 (command)
[ 55.629081] i8042: [54815] 01 -> i8042 (parameter)
[ 55.631994] i8042: [54818] fa <- i8042 (interrupt, 1, 12)
[ 55.632098] i8042: [54818] d4 -> i8042 (command)
[ 55.632287] i8042: [54818] e6 -> i8042 (parameter)
[ 55.635157] i8042: [54821] fa <- i8042 (interrupt, 1, 12)
[ 55.635267] i8042: [54821] d4 -> i8042 (command)
[ 55.635513] i8042: [54822] f3 -> i8042 (parameter)
[ 55.638353] i8042: [54824] fa <- i8042 (interrupt, 1, 12)
[ 55.638454] i8042: [54825] d4 -> i8042 (command)
[ 55.638643] i8042: [54825] 64 -> i8042 (parameter)
[ 55.641544] i8042: [54828] fa <- i8042 (interrupt, 1, 12)
[ 55.641649] i8042: [54828] d4 -> i8042 (command)
[ 55.641895] i8042: [54828] e8 -> i8042 (parameter)
[ 55.644722] i8042: [54831] fa <- i8042 (interrupt, 1, 12)
[ 55.644823] i8042: [54831] d4 -> i8042 (command)
[ 55.645013] i8042: [54831] 03 -> i8042 (parameter)
[ 55.647927] i8042: [54834] fa <- i8042 (interrupt, 1, 12)
[ 55.648031] i8042: [54834] d4 -> i8042 (command)
[ 55.648220] i8042: [54834] e6 -> i8042 (parameter)
[ 55.651139] i8042: [54837] fa <- i8042 (interrupt, 1, 12)
[ 55.651246] i8042: [54837] d4 -> i8042 (command)
[ 55.651436] i8042: [54838] f4 -> i8042 (parameter)
[ 55.654323] i8042: [54840] fa <- i8042 (interrupt, 1, 12)
[ 55.675063] i8042: [54861] 08 <- i8042 (interrupt, 1, 12)
[ 55.676545] i8042: [54863] 00 <- i8042 (interrupt, 1, 12)
[ 55.678222] i8042: [54864] 00 <- i8042 (interrupt, 1, 12)
[ 55.684858] i8042: [54871] 54 <- i8042 (interrupt, 1, 12)
[ 55.686463] i8042: [54873] 01 <- i8042 (interrupt, 1, 12)
[ 55.687962] i8042: [54874] 00 <- i8042 (interrupt, 1, 12)
[ 55.687996] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.689523] i8042: [54876] 10 <- i8042 (interrupt, 1, 12)
[ 55.691198] i8042: [54877] 00 <- i8042 (interrupt, 1, 12)
[ 55.692781] i8042: [54879] 00 <- i8042 (interrupt, 1, 12)
[ 55.694256] i8042: [54880] 54 <- i8042 (interrupt, 1, 12)
[ 55.695936] i8042: [54882] 24 <- i8042 (interrupt, 1, 12)
[ 55.697533] i8042: [54884] fe <- i8042 (interrupt, 1, 12)
[ 55.697573] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.699109] i8042: [54885] 31 <- i8042 (interrupt, 1, 12)
[ 55.700627] i8042: [54887] 21 <- i8042 (interrupt, 1, 12)
[ 55.702267] i8042: [54888] e3 <- i8042 (interrupt, 1, 12)
[ 55.703856] i8042: [54890] 54 <- i8042 (interrupt, 1, 12)
[ 55.705443] i8042: [54892] 24 <- i8042 (interrupt, 1, 12)
[ 55.707018] i8042: [54893] fe <- i8042 (interrupt, 1, 12)
[ 55.707059] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.708527] i8042: [54895] 31 <- i8042 (interrupt, 1, 12)
[ 55.710163] i8042: [54896] 61 <- i8042 (interrupt, 1, 12)
[ 55.711764] i8042: [54898] e3 <- i8042 (interrupt, 1, 12)
[ 55.713347] i8042: [54899] 54 <- i8042 (interrupt, 1, 12)
[ 55.714944] i8042: [54901] 24 <- i8042 (interrupt, 1, 12)
[ 55.716519] i8042: [54903] 7a <- i8042 (interrupt, 1, 12)
[ 55.716556] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.718089] i8042: [54904] 31 <- i8042 (interrupt, 1, 12)
[ 55.719650] i8042: [54906] 71 <- i8042 (interrupt, 1, 12)
[ 55.721262] i8042: [54907] ca <- i8042 (interrupt, 1, 12)
[ 55.722852] i8042: [54909] 54 <- i8042 (interrupt, 1, 12)
[ 55.724434] i8042: [54911] 24 <- i8042 (interrupt, 1, 12)
[ 55.726010] i8042: [54912] 65 <- i8042 (interrupt, 1, 12)
[ 55.726052] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.726069] psmouse serio1: issuing reconnect request
[ 55.726152] i8042: [54912] d4 -> i8042 (command)
[ 55.726341] i8042: [54912] ff -> i8042 (parameter)
[ 55.729240] i8042: [54915] fa <- i8042 (interrupt, 1, 12)
[ 55.830123] i8042: [55016] aa <- i8042 (interrupt, 1, 12)
[ 55.831812] i8042: [55018] 00 <- i8042 (interrupt, 1, 12)
[ 55.831915] i8042: [55018] d4 -> i8042 (command)
[ 55.832104] i8042: [55018] f6 -> i8042 (parameter)
[ 55.835036] i8042: [55021] fa <- i8042 (interrupt, 1, 12)
[ 55.835139] i8042: [55021] d4 -> i8042 (command)
[ 55.835329] i8042: [55021] f5 -> i8042 (parameter)
[ 55.838231] i8042: [55024] fa <- i8042 (interrupt, 1, 12)
[ 55.838334] i8042: [55024] d4 -> i8042 (command)
[ 55.838524] i8042: [55025] e6 -> i8042 (parameter)
[ 55.841426] i8042: [55028] fa <- i8042 (interrupt, 1, 12)
[ 55.841522] i8042: [55028] d4 -> i8042 (command)
[ 55.841712] i8042: [55028] e6 -> i8042 (parameter)
[ 55.844616] i8042: [55031] fa <- i8042 (interrupt, 1, 12)
[ 55.844725] i8042: [55031] d4 -> i8042 (command)
[ 55.844972] i8042: [55031] e6 -> i8042 (parameter)
[ 55.847788] i8042: [55034] fa <- i8042 (interrupt, 1, 12)
[ 55.847892] i8042: [55034] d4 -> i8042 (command)
[ 55.848081] i8042: [55034] e9 -> i8042 (parameter)
[ 55.850987] i8042: [55037] fa <- i8042 (interrupt, 1, 12)
[ 55.852701] i8042: [55039] 3c <- i8042 (interrupt, 1, 12)
[ 55.854230] i8042: [55040] 03 <- i8042 (interrupt, 1, 12)
[ 55.855669] i8042: [55042] 00 <- i8042 (interrupt, 1, 12)
[ 55.856094] i8042: [55042] d4 -> i8042 (command)
[ 55.856286] i8042: [55042] e6 -> i8042 (parameter)
[ 55.859404] i8042: [55046] fa <- i8042 (interrupt, 1, 12)
[ 55.859463] i8042: [55046] d4 -> i8042 (command)
[ 55.859711] i8042: [55046] e8 -> i8042 (parameter)
[ 55.862563] i8042: [55049] fa <- i8042 (interrupt, 1, 12)
[ 55.862648] i8042: [55049] d4 -> i8042 (command)
[ 55.862838] i8042: [55049] 00 -> i8042 (parameter)
[ 55.865798] i8042: [55052] fa <- i8042 (interrupt, 1, 12)
[ 55.865890] i8042: [55052] d4 -> i8042 (command)
[ 55.866078] i8042: [55052] e8 -> i8042 (parameter)
[ 55.869070] i8042: [55055] fa <- i8042 (interrupt, 1, 12)
[ 55.869161] i8042: [55055] d4 -> i8042 (command)
[ 55.869349] i8042: [55055] 00 -> i8042 (parameter)
[ 55.872262] i8042: [55058] fa <- i8042 (interrupt, 1, 12)
[ 55.872359] i8042: [55058] d4 -> i8042 (command)
[ 55.872548] i8042: [55059] e8 -> i8042 (parameter)
[ 55.875456] i8042: [55062] fa <- i8042 (interrupt, 1, 12)
[ 55.875548] i8042: [55062] d4 -> i8042 (command)
[ 55.875736] i8042: [55062] 00 -> i8042 (parameter)
[ 55.878655] i8042: [55065] fa <- i8042 (interrupt, 1, 12)
[ 55.878748] i8042: [55065] d4 -> i8042 (command)
[ 55.878936] i8042: [55065] e8 -> i8042 (parameter)
[ 55.881792] i8042: [55068] fa <- i8042 (interrupt, 1, 12)
[ 55.881884] i8042: [55068] d4 -> i8042 (command)
[ 55.882130] i8042: [55068] 01 -> i8042 (parameter)
[ 55.885023] i8042: [55071] fa <- i8042 (interrupt, 1, 12)
[ 55.885118] i8042: [55071] d4 -> i8042 (command)
[ 55.885306] i8042: [55071] e9 -> i8042 (parameter)
[ 55.888213] i8042: [55074] fa <- i8042 (interrupt, 1, 12)
[ 55.889778] i8042: [55076] 5e <- i8042 (interrupt, 1, 12)
[ 55.891353] i8042: [55077] 0f <- i8042 (interrupt, 1, 12)
[ 55.892934] i8042: [55079] 01 <- i8042 (interrupt, 1, 12)
[ 55.893027] i8042: [55079] d4 -> i8042 (command)
[ 55.893215] i8042: [55079] f8 -> i8042 (parameter)
[ 55.896160] i8042: [55082] fa <- i8042 (interrupt, 1, 12)
[ 55.896259] i8042: [55082] d4 -> i8042 (command)
[ 55.896447] i8042: [55083] 00 -> i8042 (parameter)
[ 55.899340] i8042: [55085] fa <- i8042 (interrupt, 1, 12)
[ 55.899439] i8042: [55086] d4 -> i8042 (command)
[ 55.899627] i8042: [55086] f8 -> i8042 (parameter)
[ 55.902549] i8042: [55089] fa <- i8042 (interrupt, 1, 12)
[ 55.902635] i8042: [55089] d4 -> i8042 (command)
[ 55.902880] i8042: [55089] 07 -> i8042 (parameter)
[ 55.905735] i8042: [55092] fa <- i8042 (interrupt, 1, 12)
[ 55.905831] i8042: [55092] d4 -> i8042 (command)
[ 55.906019] i8042: [55092] f8 -> i8042 (parameter)
[ 55.908934] i8042: [55095] fa <- i8042 (interrupt, 1, 12)
[ 55.909029] i8042: [55095] d4 -> i8042 (command)
[ 55.909217] i8042: [55095] 00 -> i8042 (parameter)
[ 55.912138] i8042: [55098] fa <- i8042 (interrupt, 1, 12)
[ 55.912235] i8042: [55098] d4 -> i8042 (command)
[ 55.912480] i8042: [55099] f8 -> i8042 (parameter)
[ 55.915321] i8042: [55101] fa <- i8042 (interrupt, 1, 12)
[ 55.915415] i8042: [55102] d4 -> i8042 (command)
[ 55.915604] i8042: [55102] 01 -> i8042 (parameter)
[ 55.918509] i8042: [55105] fa <- i8042 (interrupt, 1, 12)
[ 55.918604] i8042: [55105] d4 -> i8042 (command)
[ 55.918793] i8042: [55105] e6 -> i8042 (parameter)
[ 55.921702] i8042: [55108] fa <- i8042 (interrupt, 1, 12)
[ 55.921798] i8042: [55108] d4 -> i8042 (command)
[ 55.921986] i8042: [55108] f3 -> i8042 (parameter)
[ 55.924898] i8042: [55111] fa <- i8042 (interrupt, 1, 12)
[ 55.924990] i8042: [55111] d4 -> i8042 (command)
[ 55.925178] i8042: [55111] 64 -> i8042 (parameter)
[ 55.928079] i8042: [55114] fa <- i8042 (interrupt, 1, 12)
[ 55.928175] i8042: [55114] d4 -> i8042 (command)
[ 55.928363] i8042: [55114] e8 -> i8042 (parameter)
[ 55.931275] i8042: [55117] fa <- i8042 (interrupt, 1, 12)
[ 55.931353] i8042: [55117] d4 -> i8042 (command)
[ 55.931598] i8042: [55118] 03 -> i8042 (parameter)
[ 55.934361] i8042: [55120] fa <- i8042 (interrupt, 1, 12)
[ 55.939976] i8042: [55126] d4 -> i8042 (command)
[ 55.940178] i8042: [55126] e6 -> i8042 (parameter)
[ 55.943203] i8042: [55129] fa <- i8042 (interrupt, 1, 12)
[ 55.943307] i8042: [55129] d4 -> i8042 (command)
[ 55.943554] i8042: [55130] f4 -> i8042 (parameter)
[ 55.946401] i8042: [55133] fa <- i8042 (interrupt, 1, 12)
[ 55.967084] i8042: [55153] 08 <- i8042 (interrupt, 1, 12)
[ 55.968690] i8042: [55155] 00 <- i8042 (interrupt, 1, 12)
[ 55.970273] i8042: [55156] 00 <- i8042 (interrupt, 1, 12)
[ 55.976928] i8042: [55163] 64 <- i8042 (interrupt, 1, 12)
[ 55.978524] i8042: [55165] 01 <- i8042 (interrupt, 1, 12)
[ 55.980028] i8042: [55166] 00 <- i8042 (interrupt, 1, 12)
[ 55.980053] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.981671] i8042: [55168] 10 <- i8042 (interrupt, 1, 12)
[ 55.983258] i8042: [55169] 00 <- i8042 (interrupt, 1, 12)
[ 55.984789] i8042: [55171] 00 <- i8042 (interrupt, 1, 12)
[ 55.986374] i8042: [55172] 64 <- i8042 (interrupt, 1, 12)
[ 55.987959] i8042: [55174] 24 <- i8042 (interrupt, 1, 12)
[ 55.989498] i8042: [55176] a9 <- i8042 (interrupt, 1, 12)
[ 55.989530] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 55.991145] i8042: [55177] 31 <- i8042 (interrupt, 1, 12)
[ 55.992705] i8042: [55179] 52 <- i8042 (interrupt, 1, 12)
[ 55.994255] i8042: [55180] 1e <- i8042 (interrupt, 1, 12)
[ 55.995933] i8042: [55182] 64 <- i8042 (interrupt, 1, 12)
[ 55.997413] i8042: [55184] 24 <- i8042 (interrupt, 1, 12)
[ 55.999076] i8042: [55185] a9 <- i8042 (interrupt, 1, 12)
[ 55.999102] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.000627] i8042: [55187] 31 <- i8042 (interrupt, 1, 12)
[ 56.002273] i8042: [55188] b2 <- i8042 (interrupt, 1, 12)
[ 56.003840] i8042: [55190] 1e <- i8042 (interrupt, 1, 12)
[ 56.005449] i8042: [55192] 64 <- i8042 (interrupt, 1, 12)
[ 56.007024] i8042: [55193] 25 <- i8042 (interrupt, 1, 12)
[ 56.008595] i8042: [55195] 14 <- i8042 (interrupt, 1, 12)
[ 56.008629] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.010200] i8042: [55196] 31 <- i8042 (interrupt, 1, 12)
[ 56.011757] i8042: [55198] f2 <- i8042 (interrupt, 1, 12)
[ 56.013342] i8042: [55199] 34 <- i8042 (interrupt, 1, 12)
[ 56.014923] i8042: [55201] 64 <- i8042 (interrupt, 1, 12)
[ 56.016517] i8042: [55203] 35 <- i8042 (interrupt, 1, 12)
[ 56.018095] i8042: [55204] 2a <- i8042 (interrupt, 1, 12)
[ 56.018135] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.018153] psmouse serio1: issuing reconnect request
[ 56.018238] i8042: [55204] d4 -> i8042 (command)
[ 56.018485] i8042: [55205] ff -> i8042 (parameter)
[ 56.021311] i8042: [55207] fa <- i8042 (interrupt, 1, 12)
[ 56.122316] i8042: [55308] aa <- i8042 (interrupt, 1, 12)
[ 56.123895] i8042: [55310] 00 <- i8042 (interrupt, 1, 12)
[ 56.124000] i8042: [55310] d4 -> i8042 (command)
[ 56.124190] i8042: [55310] f6 -> i8042 (parameter)
[ 56.127101] i8042: [55313] fa <- i8042 (interrupt, 1, 12)
[ 56.127205] i8042: [55313] d4 -> i8042 (command)
[ 56.127452] i8042: [55314] f5 -> i8042 (parameter)
[ 56.130305] i8042: [55316] fa <- i8042 (interrupt, 1, 12)
[ 56.130426] i8042: [55317] d4 -> i8042 (command)
[ 56.130617] i8042: [55317] e6 -> i8042 (parameter)
[ 56.133511] i8042: [55320] fa <- i8042 (interrupt, 1, 12)
[ 56.133615] i8042: [55320] d4 -> i8042 (command)
[ 56.133804] i8042: [55320] e6 -> i8042 (parameter)
[ 56.136706] i8042: [55323] fa <- i8042 (interrupt, 1, 12)
[ 56.136812] i8042: [55323] d4 -> i8042 (command)
[ 56.137002] i8042: [55323] e6 -> i8042 (parameter)
[ 56.139904] i8042: [55326] fa <- i8042 (interrupt, 1, 12)
[ 56.140008] i8042: [55326] d4 -> i8042 (command)
[ 56.140197] i8042: [55326] e9 -> i8042 (parameter)
[ 56.143097] i8042: [55329] fa <- i8042 (interrupt, 1, 12)
[ 56.144660] i8042: [55331] 3c <- i8042 (interrupt, 1, 12)
[ 56.146242] i8042: [55332] 03 <- i8042 (interrupt, 1, 12)
[ 56.147824] i8042: [55334] 00 <- i8042 (interrupt, 1, 12)
[ 56.147927] i8042: [55334] d4 -> i8042 (command)
[ 56.148117] i8042: [55334] e6 -> i8042 (parameter)
[ 56.151038] i8042: [55337] fa <- i8042 (interrupt, 1, 12)
[ 56.151142] i8042: [55337] d4 -> i8042 (command)
[ 56.151331] i8042: [55337] e8 -> i8042 (parameter)
[ 56.154234] i8042: [55340] fa <- i8042 (interrupt, 1, 12)
[ 56.154336] i8042: [55340] d4 -> i8042 (command)
[ 56.154584] i8042: [55341] 00 -> i8042 (parameter)
[ 56.157428] i8042: [55344] fa <- i8042 (interrupt, 1, 12)
[ 56.157532] i8042: [55344] d4 -> i8042 (command)
[ 56.157722] i8042: [55344] e8 -> i8042 (parameter)
[ 56.160621] i8042: [55347] fa <- i8042 (interrupt, 1, 12)
[ 56.160722] i8042: [55347] d4 -> i8042 (command)
[ 56.160968] i8042: [55347] 00 -> i8042 (parameter)
[ 56.163829] i8042: [55350] fa <- i8042 (interrupt, 1, 12)
[ 56.163932] i8042: [55350] d4 -> i8042 (command)
[ 56.164122] i8042: [55350] e8 -> i8042 (parameter)
[ 56.167007] i8042: [55353] fa <- i8042 (interrupt, 1, 12)
[ 56.167109] i8042: [55353] d4 -> i8042 (command)
[ 56.167299] i8042: [55353] 00 -> i8042 (parameter)
[ 56.170205] i8042: [55356] fa <- i8042 (interrupt, 1, 12)
[ 56.170308] i8042: [55356] d4 -> i8042 (command)
[ 56.170497] i8042: [55357] e8 -> i8042 (parameter)
[ 56.173400] i8042: [55359] fa <- i8042 (interrupt, 1, 12)
[ 56.173501] i8042: [55360] d4 -> i8042 (command)
[ 56.173748] i8042: [55360] 01 -> i8042 (parameter)
[ 56.176586] i8042: [55363] fa <- i8042 (interrupt, 1, 12)
[ 56.176690] i8042: [55363] d4 -> i8042 (command)
[ 56.176880] i8042: [55363] e9 -> i8042 (parameter)
[ 56.179741] i8042: [55366] fa <- i8042 (interrupt, 1, 12)
[ 56.181344] i8042: [55367] 5e <- i8042 (interrupt, 1, 12)
[ 56.182922] i8042: [55369] 0f <- i8042 (interrupt, 1, 12)
[ 56.184519] i8042: [55371] 01 <- i8042 (interrupt, 1, 12)
[ 56.184623] i8042: [55371] d4 -> i8042 (command)
[ 56.184812] i8042: [55371] f8 -> i8042 (parameter)
[ 56.187682] i8042: [55374] fa <- i8042 (interrupt, 1, 12)
[ 56.187789] i8042: [55374] d4 -> i8042 (command)
[ 56.187980] i8042: [55374] 00 -> i8042 (parameter)
[ 56.190911] i8042: [55377] fa <- i8042 (interrupt, 1, 12)
[ 56.191037] i8042: [55377] d4 -> i8042 (command)
[ 56.191227] i8042: [55377] f8 -> i8042 (parameter)
[ 56.194101] i8042: [55380] fa <- i8042 (interrupt, 1, 12)
[ 56.194204] i8042: [55380] d4 -> i8042 (command)
[ 56.194394] i8042: [55381] 07 -> i8042 (parameter)
[ 56.197248] i8042: [55383] fa <- i8042 (interrupt, 1, 12)
[ 56.197306] i8042: [55383] d4 -> i8042 (command)
[ 56.197508] i8042: [55384] f8 -> i8042 (parameter)
[ 56.200512] i8042: [55387] fa <- i8042 (interrupt, 1, 12)
[ 56.200615] i8042: [55387] d4 -> i8042 (command)
[ 56.200805] i8042: [55387] 00 -> i8042 (parameter)
[ 56.203698] i8042: [55390] fa <- i8042 (interrupt, 1, 12)
[ 56.203803] i8042: [55390] d4 -> i8042 (command)
[ 56.203993] i8042: [55390] f8 -> i8042 (parameter)
[ 56.206910] i8042: [55393] fa <- i8042 (interrupt, 1, 12)
[ 56.207014] i8042: [55393] d4 -> i8042 (command)
[ 56.207205] i8042: [55393] 01 -> i8042 (parameter)
[ 56.210091] i8042: [55396] fa <- i8042 (interrupt, 1, 12)
[ 56.210196] i8042: [55396] d4 -> i8042 (command)
[ 56.210386] i8042: [55397] e6 -> i8042 (parameter)
[ 56.213282] i8042: [55399] fa <- i8042 (interrupt, 1, 12)
[ 56.213408] i8042: [55400] d4 -> i8042 (command)
[ 56.213598] i8042: [55400] f3 -> i8042 (parameter)
[ 56.216469] i8042: [55403] fa <- i8042 (interrupt, 1, 12)
[ 56.216569] i8042: [55403] d4 -> i8042 (command)
[ 56.216758] i8042: [55403] 64 -> i8042 (parameter)
[ 56.219554] i8042: [55406] fa <- i8042 (interrupt, 1, 12)
[ 56.219636] i8042: [55406] d4 -> i8042 (command)
[ 56.219825] i8042: [55406] e8 -> i8042 (parameter)
[ 56.222842] i8042: [55409] fa <- i8042 (interrupt, 1, 12)
[ 56.222921] i8042: [55409] d4 -> i8042 (command)
[ 56.223110] i8042: [55409] 03 -> i8042 (parameter)
[ 56.226035] i8042: [55412] fa <- i8042 (interrupt, 1, 12)
[ 56.226118] i8042: [55412] d4 -> i8042 (command)
[ 56.226308] i8042: [55412] e6 -> i8042 (parameter)
[ 56.229234] i8042: [55415] fa <- i8042 (interrupt, 1, 12)
[ 56.229317] i8042: [55415] d4 -> i8042 (command)
[ 56.229506] i8042: [55415] f4 -> i8042 (parameter)
[ 56.232340] i8042: [55418] fa <- i8042 (interrupt, 1, 12)
[ 56.253174] i8042: [55439] 08 <- i8042 (interrupt, 1, 12)
[ 56.254756] i8042: [55441] 00 <- i8042 (interrupt, 1, 12)
[ 56.256336] i8042: [55442] 00 <- i8042 (interrupt, 1, 12)
[ 56.262969] i8042: [55449] 54 <- i8042 (interrupt, 1, 12)
[ 56.264522] i8042: [55451] 01 <- i8042 (interrupt, 1, 12)
[ 56.266140] i8042: [55452] 00 <- i8042 (interrupt, 1, 12)
[ 56.266179] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.267704] i8042: [55454] 10 <- i8042 (interrupt, 1, 12)
[ 56.269306] i8042: [55455] 00 <- i8042 (interrupt, 1, 12)
[ 56.270900] i8042: [55457] 00 <- i8042 (interrupt, 1, 12)
[ 56.272472] i8042: [55459] 54 <- i8042 (interrupt, 1, 12)
[ 56.274050] i8042: [55460] 11 <- i8042 (interrupt, 1, 12)
[ 56.275606] i8042: [55462] ca <- i8042 (interrupt, 1, 12)
[ 56.275646] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.277216] i8042: [55463] 31 <- i8042 (interrupt, 1, 12)
[ 56.278806] i8042: [55465] d2 <- i8042 (interrupt, 1, 12)
[ 56.280379] i8042: [55466] a5 <- i8042 (interrupt, 1, 12)
[ 56.281971] i8042: [55468] 54 <- i8042 (interrupt, 1, 12)
[ 56.283547] i8042: [55470] 21 <- i8042 (interrupt, 1, 12)
[ 56.285102] i8042: [55471] ca <- i8042 (interrupt, 1, 12)
[ 56.285141] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.286688] i8042: [55473] 31 <- i8042 (interrupt, 1, 12)
[ 56.288293] i8042: [55474] 22 <- i8042 (interrupt, 1, 12)
[ 56.289881] i8042: [55476] a5 <- i8042 (interrupt, 1, 12)
[ 56.291543] i8042: [55478] 54 <- i8042 (interrupt, 1, 12)
[ 56.293055] i8042: [55479] 21 <- i8042 (interrupt, 1, 12)
[ 56.294622] i8042: [55481] eb <- i8042 (interrupt, 1, 12)
[ 56.294654] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.296228] i8042: [55482] 31 <- i8042 (interrupt, 1, 12)
[ 56.297777] i8042: [55484] 42 <- i8042 (interrupt, 1, 12)
[ 56.299380] i8042: [55485] b2 <- i8042 (interrupt, 1, 12)
[ 56.300961] i8042: [55487] 54 <- i8042 (interrupt, 1, 12)
[ 56.302535] i8042: [55489] 22 <- i8042 (interrupt, 1, 12)
[ 56.304130] i8042: [55490] 1f <- i8042 (interrupt, 1, 12)
[ 56.304157] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.304166] psmouse serio1: issuing reconnect request
[ 56.304259] i8042: [55490] d4 -> i8042 (command)
[ 56.304449] i8042: [55491] ff -> i8042 (parameter)
[ 56.307343] i8042: [55493] fa <- i8042 (interrupt, 1, 12)
[ 56.408356] i8042: [55594] aa <- i8042 (interrupt, 1, 12)
[ 56.409918] i8042: [55596] 00 <- i8042 (interrupt, 1, 12)
[ 56.409996] i8042: [55596] d4 -> i8042 (command)
[ 56.410185] i8042: [55596] f6 -> i8042 (parameter)
[ 56.413126] i8042: [55599] fa <- i8042 (interrupt, 1, 12)
[ 56.413230] i8042: [55599] d4 -> i8042 (command)
[ 56.413419] i8042: [55600] f5 -> i8042 (parameter)
[ 56.416321] i8042: [55602] fa <- i8042 (interrupt, 1, 12)
[ 56.416430] i8042: [55603] d4 -> i8042 (command)
[ 56.416620] i8042: [55603] e6 -> i8042 (parameter)
[ 56.419525] i8042: [55606] fa <- i8042 (interrupt, 1, 12)
[ 56.419603] i8042: [55606] d4 -> i8042 (command)
[ 56.419793] i8042: [55606] e6 -> i8042 (parameter)
[ 56.422653] i8042: [55609] fa <- i8042 (interrupt, 1, 12)
[ 56.422726] i8042: [55609] d4 -> i8042 (command)
[ 56.422916] i8042: [55609] e6 -> i8042 (parameter)
[ 56.425900] i8042: [55612] fa <- i8042 (interrupt, 1, 12)
[ 56.425979] i8042: [55612] d4 -> i8042 (command)
[ 56.426168] i8042: [55612] e9 -> i8042 (parameter)
[ 56.429109] i8042: [55615] fa <- i8042 (interrupt, 1, 12)
[ 56.430638] i8042: [55617] 3c <- i8042 (interrupt, 1, 12)
[ 56.432257] i8042: [55618] 03 <- i8042 (interrupt, 1, 12)
[ 56.433849] i8042: [55620] 00 <- i8042 (interrupt, 1, 12)
[ 56.434042] i8042: [55620] d4 -> i8042 (command)
[ 56.434234] i8042: [55620] e6 -> i8042 (parameter)
[ 56.437077] i8042: [55623] fa <- i8042 (interrupt, 1, 12)
[ 56.437196] i8042: [55623] d4 -> i8042 (command)
[ 56.437385] i8042: [55624] e8 -> i8042 (parameter)
[ 56.440256] i8042: [55626] fa <- i8042 (interrupt, 1, 12)
[ 56.440356] i8042: [55626] d4 -> i8042 (command)
[ 56.440603] i8042: [55627] 00 -> i8042 (parameter)
[ 56.443464] i8042: [55630] fa <- i8042 (interrupt, 1, 12)
[ 56.443580] i8042: [55630] d4 -> i8042 (command)
[ 56.443827] i8042: [55630] e8 -> i8042 (parameter)
[ 56.446649] i8042: [55633] fa <- i8042 (interrupt, 1, 12)
[ 56.446750] i8042: [55633] d4 -> i8042 (command)
[ 56.446940] i8042: [55633] 00 -> i8042 (parameter)
[ 56.449837] i8042: [55636] fa <- i8042 (interrupt, 1, 12)
[ 56.449939] i8042: [55636] d4 -> i8042 (command)
[ 56.450129] i8042: [55636] e8 -> i8042 (parameter)
[ 56.453043] i8042: [55639] fa <- i8042 (interrupt, 1, 12)
[ 56.453142] i8042: [55639] d4 -> i8042 (command)
[ 56.453332] i8042: [55639] 00 -> i8042 (parameter)
[ 56.456216] i8042: [55642] fa <- i8042 (interrupt, 1, 12)
[ 56.456318] i8042: [55642] d4 -> i8042 (command)
[ 56.456564] i8042: [55643] e8 -> i8042 (parameter)
[ 56.459431] i8042: [55646] fa <- i8042 (interrupt, 1, 12)
[ 56.459529] i8042: [55646] d4 -> i8042 (command)
[ 56.459719] i8042: [55646] 01 -> i8042 (parameter)
[ 56.462579] i8042: [55649] fa <- i8042 (interrupt, 1, 12)
[ 56.462683] i8042: [55649] d4 -> i8042 (command)
[ 56.462873] i8042: [55649] e9 -> i8042 (parameter)
[ 56.465794] i8042: [55652] fa <- i8042 (interrupt, 1, 12)
[ 56.467372] i8042: [55653] 5e <- i8042 (interrupt, 1, 12)
[ 56.468928] i8042: [55655] 0f <- i8042 (interrupt, 1, 12)
[ 56.470506] i8042: [55657] 01 <- i8042 (interrupt, 1, 12)
[ 56.470612] i8042: [55657] d4 -> i8042 (command)
[ 56.470803] i8042: [55657] f8 -> i8042 (parameter)
[ 56.473711] i8042: [55660] fa <- i8042 (interrupt, 1, 12)
[ 56.473815] i8042: [55660] d4 -> i8042 (command)
[ 56.474005] i8042: [55660] 00 -> i8042 (parameter)
[ 56.476952] i8042: [55663] fa <- i8042 (interrupt, 1, 12)
[ 56.477057] i8042: [55663] d4 -> i8042 (command)
[ 56.477246] i8042: [55663] f8 -> i8042 (parameter)
[ 56.480153] i8042: [55666] fa <- i8042 (interrupt, 1, 12)
[ 56.480256] i8042: [55666] d4 -> i8042 (command)
[ 56.480446] i8042: [55667] 07 -> i8042 (parameter)
[ 56.483372] i8042: [55669] fa <- i8042 (interrupt, 1, 12)
[ 56.483476] i8042: [55670] d4 -> i8042 (command)
[ 56.483666] i8042: [55670] f8 -> i8042 (parameter)
[ 56.486546] i8042: [55673] fa <- i8042 (interrupt, 1, 12)
[ 56.486651] i8042: [55673] d4 -> i8042 (command)
[ 56.486840] i8042: [55673] 00 -> i8042 (parameter)
[ 56.489736] i8042: [55676] fa <- i8042 (interrupt, 1, 12)
[ 56.489841] i8042: [55676] d4 -> i8042 (command)
[ 56.490031] i8042: [55676] f8 -> i8042 (parameter)
[ 56.492934] i8042: [55679] fa <- i8042 (interrupt, 1, 12)
[ 56.493038] i8042: [55679] d4 -> i8042 (command)
[ 56.493227] i8042: [55679] 01 -> i8042 (parameter)
[ 56.496117] i8042: [55682] fa <- i8042 (interrupt, 1, 12)
[ 56.496222] i8042: [55682] d4 -> i8042 (command)
[ 56.496468] i8042: [55683] e6 -> i8042 (parameter)
[ 56.499306] i8042: [55685] fa <- i8042 (interrupt, 1, 12)
[ 56.499418] i8042: [55686] d4 -> i8042 (command)
[ 56.499608] i8042: [55686] f3 -> i8042 (parameter)
[ 56.502529] i8042: [55689] fa <- i8042 (interrupt, 1, 12)
[ 56.502604] i8042: [55689] d4 -> i8042 (command)
[ 56.502794] i8042: [55689] 64 -> i8042 (parameter)
[ 56.505711] i8042: [55692] fa <- i8042 (interrupt, 1, 12)
[ 56.505816] i8042: [55692] d4 -> i8042 (command)
[ 56.506063] i8042: [55692] e8 -> i8042 (parameter)
[ 56.508904] i8042: [55695] fa <- i8042 (interrupt, 1, 12)
[ 56.509006] i8042: [55695] d4 -> i8042 (command)
[ 56.509195] i8042: [55695] 03 -> i8042 (parameter)
[ 56.512102] i8042: [55698] fa <- i8042 (interrupt, 1, 12)
[ 56.512206] i8042: [55698] d4 -> i8042 (command)
[ 56.512395] i8042: [55699] e6 -> i8042 (parameter)
[ 56.515302] i8042: [55701] fa <- i8042 (interrupt, 1, 12)
[ 56.515435] i8042: [55702] d4 -> i8042 (command)
[ 56.515626] i8042: [55702] f4 -> i8042 (parameter)
[ 56.518486] i8042: [55705] fa <- i8042 (interrupt, 1, 12)
[ 56.539734] i8042: [55726] 08 <- i8042 (interrupt, 1, 12)
[ 56.541299] i8042: [55727] 00 <- i8042 (interrupt, 1, 12)
[ 56.542893] i8042: [55729] 00 <- i8042 (interrupt, 1, 12)
[ 56.549010] i8042: [55735] 54 <- i8042 (interrupt, 1, 12)
[ 56.550594] i8042: [55737] 01 <- i8042 (interrupt, 1, 12)
[ 56.552182] i8042: [55738] 00 <- i8042 (interrupt, 1, 12)
[ 56.552221] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.553759] i8042: [55740] 10 <- i8042 (interrupt, 1, 12)
[ 56.555348] i8042: [55741] 00 <- i8042 (interrupt, 1, 12)
[ 56.556923] i8042: [55743] 00 <- i8042 (interrupt, 1, 12)
[ 56.558510] i8042: [55745] 54 <- i8042 (interrupt, 1, 12)
[ 56.560095] i8042: [55746] 13 <- i8042 (interrupt, 1, 12)
[ 56.561664] i8042: [55748] fb <- i8042 (interrupt, 1, 12)
[ 56.561704] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.563271] i8042: [55749] 31 <- i8042 (interrupt, 1, 12)
[ 56.564841] i8042: [55751] f2 <- i8042 (interrupt, 1, 12)
[ 56.566421] i8042: [55753] 86 <- i8042 (interrupt, 1, 12)
[ 56.568005] i8042: [55754] 54 <- i8042 (interrupt, 1, 12)
[ 56.569561] i8042: [55756] 23 <- i8042 (interrupt, 1, 12)
[ 56.571105] i8042: [55757] fb <- i8042 (interrupt, 1, 12)
[ 56.571143] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.572753] i8042: [55759] 31 <- i8042 (interrupt, 1, 12)
[ 56.574336] i8042: [55760] 42 <- i8042 (interrupt, 1, 12)
[ 56.575932] i8042: [55762] 86 <- i8042 (interrupt, 1, 12)
[ 56.577499] i8042: [55764] 54 <- i8042 (interrupt, 1, 12)
[ 56.579077] i8042: [55765] 23 <- i8042 (interrupt, 1, 12)
[ 56.580665] i8042: [55767] af <- i8042 (interrupt, 1, 12)
[ 56.580705] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.582250] i8042: [55768] 31 <- i8042 (interrupt, 1, 12)
[ 56.583833] i8042: [55770] 62 <- i8042 (interrupt, 1, 12)
[ 56.585380] i8042: [55771] 86 <- i8042 (interrupt, 1, 12)
[ 56.586982] i8042: [55773] 54 <- i8042 (interrupt, 1, 12)
[ 56.588530] i8042: [55775] 23 <- i8042 (interrupt, 1, 12)
[ 56.590162] i8042: [55776] 65 <- i8042 (interrupt, 1, 12)
[ 56.590202] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.590219] psmouse serio1: issuing reconnect request
[ 56.590303] i8042: [55776] d4 -> i8042 (command)
[ 56.590663] i8042: [55777] ff -> i8042 (parameter)
[ 56.594019] i8042: [55780] fa <- i8042 (interrupt, 1, 12)
[ 56.695129] i8042: [55881] aa <- i8042 (interrupt, 1, 12)
[ 56.696631] i8042: [55883] 00 <- i8042 (interrupt, 1, 12)
[ 56.696710] i8042: [55883] d4 -> i8042 (command)
[ 56.696899] i8042: [55883] f6 -> i8042 (parameter)
[ 56.699881] i8042: [55886] fa <- i8042 (interrupt, 1, 12)
[ 56.699985] i8042: [55886] d4 -> i8042 (command)
[ 56.700175] i8042: [55886] f5 -> i8042 (parameter)
[ 56.703012] i8042: [55889] fa <- i8042 (interrupt, 1, 12)
[ 56.703092] i8042: [55889] d4 -> i8042 (command)
[ 56.703283] i8042: [55889] e6 -> i8042 (parameter)
[ 56.706246] i8042: [55892] fa <- i8042 (interrupt, 1, 12)
[ 56.706349] i8042: [55892] d4 -> i8042 (command)
[ 56.706538] i8042: [55893] e6 -> i8042 (parameter)
[ 56.709442] i8042: [55896] fa <- i8042 (interrupt, 1, 12)
[ 56.709548] i8042: [55896] d4 -> i8042 (command)
[ 56.709794] i8042: [55896] e6 -> i8042 (parameter)
[ 56.712671] i8042: [55899] fa <- i8042 (interrupt, 1, 12)
[ 56.712775] i8042: [55899] d4 -> i8042 (command)
[ 56.712964] i8042: [55899] e9 -> i8042 (parameter)
[ 56.715894] i8042: [55902] fa <- i8042 (interrupt, 1, 12)
[ 56.717443] i8042: [55904] 3c <- i8042 (interrupt, 1, 12)
[ 56.719024] i8042: [55905] 03 <- i8042 (interrupt, 1, 12)
[ 56.720566] i8042: [55907] 00 <- i8042 (interrupt, 1, 12)
[ 56.720670] i8042: [55907] d4 -> i8042 (command)
[ 56.720860] i8042: [55907] e6 -> i8042 (parameter)
[ 56.723815] i8042: [55910] fa <- i8042 (interrupt, 1, 12)
[ 56.723918] i8042: [55910] d4 -> i8042 (command)
[ 56.724108] i8042: [55910] e8 -> i8042 (parameter)
[ 56.727008] i8042: [55913] fa <- i8042 (interrupt, 1, 12)
[ 56.727108] i8042: [55913] d4 -> i8042 (command)
[ 56.727297] i8042: [55913] 00 -> i8042 (parameter)
[ 56.730090] i8042: [55916] fa <- i8042 (interrupt, 1, 12)
[ 56.730556] i8042: [55917] d4 -> i8042 (command)
[ 56.730758] i8042: [55917] e8 -> i8042 (parameter)
[ 56.733287] i8042: [55919] fa <- i8042 (interrupt, 1, 12)
[ 56.733570] i8042: [55920] d4 -> i8042 (command)
[ 56.733756] i8042: [55920] 00 -> i8042 (parameter)
[ 56.736480] i8042: [55923] fa <- i8042 (interrupt, 1, 12)
[ 56.736643] i8042: [55923] d4 -> i8042 (command)
[ 56.736829] i8042: [55923] e8 -> i8042 (parameter)
[ 56.739828] i8042: [55926] fa <- i8042 (interrupt, 1, 12)
[ 56.740017] i8042: [55926] d4 -> i8042 (command)
[ 56.740260] i8042: [55926] 00 -> i8042 (parameter)
[ 56.743014] i8042: [55929] fa <- i8042 (interrupt, 1, 12)
[ 56.743131] i8042: [55929] d4 -> i8042 (command)
[ 56.743321] i8042: [55929] e8 -> i8042 (parameter)
[ 56.746193] i8042: [55932] fa <- i8042 (interrupt, 1, 12)
[ 56.746293] i8042: [55932] d4 -> i8042 (command)
[ 56.746482] i8042: [55933] 01 -> i8042 (parameter)
[ 56.749412] i8042: [55936] fa <- i8042 (interrupt, 1, 12)
[ 56.749539] i8042: [55936] d4 -> i8042 (command)
[ 56.749729] i8042: [55936] e9 -> i8042 (parameter)
[ 56.752581] i8042: [55939] fa <- i8042 (interrupt, 1, 12)
[ 56.754134] i8042: [55940] 5e <- i8042 (interrupt, 1, 12)
[ 56.755604] i8042: [55942] 0f <- i8042 (interrupt, 1, 12)
[ 56.757207] i8042: [55943] 01 <- i8042 (interrupt, 1, 12)
[ 56.757247] i8042: [55943] d4 -> i8042 (command)
[ 56.757488] i8042: [55944] f8 -> i8042 (parameter)
[ 56.760550] i8042: [55947] fa <- i8042 (interrupt, 1, 12)
[ 56.760671] i8042: [55947] d4 -> i8042 (command)
[ 56.760861] i8042: [55947] 00 -> i8042 (parameter)
[ 56.763723] i8042: [55950] fa <- i8042 (interrupt, 1, 12)
[ 56.763844] i8042: [55950] d4 -> i8042 (command)
[ 56.764034] i8042: [55950] f8 -> i8042 (parameter)
[ 56.766795] i8042: [55953] fa <- i8042 (interrupt, 1, 12)
[ 56.766915] i8042: [55953] d4 -> i8042 (command)
[ 56.767100] i8042: [55953] 07 -> i8042 (parameter)
[ 56.770130] i8042: [55956] fa <- i8042 (interrupt, 1, 12)
[ 56.770249] i8042: [55956] d4 -> i8042 (command)
[ 56.770440] i8042: [55957] f8 -> i8042 (parameter)
[ 56.773326] i8042: [55959] fa <- i8042 (interrupt, 1, 12)
[ 56.773429] i8042: [55960] d4 -> i8042 (command)
[ 56.773620] i8042: [55960] 00 -> i8042 (parameter)
[ 56.776516] i8042: [55963] fa <- i8042 (interrupt, 1, 12)
[ 56.776637] i8042: [55963] d4 -> i8042 (command)
[ 56.776883] i8042: [55963] f8 -> i8042 (parameter)
[ 56.779702] i8042: [55966] fa <- i8042 (interrupt, 1, 12)
[ 56.779806] i8042: [55966] d4 -> i8042 (command)
[ 56.779995] i8042: [55966] 01 -> i8042 (parameter)
[ 56.782891] i8042: [55969] fa <- i8042 (interrupt, 1, 12)
[ 56.782994] i8042: [55969] d4 -> i8042 (command)
[ 56.783184] i8042: [55969] e6 -> i8042 (parameter)
[ 56.786076] i8042: [55972] fa <- i8042 (interrupt, 1, 12)
[ 56.786182] i8042: [55972] d4 -> i8042 (command)
[ 56.786373] i8042: [55972] f3 -> i8042 (parameter)
[ 56.789218] i8042: [55975] fa <- i8042 (interrupt, 1, 12)
[ 56.789309] i8042: [55975] d4 -> i8042 (command)
[ 56.789498] i8042: [55976] 64 -> i8042 (parameter)
[ 56.792417] i8042: [55979] fa <- i8042 (interrupt, 1, 12)
[ 56.792518] i8042: [55979] d4 -> i8042 (command)
[ 56.792707] i8042: [55979] e8 -> i8042 (parameter)
[ 56.795684] i8042: [55982] fa <- i8042 (interrupt, 1, 12)
[ 56.795796] i8042: [55982] d4 -> i8042 (command)
[ 56.795986] i8042: [55982] 03 -> i8042 (parameter)
[ 56.798857] i8042: [55985] fa <- i8042 (interrupt, 1, 12)
[ 56.798961] i8042: [55985] d4 -> i8042 (command)
[ 56.799150] i8042: [55985] e6 -> i8042 (parameter)
[ 56.801960] i8042: [55988] fa <- i8042 (interrupt, 1, 12)
[ 56.802533] i8042: [55989] d4 -> i8042 (command)
[ 56.802719] i8042: [55989] f4 -> i8042 (parameter)
[ 56.805760] i8042: [55992] fa <- i8042 (interrupt, 1, 12)
[ 56.826518] i8042: [56013] 08 <- i8042 (interrupt, 1, 12)
[ 56.827956] i8042: [56014] 00 <- i8042 (interrupt, 1, 12)
[ 56.829673] i8042: [56016] 00 <- i8042 (interrupt, 1, 12)
[ 56.836320] i8042: [56022] 64 <- i8042 (interrupt, 1, 12)
[ 56.837857] i8042: [56024] 01 <- i8042 (interrupt, 1, 12)
[ 56.839370] i8042: [56025] 00 <- i8042 (interrupt, 1, 12)
[ 56.839405] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.841043] i8042: [56027] 10 <- i8042 (interrupt, 1, 12)
[ 56.842539] i8042: [56029] 00 <- i8042 (interrupt, 1, 12)
[ 56.844183] i8042: [56030] 00 <- i8042 (interrupt, 1, 12)
[ 56.845738] i8042: [56032] 64 <- i8042 (interrupt, 1, 12)
[ 56.847382] i8042: [56033] 25 <- i8042 (interrupt, 1, 12)
[ 56.848963] i8042: [56035] 8a <- i8042 (interrupt, 1, 12)
[ 56.849000] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.850424] i8042: [56037] 31 <- i8042 (interrupt, 1, 12)
[ 56.852007] i8042: [56038] 72 <- i8042 (interrupt, 1, 12)
[ 56.853591] i8042: [56040] 8b <- i8042 (interrupt, 1, 12)
[ 56.855256] i8042: [56041] 64 <- i8042 (interrupt, 1, 12)
[ 56.856775] i8042: [56043] 25 <- i8042 (interrupt, 1, 12)
[ 56.858512] i8042: [56045] 8a <- i8042 (interrupt, 1, 12)
[ 56.858543] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.859983] i8042: [56046] 31 <- i8042 (interrupt, 1, 12)
[ 56.861562] i8042: [56048] c2 <- i8042 (interrupt, 1, 12)
[ 56.863171] i8042: [56049] 8b <- i8042 (interrupt, 1, 12)
[ 56.864809] i8042: [56051] 54 <- i8042 (interrupt, 1, 12)
[ 56.866402] i8042: [56053] 25 <- i8042 (interrupt, 1, 12)
[ 56.867973] i8042: [56054] 72 <- i8042 (interrupt, 1, 12)
[ 56.868009] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.869553] i8042: [56056] 31 <- i8042 (interrupt, 1, 12)
[ 56.871136] i8042: [56057] f2 <- i8042 (interrupt, 1, 12)
[ 56.872641] i8042: [56059] 7f <- i8042 (interrupt, 1, 12)
[ 56.874295] i8042: [56060] 64 <- i8042 (interrupt, 1, 12)
[ 56.875859] i8042: [56062] 25 <- i8042 (interrupt, 1, 12)
[ 56.877485] i8042: [56064] 60 <- i8042 (interrupt, 1, 12)
[ 56.877519] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 56.877534] psmouse serio1: issuing reconnect request
[ 56.877590] i8042: [56064] d4 -> i8042 (command)
[ 56.877792] i8042: [56064] ff -> i8042 (parameter)
[ 56.880603] i8042: [56067] fa <- i8042 (interrupt, 1, 12)
[ 56.981652] i8042: [56168] aa <- i8042 (interrupt, 1, 12)
[ 56.983227] i8042: [56169] 00 <- i8042 (interrupt, 1, 12)
[ 56.983330] i8042: [56169] d4 -> i8042 (command)
[ 56.983520] i8042: [56170] f6 -> i8042 (parameter)
[ 56.986450] i8042: [56173] fa <- i8042 (interrupt, 1, 12)
[ 56.986544] i8042: [56173] d4 -> i8042 (command)
[ 56.986734] i8042: [56173] f5 -> i8042 (parameter)
[ 56.989579] i8042: [56176] fa <- i8042 (interrupt, 1, 12)
[ 56.989657] i8042: [56176] d4 -> i8042 (command)
[ 56.990017] i8042: [56176] e6 -> i8042 (parameter)
[ 56.992808] i8042: [56179] fa <- i8042 (interrupt, 1, 12)
[ 56.992934] i8042: [56179] d4 -> i8042 (command)
[ 56.993123] i8042: [56179] e6 -> i8042 (parameter)
[ 56.996022] i8042: [56182] fa <- i8042 (interrupt, 1, 12)
[ 56.996125] i8042: [56182] d4 -> i8042 (command)
[ 56.996315] i8042: [56182] e6 -> i8042 (parameter)
[ 56.999230] i8042: [56185] fa <- i8042 (interrupt, 1, 12)
[ 56.999360] i8042: [56185] d4 -> i8042 (command)
[ 56.999551] i8042: [56186] e9 -> i8042 (parameter)
[ 57.002412] i8042: [56189] fa <- i8042 (interrupt, 1, 12)
[ 57.003976] i8042: [56190] 3c <- i8042 (interrupt, 1, 12)
[ 57.005563] i8042: [56192] 03 <- i8042 (interrupt, 1, 12)
[ 57.007148] i8042: [56193] 00 <- i8042 (interrupt, 1, 12)
[ 57.007252] i8042: [56193] d4 -> i8042 (command)
[ 57.007441] i8042: [56194] e6 -> i8042 (parameter)
[ 57.010357] i8042: [56196] fa <- i8042 (interrupt, 1, 12)
[ 57.010459] i8042: [56197] d4 -> i8042 (command)
[ 57.010649] i8042: [56197] e8 -> i8042 (parameter)
[ 57.013547] i8042: [56200] fa <- i8042 (interrupt, 1, 12)
[ 57.013649] i8042: [56200] d4 -> i8042 (command)
[ 57.013839] i8042: [56200] 00 -> i8042 (parameter)
[ 57.016746] i8042: [56203] fa <- i8042 (interrupt, 1, 12)
[ 57.016848] i8042: [56203] d4 -> i8042 (command)
[ 57.017038] i8042: [56203] e8 -> i8042 (parameter)
[ 57.019938] i8042: [56206] fa <- i8042 (interrupt, 1, 12)
[ 57.020039] i8042: [56206] d4 -> i8042 (command)
[ 57.020228] i8042: [56206] 00 -> i8042 (parameter)
[ 57.023126] i8042: [56209] fa <- i8042 (interrupt, 1, 12)
[ 57.023206] i8042: [56209] d4 -> i8042 (command)
[ 57.023395] i8042: [56209] e8 -> i8042 (parameter)
[ 57.026315] i8042: [56212] fa <- i8042 (interrupt, 1, 12)
[ 57.026449] i8042: [56213] d4 -> i8042 (command)
[ 57.026640] i8042: [56213] 00 -> i8042 (parameter)
[ 57.029517] i8042: [56216] fa <- i8042 (interrupt, 1, 12)
[ 57.029618] i8042: [56216] d4 -> i8042 (command)
[ 57.029807] i8042: [56216] e8 -> i8042 (parameter)
[ 57.032712] i8042: [56219] fa <- i8042 (interrupt, 1, 12)
[ 57.032812] i8042: [56219] d4 -> i8042 (command)
[ 57.033002] i8042: [56219] 01 -> i8042 (parameter)
[ 57.035908] i8042: [56222] fa <- i8042 (interrupt, 1, 12)
[ 57.036011] i8042: [56222] d4 -> i8042 (command)
[ 57.036200] i8042: [56222] e9 -> i8042 (parameter)
[ 57.039104] i8042: [56225] fa <- i8042 (interrupt, 1, 12)
[ 57.040681] i8042: [56227] 5e <- i8042 (interrupt, 1, 12)
[ 57.042265] i8042: [56228] 0f <- i8042 (interrupt, 1, 12)
[ 57.043840] i8042: [56230] 01 <- i8042 (interrupt, 1, 12)
[ 57.043944] i8042: [56230] d4 -> i8042 (command)
[ 57.044134] i8042: [56230] f8 -> i8042 (parameter)
[ 57.047044] i8042: [56233] fa <- i8042 (interrupt, 1, 12)
[ 57.047147] i8042: [56233] d4 -> i8042 (command)
[ 57.047337] i8042: [56233] 00 -> i8042 (parameter)
[ 57.050239] i8042: [56236] fa <- i8042 (interrupt, 1, 12)
[ 57.050343] i8042: [56236] d4 -> i8042 (command)
[ 57.050533] i8042: [56237] f8 -> i8042 (parameter)
[ 57.053432] i8042: [56240] fa <- i8042 (interrupt, 1, 12)
[ 57.053535] i8042: [56240] d4 -> i8042 (command)
[ 57.053725] i8042: [56240] 07 -> i8042 (parameter)
[ 57.056626] i8042: [56243] fa <- i8042 (interrupt, 1, 12)
[ 57.056729] i8042: [56243] d4 -> i8042 (command)
[ 57.056919] i8042: [56243] f8 -> i8042 (parameter)
[ 57.059824] i8042: [56246] fa <- i8042 (interrupt, 1, 12)
[ 57.059927] i8042: [56246] d4 -> i8042 (command)
[ 57.060173] i8042: [56246] 00 -> i8042 (parameter)
[ 57.063009] i8042: [56249] fa <- i8042 (interrupt, 1, 12)
[ 57.063092] i8042: [56249] d4 -> i8042 (command)
[ 57.063281] i8042: [56249] f8 -> i8042 (parameter)
[ 57.066206] i8042: [56252] fa <- i8042 (interrupt, 1, 12)
[ 57.066307] i8042: [56252] d4 -> i8042 (command)
[ 57.066502] i8042: [56252] 01 -> i8042 (parameter)
[ 57.069421] i8042: [56256] fa <- i8042 (interrupt, 1, 12)
[ 57.069539] i8042: [56256] d4 -> i8042 (command)
[ 57.069729] i8042: [56256] e6 -> i8042 (parameter)
[ 57.072603] i8042: [56259] fa <- i8042 (interrupt, 1, 12)
[ 57.072708] i8042: [56259] d4 -> i8042 (command)
[ 57.072897] i8042: [56259] f3 -> i8042 (parameter)
[ 57.075792] i8042: [56262] fa <- i8042 (interrupt, 1, 12)
[ 57.075892] i8042: [56262] d4 -> i8042 (command)
[ 57.076082] i8042: [56262] 64 -> i8042 (parameter)
[ 57.079007] i8042: [56265] fa <- i8042 (interrupt, 1, 12)
[ 57.079125] i8042: [56265] d4 -> i8042 (command)
[ 57.079314] i8042: [56265] e8 -> i8042 (parameter)
[ 57.082177] i8042: [56268] fa <- i8042 (interrupt, 1, 12)
[ 57.082276] i8042: [56268] d4 -> i8042 (command)
[ 57.082466] i8042: [56269] 03 -> i8042 (parameter)
[ 57.085370] i8042: [56271] fa <- i8042 (interrupt, 1, 12)
[ 57.085461] i8042: [56272] d4 -> i8042 (command)
[ 57.085646] i8042: [56272] e6 -> i8042 (parameter)
[ 57.088546] i8042: [56275] fa <- i8042 (interrupt, 1, 12)
[ 57.088650] i8042: [56275] d4 -> i8042 (command)
[ 57.088840] i8042: [56275] f4 -> i8042 (parameter)
[ 57.091755] i8042: [56278] fa <- i8042 (interrupt, 1, 12)
[ 57.112017] i8042: [56298] 08 <- i8042 (interrupt, 1, 12)
[ 57.113603] i8042: [56300] 00 <- i8042 (interrupt, 1, 12)
[ 57.115187] i8042: [56301] 00 <- i8042 (interrupt, 1, 12)
[ 57.121814] i8042: [56308] 54 <- i8042 (interrupt, 1, 12)
[ 57.123394] i8042: [56309] 01 <- i8042 (interrupt, 1, 12)
[ 57.124981] i8042: [56311] 00 <- i8042 (interrupt, 1, 12)
[ 57.125016] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.126576] i8042: [56313] 10 <- i8042 (interrupt, 1, 12)
[ 57.128149] i8042: [56314] 00 <- i8042 (interrupt, 1, 12)
[ 57.129651] i8042: [56316] 00 <- i8042 (interrupt, 1, 12)
[ 57.131309] i8042: [56317] 54 <- i8042 (interrupt, 1, 12)
[ 57.132883] i8042: [56319] 11 <- i8042 (interrupt, 1, 12)
[ 57.134491] i8042: [56321] a4 <- i8042 (interrupt, 1, 12)
[ 57.134527] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.136068] i8042: [56322] 31 <- i8042 (interrupt, 1, 12)
[ 57.137582] i8042: [56324] f2 <- i8042 (interrupt, 1, 12)
[ 57.139229] i8042: [56325] 35 <- i8042 (interrupt, 1, 12)
[ 57.140813] i8042: [56327] 54 <- i8042 (interrupt, 1, 12)
[ 57.142393] i8042: [56328] 21 <- i8042 (interrupt, 1, 12)
[ 57.143957] i8042: [56330] a4 <- i8042 (interrupt, 1, 12)
[ 57.143989] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.145557] i8042: [56332] 31 <- i8042 (interrupt, 1, 12)
[ 57.147152] i8042: [56333] 42 <- i8042 (interrupt, 1, 12)
[ 57.148733] i8042: [56335] 35 <- i8042 (interrupt, 1, 12)
[ 57.150319] i8042: [56336] 64 <- i8042 (interrupt, 1, 12)
[ 57.151877] i8042: [56338] 22 <- i8042 (interrupt, 1, 12)
[ 57.153477] i8042: [56340] 3f <- i8042 (interrupt, 1, 12)
[ 57.153513] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.155067] i8042: [56341] 31 <- i8042 (interrupt, 1, 12)
[ 57.156607] i8042: [56343] 62 <- i8042 (interrupt, 1, 12)
[ 57.158231] i8042: [56344] 44 <- i8042 (interrupt, 1, 12)
[ 57.159783] i8042: [56346] 54 <- i8042 (interrupt, 1, 12)
[ 57.161398] i8042: [56347] 22 <- i8042 (interrupt, 1, 12)
[ 57.162974] i8042: [56349] 8f <- i8042 (interrupt, 1, 12)
[ 57.163008] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.163022] psmouse serio1: issuing reconnect request
[ 57.163117] i8042: [56349] d4 -> i8042 (command)
[ 57.163308] i8042: [56349] ff -> i8042 (parameter)
[ 57.166170] i8042: [56352] fa <- i8042 (interrupt, 1, 12)
[ 57.267193] i8042: [56453] aa <- i8042 (interrupt, 1, 12)
[ 57.268776] i8042: [56455] 00 <- i8042 (interrupt, 1, 12)
[ 57.268879] i8042: [56455] d4 -> i8042 (command)
[ 57.269125] i8042: [56455] f6 -> i8042 (parameter)
[ 57.271987] i8042: [56458] fa <- i8042 (interrupt, 1, 12)
[ 57.272090] i8042: [56458] d4 -> i8042 (command)
[ 57.272279] i8042: [56458] f5 -> i8042 (parameter)
[ 57.275180] i8042: [56461] fa <- i8042 (interrupt, 1, 12)
[ 57.275281] i8042: [56461] d4 -> i8042 (command)
[ 57.275471] i8042: [56462] e6 -> i8042 (parameter)
[ 57.278380] i8042: [56464] fa <- i8042 (interrupt, 1, 12)
[ 57.278483] i8042: [56465] d4 -> i8042 (command)
[ 57.278730] i8042: [56465] e6 -> i8042 (parameter)
[ 57.281562] i8042: [56468] fa <- i8042 (interrupt, 1, 12)
[ 57.281665] i8042: [56468] d4 -> i8042 (command)
[ 57.281854] i8042: [56468] e6 -> i8042 (parameter)
[ 57.284775] i8042: [56471] fa <- i8042 (interrupt, 1, 12)
[ 57.284878] i8042: [56471] d4 -> i8042 (command)
[ 57.285067] i8042: [56471] e9 -> i8042 (parameter)
[ 57.287958] i8042: [56474] fa <- i8042 (interrupt, 1, 12)
[ 57.289560] i8042: [56476] 3c <- i8042 (interrupt, 1, 12)
[ 57.291114] i8042: [56477] 03 <- i8042 (interrupt, 1, 12)
[ 57.292616] i8042: [56479] 00 <- i8042 (interrupt, 1, 12)
[ 57.292711] i8042: [56479] d4 -> i8042 (command)
[ 57.292901] i8042: [56479] e6 -> i8042 (parameter)
[ 57.295904] i8042: [56482] fa <- i8042 (interrupt, 1, 12)
[ 57.296004] i8042: [56482] d4 -> i8042 (command)
[ 57.296194] i8042: [56482] e8 -> i8042 (parameter)
[ 57.299098] i8042: [56485] fa <- i8042 (interrupt, 1, 12)
[ 57.299197] i8042: [56485] d4 -> i8042 (command)
[ 57.299387] i8042: [56486] 00 -> i8042 (parameter)
[ 57.302290] i8042: [56488] fa <- i8042 (interrupt, 1, 12)
[ 57.302426] i8042: [56489] d4 -> i8042 (command)
[ 57.302616] i8042: [56489] e8 -> i8042 (parameter)
[ 57.305492] i8042: [56492] fa <- i8042 (interrupt, 1, 12)
[ 57.305592] i8042: [56492] d4 -> i8042 (command)
[ 57.305839] i8042: [56492] 00 -> i8042 (parameter)
[ 57.308675] i8042: [56495] fa <- i8042 (interrupt, 1, 12)
[ 57.308777] i8042: [56495] d4 -> i8042 (command)
[ 57.308967] i8042: [56495] e8 -> i8042 (parameter)
[ 57.311875] i8042: [56498] fa <- i8042 (interrupt, 1, 12)
[ 57.312176] i8042: [56498] d4 -> i8042 (command)
[ 57.312385] i8042: [56499] 00 -> i8042 (parameter)
[ 57.315095] i8042: [56501] fa <- i8042 (interrupt, 1, 12)
[ 57.315211] i8042: [56501] d4 -> i8042 (command)
[ 57.315401] i8042: [56502] e8 -> i8042 (parameter)
[ 57.318265] i8042: [56504] fa <- i8042 (interrupt, 1, 12)
[ 57.318364] i8042: [56504] d4 -> i8042 (command)
[ 57.318610] i8042: [56505] 01 -> i8042 (parameter)
[ 57.321475] i8042: [56508] fa <- i8042 (interrupt, 1, 12)
[ 57.321593] i8042: [56508] d4 -> i8042 (command)
[ 57.321783] i8042: [56508] e9 -> i8042 (parameter)
[ 57.324658] i8042: [56511] fa <- i8042 (interrupt, 1, 12)
[ 57.326229] i8042: [56512] 5e <- i8042 (interrupt, 1, 12)
[ 57.327802] i8042: [56514] 0f <- i8042 (interrupt, 1, 12)
[ 57.329382] i8042: [56515] 01 <- i8042 (interrupt, 1, 12)
[ 57.329482] i8042: [56516] d4 -> i8042 (command)
[ 57.329673] i8042: [56516] f8 -> i8042 (parameter)
[ 57.332597] i8042: [56519] fa <- i8042 (interrupt, 1, 12)
[ 57.332699] i8042: [56519] d4 -> i8042 (command)
[ 57.332889] i8042: [56519] 00 -> i8042 (parameter)
[ 57.335772] i8042: [56522] fa <- i8042 (interrupt, 1, 12)
[ 57.335874] i8042: [56522] d4 -> i8042 (command)
[ 57.336064] i8042: [56522] f8 -> i8042 (parameter)
[ 57.338968] i8042: [56525] fa <- i8042 (interrupt, 1, 12)
[ 57.339072] i8042: [56525] d4 -> i8042 (command)
[ 57.339262] i8042: [56525] 07 -> i8042 (parameter)
[ 57.342161] i8042: [56528] fa <- i8042 (interrupt, 1, 12)
[ 57.342264] i8042: [56528] d4 -> i8042 (command)
[ 57.342454] i8042: [56529] f8 -> i8042 (parameter)
[ 57.345366] i8042: [56531] fa <- i8042 (interrupt, 1, 12)
[ 57.345470] i8042: [56532] d4 -> i8042 (command)
[ 57.345717] i8042: [56532] 00 -> i8042 (parameter)
[ 57.348570] i8042: [56535] fa <- i8042 (interrupt, 1, 12)
[ 57.348689] i8042: [56535] d4 -> i8042 (command)
[ 57.348878] i8042: [56535] f8 -> i8042 (parameter)
[ 57.351749] i8042: [56538] fa <- i8042 (interrupt, 1, 12)
[ 57.351852] i8042: [56538] d4 -> i8042 (command)
[ 57.352098] i8042: [56538] 01 -> i8042 (parameter)
[ 57.354963] i8042: [56541] fa <- i8042 (interrupt, 1, 12)
[ 57.355088] i8042: [56541] d4 -> i8042 (command)
[ 57.355289] i8042: [56541] e6 -> i8042 (parameter)
[ 57.358155] i8042: [56544] fa <- i8042 (interrupt, 1, 12)
[ 57.358278] i8042: [56544] d4 -> i8042 (command)
[ 57.358467] i8042: [56545] f3 -> i8042 (parameter)
[ 57.361338] i8042: [56547] fa <- i8042 (interrupt, 1, 12)
[ 57.361439] i8042: [56548] d4 -> i8042 (command)
[ 57.361628] i8042: [56548] 64 -> i8042 (parameter)
[ 57.364527] i8042: [56551] fa <- i8042 (interrupt, 1, 12)
[ 57.364630] i8042: [56551] d4 -> i8042 (command)
[ 57.364876] i8042: [56551] e8 -> i8042 (parameter)
[ 57.367720] i8042: [56554] fa <- i8042 (interrupt, 1, 12)
[ 57.367820] i8042: [56554] d4 -> i8042 (command)
[ 57.368009] i8042: [56554] 03 -> i8042 (parameter)
[ 57.370916] i8042: [56557] fa <- i8042 (interrupt, 1, 12)
[ 57.371019] i8042: [56557] d4 -> i8042 (command)
[ 57.371266] i8042: [56557] e6 -> i8042 (parameter)
[ 57.374112] i8042: [56560] fa <- i8042 (interrupt, 1, 12)
[ 57.374215] i8042: [56560] d4 -> i8042 (command)
[ 57.374462] i8042: [56561] f4 -> i8042 (parameter)
[ 57.377307] i8042: [56563] fa <- i8042 (interrupt, 1, 12)
[ 57.398556] i8042: [56585] 08 <- i8042 (interrupt, 1, 12)
[ 57.400137] i8042: [56586] 00 <- i8042 (interrupt, 1, 12)
[ 57.401726] i8042: [56588] 00 <- i8042 (interrupt, 1, 12)
[ 57.408356] i8042: [56594] 54 <- i8042 (interrupt, 1, 12)
[ 57.409931] i8042: [56596] 01 <- i8042 (interrupt, 1, 12)
[ 57.411505] i8042: [56598] 00 <- i8042 (interrupt, 1, 12)
[ 57.411542] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.413103] i8042: [56599] 10 <- i8042 (interrupt, 1, 12)
[ 57.414686] i8042: [56601] 00 <- i8042 (interrupt, 1, 12)
[ 57.416264] i8042: [56602] 00 <- i8042 (interrupt, 1, 12)
[ 57.417852] i8042: [56604] 54 <- i8042 (interrupt, 1, 12)
[ 57.419443] i8042: [56606] 11 <- i8042 (interrupt, 1, 12)
[ 57.421033] i8042: [56607] 5c <- i8042 (interrupt, 1, 12)
[ 57.421072] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.422570] i8042: [56609] 31 <- i8042 (interrupt, 1, 12)
[ 57.424186] i8042: [56610] f2 <- i8042 (interrupt, 1, 12)
[ 57.425741] i8042: [56612] 97 <- i8042 (interrupt, 1, 12)
[ 57.427345] i8042: [56613] 54 <- i8042 (interrupt, 1, 12)
[ 57.428931] i8042: [56615] 21 <- i8042 (interrupt, 1, 12)
[ 57.430504] i8042: [56617] 5c <- i8042 (interrupt, 1, 12)
[ 57.430543] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.432113] i8042: [56618] 31 <- i8042 (interrupt, 1, 12)
[ 57.433681] i8042: [56620] 42 <- i8042 (interrupt, 1, 12)
[ 57.435262] i8042: [56621] 97 <- i8042 (interrupt, 1, 12)
[ 57.436846] i8042: [56623] 54 <- i8042 (interrupt, 1, 12)
[ 57.438428] i8042: [56625] 21 <- i8042 (interrupt, 1, 12)
[ 57.440009] i8042: [56626] 24 <- i8042 (interrupt, 1, 12)
[ 57.440050] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.441535] i8042: [56628] 31 <- i8042 (interrupt, 1, 12)
[ 57.443189] i8042: [56629] 62 <- i8042 (interrupt, 1, 12)
[ 57.444747] i8042: [56631] 76 <- i8042 (interrupt, 1, 12)
[ 57.446345] i8042: [56632] 54 <- i8042 (interrupt, 1, 12)
[ 57.447922] i8042: [56634] 21 <- i8042 (interrupt, 1, 12)
[ 57.449503] i8042: [56636] 1f <- i8042 (interrupt, 1, 12)
[ 57.449542] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.449559] psmouse serio1: issuing reconnect request
[ 57.449636] i8042: [56636] d4 -> i8042 (command)
[ 57.449826] i8042: [56636] ff -> i8042 (parameter)
[ 57.452711] i8042: [56639] fa <- i8042 (interrupt, 1, 12)
[ 57.553679] i8042: [56740] aa <- i8042 (interrupt, 1, 12)
[ 57.555330] i8042: [56741] 00 <- i8042 (interrupt, 1, 12)
[ 57.555449] i8042: [56742] d4 -> i8042 (command)
[ 57.555696] i8042: [56742] f6 -> i8042 (parameter)
[ 57.558525] i8042: [56745] fa <- i8042 (interrupt, 1, 12)
[ 57.558628] i8042: [56745] d4 -> i8042 (command)
[ 57.558817] i8042: [56745] f5 -> i8042 (parameter)
[ 57.561719] i8042: [56748] fa <- i8042 (interrupt, 1, 12)
[ 57.561822] i8042: [56748] d4 -> i8042 (command)
[ 57.562069] i8042: [56748] e6 -> i8042 (parameter)
[ 57.564911] i8042: [56751] fa <- i8042 (interrupt, 1, 12)
[ 57.565014] i8042: [56751] d4 -> i8042 (command)
[ 57.565204] i8042: [56751] e6 -> i8042 (parameter)
[ 57.568106] i8042: [56754] fa <- i8042 (interrupt, 1, 12)
[ 57.568208] i8042: [56754] d4 -> i8042 (command)
[ 57.568398] i8042: [56755] e6 -> i8042 (parameter)
[ 57.571314] i8042: [56757] fa <- i8042 (interrupt, 1, 12)
[ 57.571418] i8042: [56758] d4 -> i8042 (command)
[ 57.571608] i8042: [56758] e9 -> i8042 (parameter)
[ 57.574491] i8042: [56761] fa <- i8042 (interrupt, 1, 12)
[ 57.576051] i8042: [56762] 3c <- i8042 (interrupt, 1, 12)
[ 57.577645] i8042: [56764] 03 <- i8042 (interrupt, 1, 12)
[ 57.579215] i8042: [56765] 00 <- i8042 (interrupt, 1, 12)
[ 57.579316] i8042: [56765] d4 -> i8042 (command)
[ 57.579563] i8042: [56766] e6 -> i8042 (parameter)
[ 57.582450] i8042: [56769] fa <- i8042 (interrupt, 1, 12)
[ 57.582526] i8042: [56769] d4 -> i8042 (command)
[ 57.582716] i8042: [56769] e8 -> i8042 (parameter)
[ 57.585559] i8042: [56772] fa <- i8042 (interrupt, 1, 12)
[ 57.585831] i8042: [56772] d4 -> i8042 (command)
[ 57.586023] i8042: [56772] 00 -> i8042 (parameter)
[ 57.588706] i8042: [56775] fa <- i8042 (interrupt, 1, 12)
[ 57.588911] i8042: [56775] d4 -> i8042 (command)
[ 57.589102] i8042: [56775] e8 -> i8042 (parameter)
[ 57.592001] i8042: [56778] fa <- i8042 (interrupt, 1, 12)
[ 57.592081] i8042: [56778] d4 -> i8042 (command)
[ 57.592270] i8042: [56778] 00 -> i8042 (parameter)
[ 57.595215] i8042: [56781] fa <- i8042 (interrupt, 1, 12)
[ 57.595293] i8042: [56781] d4 -> i8042 (command)
[ 57.595483] i8042: [56781] e8 -> i8042 (parameter)
[ 57.598394] i8042: [56784] fa <- i8042 (interrupt, 1, 12)
[ 57.598506] i8042: [56785] d4 -> i8042 (command)
[ 57.598695] i8042: [56785] 00 -> i8042 (parameter)
[ 57.601535] i8042: [56788] fa <- i8042 (interrupt, 1, 12)
[ 57.601633] i8042: [56788] d4 -> i8042 (command)
[ 57.601881] i8042: [56788] e8 -> i8042 (parameter)
[ 57.604787] i8042: [56791] fa <- i8042 (interrupt, 1, 12)
[ 57.604866] i8042: [56791] d4 -> i8042 (command)
[ 57.605056] i8042: [56791] 01 -> i8042 (parameter)
[ 57.607987] i8042: [56794] fa <- i8042 (interrupt, 1, 12)
[ 57.608068] i8042: [56794] d4 -> i8042 (command)
[ 57.608314] i8042: [56794] e9 -> i8042 (parameter)
[ 57.611173] i8042: [56797] fa <- i8042 (interrupt, 1, 12)
[ 57.612750] i8042: [56799] 5e <- i8042 (interrupt, 1, 12)
[ 57.614331] i8042: [56800] 0f <- i8042 (interrupt, 1, 12)
[ 57.615917] i8042: [56802] 01 <- i8042 (interrupt, 1, 12)
[ 57.616020] i8042: [56802] d4 -> i8042 (command)
[ 57.616209] i8042: [56802] f8 -> i8042 (parameter)
[ 57.619134] i8042: [56805] fa <- i8042 (interrupt, 1, 12)
[ 57.619236] i8042: [56805] d4 -> i8042 (command)
[ 57.619426] i8042: [56806] 00 -> i8042 (parameter)
[ 57.622327] i8042: [56808] fa <- i8042 (interrupt, 1, 12)
[ 57.622429] i8042: [56809] d4 -> i8042 (command)
[ 57.622619] i8042: [56809] f8 -> i8042 (parameter)
[ 57.625520] i8042: [56812] fa <- i8042 (interrupt, 1, 12)
[ 57.625623] i8042: [56812] d4 -> i8042 (command)
[ 57.625869] i8042: [56812] 07 -> i8042 (parameter)
[ 57.628712] i8042: [56815] fa <- i8042 (interrupt, 1, 12)
[ 57.628815] i8042: [56815] d4 -> i8042 (command)
[ 57.629004] i8042: [56815] f8 -> i8042 (parameter)
[ 57.631909] i8042: [56818] fa <- i8042 (interrupt, 1, 12)
[ 57.632012] i8042: [56818] d4 -> i8042 (command)
[ 57.632202] i8042: [56818] 00 -> i8042 (parameter)
[ 57.635093] i8042: [56821] fa <- i8042 (interrupt, 1, 12)
[ 57.635195] i8042: [56821] d4 -> i8042 (command)
[ 57.635385] i8042: [56822] f8 -> i8042 (parameter)
[ 57.638274] i8042: [56824] fa <- i8042 (interrupt, 1, 12)
[ 57.638378] i8042: [56824] d4 -> i8042 (command)
[ 57.638624] i8042: [56825] 01 -> i8042 (parameter)
[ 57.641471] i8042: [56828] fa <- i8042 (interrupt, 1, 12)
[ 57.641573] i8042: [56828] d4 -> i8042 (command)
[ 57.641763] i8042: [56828] e6 -> i8042 (parameter)
[ 57.644665] i8042: [56831] fa <- i8042 (interrupt, 1, 12)
[ 57.644769] i8042: [56831] d4 -> i8042 (command)
[ 57.644959] i8042: [56831] f3 -> i8042 (parameter)
[ 57.647855] i8042: [56834] fa <- i8042 (interrupt, 1, 12)
[ 57.647955] i8042: [56834] d4 -> i8042 (command)
[ 57.648144] i8042: [56834] 64 -> i8042 (parameter)
[ 57.651050] i8042: [56837] fa <- i8042 (interrupt, 1, 12)
[ 57.651153] i8042: [56837] d4 -> i8042 (command)
[ 57.651398] i8042: [56838] e8 -> i8042 (parameter)
[ 57.654241] i8042: [56840] fa <- i8042 (interrupt, 1, 12)
[ 57.654342] i8042: [56840] d4 -> i8042 (command)
[ 57.654532] i8042: [56841] 03 -> i8042 (parameter)
[ 57.657440] i8042: [56844] fa <- i8042 (interrupt, 1, 12)
[ 57.657542] i8042: [56844] d4 -> i8042 (command)
[ 57.657732] i8042: [56844] e6 -> i8042 (parameter)
[ 57.660642] i8042: [56847] fa <- i8042 (interrupt, 1, 12)
[ 57.660745] i8042: [56847] d4 -> i8042 (command)
[ 57.660992] i8042: [56847] f4 -> i8042 (parameter)
[ 57.663832] i8042: [56850] fa <- i8042 (interrupt, 1, 12)
[ 57.684578] i8042: [56871] 08 <- i8042 (interrupt, 1, 12)
[ 57.686152] i8042: [56872] 00 <- i8042 (interrupt, 1, 12)
[ 57.687728] i8042: [56874] 00 <- i8042 (interrupt, 1, 12)
[ 57.694376] i8042: [56880] 64 <- i8042 (interrupt, 1, 12)
[ 57.695948] i8042: [56882] 01 <- i8042 (interrupt, 1, 12)
[ 57.697512] i8042: [56884] 00 <- i8042 (interrupt, 1, 12)
[ 57.697551] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.699109] i8042: [56885] 10 <- i8042 (interrupt, 1, 12)
[ 57.700644] i8042: [56887] 00 <- i8042 (interrupt, 1, 12)
[ 57.702281] i8042: [56888] 00 <- i8042 (interrupt, 1, 12)
[ 57.703869] i8042: [56890] 64 <- i8042 (interrupt, 1, 12)
[ 57.705359] i8042: [56891] 23 <- i8042 (interrupt, 1, 12)
[ 57.707032] i8042: [56893] 94 <- i8042 (interrupt, 1, 12)
[ 57.707073] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.708622] i8042: [56895] 31 <- i8042 (interrupt, 1, 12)
[ 57.710204] i8042: [56896] 42 <- i8042 (interrupt, 1, 12)
[ 57.711805] i8042: [56898] f8 <- i8042 (interrupt, 1, 12)
[ 57.713363] i8042: [56899] 54 <- i8042 (interrupt, 1, 12)
[ 57.714955] i8042: [56901] 23 <- i8042 (interrupt, 1, 12)
[ 57.716544] i8042: [56903] 94 <- i8042 (interrupt, 1, 12)
[ 57.716584] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.718116] i8042: [56904] 31 <- i8042 (interrupt, 1, 12)
[ 57.719638] i8042: [56906] 72 <- i8042 (interrupt, 1, 12)
[ 57.721277] i8042: [56907] f8 <- i8042 (interrupt, 1, 12)
[ 57.722865] i8042: [56909] 54 <- i8042 (interrupt, 1, 12)
[ 57.724443] i8042: [56911] 23 <- i8042 (interrupt, 1, 12)
[ 57.726040] i8042: [56912] 56 <- i8042 (interrupt, 1, 12)
[ 57.726080] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.727610] i8042: [56914] 31 <- i8042 (interrupt, 1, 12)
[ 57.729194] i8042: [56915] a3 <- i8042 (interrupt, 1, 12)
[ 57.730781] i8042: [56917] 00 <- i8042 (interrupt, 1, 12)
[ 57.732354] i8042: [56918] 54 <- i8042 (interrupt, 1, 12)
[ 57.733939] i8042: [56920] 23 <- i8042 (interrupt, 1, 12)
[ 57.735506] i8042: [56922] 0a <- i8042 (interrupt, 1, 12)
[ 57.735546] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.735563] psmouse serio1: issuing reconnect request
[ 57.735641] i8042: [56922] d4 -> i8042 (command)
[ 57.735831] i8042: [56922] ff -> i8042 (parameter)
[ 57.738727] i8042: [56925] fa <- i8042 (interrupt, 1, 12)
[ 57.839780] i8042: [57026] aa <- i8042 (interrupt, 1, 12)
[ 57.841330] i8042: [57027] 00 <- i8042 (interrupt, 1, 12)
[ 57.841438] i8042: [57028] d4 -> i8042 (command)
[ 57.841628] i8042: [57028] f6 -> i8042 (parameter)
[ 57.844553] i8042: [57031] fa <- i8042 (interrupt, 1, 12)
[ 57.844654] i8042: [57031] d4 -> i8042 (command)
[ 57.844844] i8042: [57031] f5 -> i8042 (parameter)
[ 57.847750] i8042: [57034] fa <- i8042 (interrupt, 1, 12)
[ 57.847852] i8042: [57034] d4 -> i8042 (command)
[ 57.848098] i8042: [57034] e6 -> i8042 (parameter)
[ 57.850942] i8042: [57037] fa <- i8042 (interrupt, 1, 12)
[ 57.851044] i8042: [57037] d4 -> i8042 (command)
[ 57.851234] i8042: [57037] e6 -> i8042 (parameter)
[ 57.854110] i8042: [57040] fa <- i8042 (interrupt, 1, 12)
[ 57.854225] i8042: [57040] d4 -> i8042 (command)
[ 57.854415] i8042: [57041] e6 -> i8042 (parameter)
[ 57.857337] i8042: [57043] fa <- i8042 (interrupt, 1, 12)
[ 57.857439] i8042: [57044] d4 -> i8042 (command)
[ 57.857629] i8042: [57044] e9 -> i8042 (parameter)
[ 57.860528] i8042: [57047] fa <- i8042 (interrupt, 1, 12)
[ 57.862091] i8042: [57048] 3c <- i8042 (interrupt, 1, 12)
[ 57.863669] i8042: [57050] 03 <- i8042 (interrupt, 1, 12)
[ 57.865251] i8042: [57051] 00 <- i8042 (interrupt, 1, 12)
[ 57.865352] i8042: [57051] d4 -> i8042 (command)
[ 57.865542] i8042: [57052] e6 -> i8042 (parameter)
[ 57.868468] i8042: [57055] fa <- i8042 (interrupt, 1, 12)
[ 57.868568] i8042: [57055] d4 -> i8042 (command)
[ 57.868758] i8042: [57055] e8 -> i8042 (parameter)
[ 57.871661] i8042: [57058] fa <- i8042 (interrupt, 1, 12)
[ 57.871760] i8042: [57058] d4 -> i8042 (command)
[ 57.871949] i8042: [57058] 00 -> i8042 (parameter)
[ 57.874857] i8042: [57061] fa <- i8042 (interrupt, 1, 12)
[ 57.874958] i8042: [57061] d4 -> i8042 (command)
[ 57.875147] i8042: [57061] e8 -> i8042 (parameter)
[ 57.878050] i8042: [57064] fa <- i8042 (interrupt, 1, 12)
[ 57.878149] i8042: [57064] d4 -> i8042 (command)
[ 57.878339] i8042: [57064] 00 -> i8042 (parameter)
[ 57.881244] i8042: [57067] fa <- i8042 (interrupt, 1, 12)
[ 57.881344] i8042: [57067] d4 -> i8042 (command)
[ 57.881591] i8042: [57068] e8 -> i8042 (parameter)
[ 57.884439] i8042: [57071] fa <- i8042 (interrupt, 1, 12)
[ 57.884537] i8042: [57071] d4 -> i8042 (command)
[ 57.884727] i8042: [57071] 00 -> i8042 (parameter)
[ 57.887636] i8042: [57074] fa <- i8042 (interrupt, 1, 12)
[ 57.887737] i8042: [57074] d4 -> i8042 (command)
[ 57.888154] i8042: [57074] e8 -> i8042 (parameter)
[ 57.890830] i8042: [57077] fa <- i8042 (interrupt, 1, 12)
[ 57.890929] i8042: [57077] d4 -> i8042 (command)
[ 57.891119] i8042: [57077] 01 -> i8042 (parameter)
[ 57.894019] i8042: [57080] fa <- i8042 (interrupt, 1, 12)
[ 57.894121] i8042: [57080] d4 -> i8042 (command)
[ 57.894311] i8042: [57080] e9 -> i8042 (parameter)
[ 57.897202] i8042: [57083] fa <- i8042 (interrupt, 1, 12)
[ 57.898736] i8042: [57085] 5e <- i8042 (interrupt, 1, 12)
[ 57.900357] i8042: [57086] 0f <- i8042 (interrupt, 1, 12)
[ 57.901933] i8042: [57088] 01 <- i8042 (interrupt, 1, 12)
[ 57.902036] i8042: [57088] d4 -> i8042 (command)
[ 57.902225] i8042: [57088] f8 -> i8042 (parameter)
[ 57.905140] i8042: [57091] fa <- i8042 (interrupt, 1, 12)
[ 57.905224] i8042: [57091] d4 -> i8042 (command)
[ 57.905471] i8042: [57092] 00 -> i8042 (parameter)
[ 57.908344] i8042: [57094] fa <- i8042 (interrupt, 1, 12)
[ 57.908459] i8042: [57095] d4 -> i8042 (command)
[ 57.908649] i8042: [57095] f8 -> i8042 (parameter)
[ 57.911549] i8042: [57098] fa <- i8042 (interrupt, 1, 12)
[ 57.911651] i8042: [57098] d4 -> i8042 (command)
[ 57.911841] i8042: [57098] 07 -> i8042 (parameter)
[ 57.914742] i8042: [57101] fa <- i8042 (interrupt, 1, 12)
[ 57.914844] i8042: [57101] d4 -> i8042 (command)
[ 57.915091] i8042: [57101] f8 -> i8042 (parameter)
[ 57.917942] i8042: [57104] fa <- i8042 (interrupt, 1, 12)
[ 57.918044] i8042: [57104] d4 -> i8042 (command)
[ 57.918234] i8042: [57104] 00 -> i8042 (parameter)
[ 57.921131] i8042: [57107] fa <- i8042 (interrupt, 1, 12)
[ 57.921234] i8042: [57107] d4 -> i8042 (command)
[ 57.921424] i8042: [57108] f8 -> i8042 (parameter)
[ 57.924326] i8042: [57110] fa <- i8042 (interrupt, 1, 12)
[ 57.924428] i8042: [57111] d4 -> i8042 (command)
[ 57.924617] i8042: [57111] 01 -> i8042 (parameter)
[ 57.927520] i8042: [57114] fa <- i8042 (interrupt, 1, 12)
[ 57.927623] i8042: [57114] d4 -> i8042 (command)
[ 57.927869] i8042: [57114] e6 -> i8042 (parameter)
[ 57.930726] i8042: [57117] fa <- i8042 (interrupt, 1, 12)
[ 57.930831] i8042: [57117] d4 -> i8042 (command)
[ 57.931021] i8042: [57117] f3 -> i8042 (parameter)
[ 57.933917] i8042: [57120] fa <- i8042 (interrupt, 1, 12)
[ 57.934016] i8042: [57120] d4 -> i8042 (command)
[ 57.934206] i8042: [57120] 64 -> i8042 (parameter)
[ 57.937095] i8042: [57123] fa <- i8042 (interrupt, 1, 12)
[ 57.937198] i8042: [57123] d4 -> i8042 (command)
[ 57.937445] i8042: [57124] e8 -> i8042 (parameter)
[ 57.940279] i8042: [57126] fa <- i8042 (interrupt, 1, 12)
[ 57.940378] i8042: [57126] d4 -> i8042 (command)
[ 57.940568] i8042: [57127] 03 -> i8042 (parameter)
[ 57.943474] i8042: [57130] fa <- i8042 (interrupt, 1, 12)
[ 57.943577] i8042: [57130] d4 -> i8042 (command)
[ 57.943767] i8042: [57130] e6 -> i8042 (parameter)
[ 57.946670] i8042: [57133] fa <- i8042 (interrupt, 1, 12)
[ 57.946772] i8042: [57133] d4 -> i8042 (command)
[ 57.946962] i8042: [57133] f4 -> i8042 (parameter)
[ 57.949869] i8042: [57136] fa <- i8042 (interrupt, 1, 12)
[ 57.970102] i8042: [57156] 08 <- i8042 (interrupt, 1, 12)
[ 57.971628] i8042: [57158] 00 <- i8042 (interrupt, 1, 12)
[ 57.973238] i8042: [57159] 00 <- i8042 (interrupt, 1, 12)
[ 57.979872] i8042: [57166] 54 <- i8042 (interrupt, 1, 12)
[ 57.981493] i8042: [57168] 01 <- i8042 (interrupt, 1, 12)
[ 57.983065] i8042: [57169] 00 <- i8042 (interrupt, 1, 12)
[ 57.983104] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.984587] i8042: [57171] 10 <- i8042 (interrupt, 1, 12)
[ 57.986171] i8042: [57172] 00 <- i8042 (interrupt, 1, 12)
[ 57.987713] i8042: [57174] 00 <- i8042 (interrupt, 1, 12)
[ 57.989292] i8042: [57175] 54 <- i8042 (interrupt, 1, 12)
[ 57.990871] i8042: [57177] 23 <- i8042 (interrupt, 1, 12)
[ 57.992454] i8042: [57179] 57 <- i8042 (interrupt, 1, 12)
[ 57.992469] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 57.994128] i8042: [57180] 31 <- i8042 (interrupt, 1, 12)
[ 57.995706] i8042: [57182] 22 <- i8042 (interrupt, 1, 12)
[ 57.997324] i8042: [57183] cb <- i8042 (interrupt, 1, 12)
[ 57.998809] i8042: [57185] 64 <- i8042 (interrupt, 1, 12)
[ 58.000484] i8042: [57187] 23 <- i8042 (interrupt, 1, 12)
[ 58.002054] i8042: [57188] 57 <- i8042 (interrupt, 1, 12)
[ 58.002080] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.003564] i8042: [57190] 31 <- i8042 (interrupt, 1, 12)
[ 58.005234] i8042: [57191] 72 <- i8042 (interrupt, 1, 12)
[ 58.006820] i8042: [57193] cb <- i8042 (interrupt, 1, 12)
[ 58.008396] i8042: [57194] 64 <- i8042 (interrupt, 1, 12)
[ 58.009994] i8042: [57196] 24 <- i8042 (interrupt, 1, 12)
[ 58.011543] i8042: [57198] 01 <- i8042 (interrupt, 1, 12)
[ 58.011582] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.013147] i8042: [57199] 31 <- i8042 (interrupt, 1, 12)
[ 58.014737] i8042: [57201] c2 <- i8042 (interrupt, 1, 12)
[ 58.016312] i8042: [57202] e6 <- i8042 (interrupt, 1, 12)
[ 58.017904] i8042: [57204] 64 <- i8042 (interrupt, 1, 12)
[ 58.019495] i8042: [57206] 24 <- i8042 (interrupt, 1, 12)
[ 58.021077] i8042: [57207] 50 <- i8042 (interrupt, 1, 12)
[ 58.021115] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.021130] psmouse serio1: issuing reconnect request
[ 58.021233] i8042: [57207] d4 -> i8042 (command)
[ 58.021423] i8042: [57208] ff -> i8042 (parameter)
[ 58.024278] i8042: [57210] fa <- i8042 (interrupt, 1, 12)
[ 58.125290] i8042: [57311] aa <- i8042 (interrupt, 1, 12)
[ 58.126857] i8042: [57313] 00 <- i8042 (interrupt, 1, 12)
[ 58.126960] i8042: [57313] d4 -> i8042 (command)
[ 58.127149] i8042: [57313] f6 -> i8042 (parameter)
[ 58.130065] i8042: [57316] fa <- i8042 (interrupt, 1, 12)
[ 58.130169] i8042: [57316] d4 -> i8042 (command)
[ 58.130359] i8042: [57316] f5 -> i8042 (parameter)
[ 58.133275] i8042: [57319] fa <- i8042 (interrupt, 1, 12)
[ 58.133379] i8042: [57319] d4 -> i8042 (command)
[ 58.133568] i8042: [57320] e6 -> i8042 (parameter)
[ 58.136471] i8042: [57323] fa <- i8042 (interrupt, 1, 12)
[ 58.136574] i8042: [57323] d4 -> i8042 (command)
[ 58.136764] i8042: [57323] e6 -> i8042 (parameter)
[ 58.139666] i8042: [57326] fa <- i8042 (interrupt, 1, 12)
[ 58.139769] i8042: [57326] d4 -> i8042 (command)
[ 58.140016] i8042: [57326] e6 -> i8042 (parameter)
[ 58.142877] i8042: [57329] fa <- i8042 (interrupt, 1, 12)
[ 58.142980] i8042: [57329] d4 -> i8042 (command)
[ 58.143169] i8042: [57329] e9 -> i8042 (parameter)
[ 58.146058] i8042: [57332] fa <- i8042 (interrupt, 1, 12)
[ 58.147571] i8042: [57334] 3c <- i8042 (interrupt, 1, 12)
[ 58.149209] i8042: [57335] 03 <- i8042 (interrupt, 1, 12)
[ 58.150781] i8042: [57337] 00 <- i8042 (interrupt, 1, 12)
[ 58.150883] i8042: [57337] d4 -> i8042 (command)
[ 58.151072] i8042: [57337] e6 -> i8042 (parameter)
[ 58.154003] i8042: [57340] fa <- i8042 (interrupt, 1, 12)
[ 58.154105] i8042: [57340] d4 -> i8042 (command)
[ 58.154295] i8042: [57340] e8 -> i8042 (parameter)
[ 58.157196] i8042: [57343] fa <- i8042 (interrupt, 1, 12)
[ 58.157296] i8042: [57343] d4 -> i8042 (command)
[ 58.157486] i8042: [57344] 00 -> i8042 (parameter)
[ 58.160395] i8042: [57346] fa <- i8042 (interrupt, 1, 12)
[ 58.160497] i8042: [57347] d4 -> i8042 (command)
[ 58.160744] i8042: [57347] e8 -> i8042 (parameter)
[ 58.163578] i8042: [57350] fa <- i8042 (interrupt, 1, 12)
[ 58.163678] i8042: [57350] d4 -> i8042 (command)
[ 58.163868] i8042: [57350] 00 -> i8042 (parameter)
[ 58.166778] i8042: [57353] fa <- i8042 (interrupt, 1, 12)
[ 58.166880] i8042: [57353] d4 -> i8042 (command)
[ 58.167126] i8042: [57353] e8 -> i8042 (parameter)
[ 58.169971] i8042: [57356] fa <- i8042 (interrupt, 1, 12)
[ 58.170071] i8042: [57356] d4 -> i8042 (command)
[ 58.170261] i8042: [57356] 00 -> i8042 (parameter)
[ 58.173165] i8042: [57359] fa <- i8042 (interrupt, 1, 12)
[ 58.173267] i8042: [57359] d4 -> i8042 (command)
[ 58.173457] i8042: [57360] e8 -> i8042 (parameter)
[ 58.176351] i8042: [57362] fa <- i8042 (interrupt, 1, 12)
[ 58.176457] i8042: [57363] d4 -> i8042 (command)
[ 58.176647] i8042: [57363] 01 -> i8042 (parameter)
[ 58.179558] i8042: [57366] fa <- i8042 (interrupt, 1, 12)
[ 58.179661] i8042: [57366] d4 -> i8042 (command)
[ 58.179851] i8042: [57366] e9 -> i8042 (parameter)
[ 58.182709] i8042: [57369] fa <- i8042 (interrupt, 1, 12)
[ 58.184322] i8042: [57370] 5e <- i8042 (interrupt, 1, 12)
[ 58.185893] i8042: [57372] 0f <- i8042 (interrupt, 1, 12)
[ 58.187601] i8042: [57374] 01 <- i8042 (interrupt, 1, 12)
[ 58.187705] i8042: [57374] d4 -> i8042 (command)
[ 58.187895] i8042: [57374] f8 -> i8042 (parameter)
[ 58.190683] i8042: [57377] fa <- i8042 (interrupt, 1, 12)
[ 58.190808] i8042: [57377] d4 -> i8042 (command)
[ 58.191008] i8042: [57377] 00 -> i8042 (parameter)
[ 58.193899] i8042: [57380] fa <- i8042 (interrupt, 1, 12)
[ 58.194020] i8042: [57380] d4 -> i8042 (command)
[ 58.194267] i8042: [57380] f8 -> i8042 (parameter)
[ 58.197071] i8042: [57383] fa <- i8042 (interrupt, 1, 12)
[ 58.197175] i8042: [57383] d4 -> i8042 (command)
[ 58.197364] i8042: [57383] 07 -> i8042 (parameter)
[ 58.200266] i8042: [57386] fa <- i8042 (interrupt, 1, 12)
[ 58.200369] i8042: [57386] d4 -> i8042 (command)
[ 58.200559] i8042: [57387] f8 -> i8042 (parameter)
[ 58.203490] i8042: [57389] fa <- i8042 (interrupt, 1, 12)
[ 58.203567] i8042: [57390] d4 -> i8042 (command)
[ 58.203756] i8042: [57390] 00 -> i8042 (parameter)
[ 58.206553] i8042: [57393] fa <- i8042 (interrupt, 1, 12)
[ 58.206806] i8042: [57393] d4 -> i8042 (command)
[ 58.206996] i8042: [57393] f8 -> i8042 (parameter)
[ 58.209859] i8042: [57396] fa <- i8042 (interrupt, 1, 12)
[ 58.209943] i8042: [57396] d4 -> i8042 (command)
[ 58.210132] i8042: [57396] 01 -> i8042 (parameter)
[ 58.213052] i8042: [57399] fa <- i8042 (interrupt, 1, 12)
[ 58.213153] i8042: [57399] d4 -> i8042 (command)
[ 58.213342] i8042: [57399] e6 -> i8042 (parameter)
[ 58.216269] i8042: [57402] fa <- i8042 (interrupt, 1, 12)
[ 58.216373] i8042: [57402] d4 -> i8042 (command)
[ 58.216563] i8042: [57403] f3 -> i8042 (parameter)
[ 58.219453] i8042: [57406] fa <- i8042 (interrupt, 1, 12)
[ 58.219551] i8042: [57406] d4 -> i8042 (command)
[ 58.219741] i8042: [57406] 64 -> i8042 (parameter)
[ 58.222538] i8042: [57409] fa <- i8042 (interrupt, 1, 12)
[ 58.222617] i8042: [57409] d4 -> i8042 (command)
[ 58.222806] i8042: [57409] e8 -> i8042 (parameter)
[ 58.225823] i8042: [57412] fa <- i8042 (interrupt, 1, 12)
[ 58.225897] i8042: [57412] d4 -> i8042 (command)
[ 58.226081] i8042: [57412] 03 -> i8042 (parameter)
[ 58.229022] i8042: [57415] fa <- i8042 (interrupt, 1, 12)
[ 58.229097] i8042: [57415] d4 -> i8042 (command)
[ 58.229295] i8042: [57415] e6 -> i8042 (parameter)
[ 58.232235] i8042: [57418] fa <- i8042 (interrupt, 1, 12)
[ 58.232311] i8042: [57418] d4 -> i8042 (command)
[ 58.232508] i8042: [57418] f4 -> i8042 (parameter)
[ 58.235445] i8042: [57422] fa <- i8042 (interrupt, 1, 12)
[ 58.256673] i8042: [57443] 08 <- i8042 (interrupt, 1, 12)
[ 58.258244] i8042: [57444] 00 <- i8042 (interrupt, 1, 12)
[ 58.259838] i8042: [57446] 00 <- i8042 (interrupt, 1, 12)
[ 58.266483] i8042: [57453] 54 <- i8042 (interrupt, 1, 12)
[ 58.268040] i8042: [57454] 01 <- i8042 (interrupt, 1, 12)
[ 58.269627] i8042: [57456] 00 <- i8042 (interrupt, 1, 12)
[ 58.269666] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.271214] i8042: [57457] 10 <- i8042 (interrupt, 1, 12)
[ 58.272800] i8042: [57459] 00 <- i8042 (interrupt, 1, 12)
[ 58.274382] i8042: [57460] 00 <- i8042 (interrupt, 1, 12)
[ 58.275964] i8042: [57462] 54 <- i8042 (interrupt, 1, 12)
[ 58.277564] i8042: [57464] 13 <- i8042 (interrupt, 1, 12)
[ 58.279141] i8042: [57465] 35 <- i8042 (interrupt, 1, 12)
[ 58.279177] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.280688] i8042: [57467] 31 <- i8042 (interrupt, 1, 12)
[ 58.282314] i8042: [57468] c2 <- i8042 (interrupt, 1, 12)
[ 58.283901] i8042: [57470] 04 <- i8042 (interrupt, 1, 12)
[ 58.285494] i8042: [57472] 54 <- i8042 (interrupt, 1, 12)
[ 58.287035] i8042: [57473] 23 <- i8042 (interrupt, 1, 12)
[ 58.288619] i8042: [57475] 35 <- i8042 (interrupt, 1, 12)
[ 58.288650] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.290224] i8042: [57476] 31 <- i8042 (interrupt, 1, 12)
[ 58.291778] i8042: [57478] 02 <- i8042 (interrupt, 1, 12)
[ 58.293390] i8042: [57479] 04 <- i8042 (interrupt, 1, 12)
[ 58.294982] i8042: [57481] 54 <- i8042 (interrupt, 1, 12)
[ 58.296597] i8042: [57483] 23 <- i8042 (interrupt, 1, 12)
[ 58.298148] i8042: [57484] 35 <- i8042 (interrupt, 1, 12)
[ 58.298184] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.299678] i8042: [57486] 31 <- i8042 (interrupt, 1, 12)
[ 58.301306] i8042: [57487] 42 <- i8042 (interrupt, 1, 12)
[ 58.302885] i8042: [57489] 04 <- i8042 (interrupt, 1, 12)
[ 58.304468] i8042: [57491] 54 <- i8042 (interrupt, 1, 12)
[ 58.306050] i8042: [57492] 23 <- i8042 (interrupt, 1, 12)
[ 58.307639] i8042: [57494] 35 <- i8042 (interrupt, 1, 12)
[ 58.307675] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.307689] psmouse serio1: issuing reconnect request
[ 58.307798] i8042: [57494] d4 -> i8042 (command)
[ 58.308046] i8042: [57494] ff -> i8042 (parameter)
[ 58.310910] i8042: [57497] fa <- i8042 (interrupt, 1, 12)
[ 58.411948] i8042: [57598] aa <- i8042 (interrupt, 1, 12)
[ 58.413495] i8042: [57600] 00 <- i8042 (interrupt, 1, 12)
[ 58.413597] i8042: [57600] d4 -> i8042 (command)
[ 58.413786] i8042: [57600] f6 -> i8042 (parameter)
[ 58.416716] i8042: [57603] fa <- i8042 (interrupt, 1, 12)
[ 58.416816] i8042: [57603] d4 -> i8042 (command)
[ 58.417006] i8042: [57603] f5 -> i8042 (parameter)
[ 58.419898] i8042: [57606] fa <- i8042 (interrupt, 1, 12)
[ 58.420000] i8042: [57606] d4 -> i8042 (command)
[ 58.420190] i8042: [57606] e6 -> i8042 (parameter)
[ 58.423113] i8042: [57609] fa <- i8042 (interrupt, 1, 12)
[ 58.423189] i8042: [57609] d4 -> i8042 (command)
[ 58.423383] i8042: [57609] e6 -> i8042 (parameter)
[ 58.426262] i8042: [57612] fa <- i8042 (interrupt, 1, 12)
[ 58.426339] i8042: [57612] d4 -> i8042 (command)
[ 58.426527] i8042: [57612] e6 -> i8042 (parameter)
[ 58.429479] i8042: [57616] fa <- i8042 (interrupt, 1, 12)
[ 58.429572] i8042: [57616] d4 -> i8042 (command)
[ 58.429818] i8042: [57616] e9 -> i8042 (parameter)
[ 58.432688] i8042: [57619] fa <- i8042 (interrupt, 1, 12)
[ 58.434253] i8042: [57620] 3c <- i8042 (interrupt, 1, 12)
[ 58.435840] i8042: [57622] 03 <- i8042 (interrupt, 1, 12)
[ 58.437435] i8042: [57624] 00 <- i8042 (interrupt, 1, 12)
[ 58.437536] i8042: [57624] d4 -> i8042 (command)
[ 58.437726] i8042: [57624] e6 -> i8042 (parameter)
[ 58.440641] i8042: [57627] fa <- i8042 (interrupt, 1, 12)
[ 58.440741] i8042: [57627] d4 -> i8042 (command)
[ 58.440931] i8042: [57627] e8 -> i8042 (parameter)
[ 58.443834] i8042: [57630] fa <- i8042 (interrupt, 1, 12)
[ 58.443932] i8042: [57630] d4 -> i8042 (command)
[ 58.444122] i8042: [57630] 00 -> i8042 (parameter)
[ 58.447033] i8042: [57633] fa <- i8042 (interrupt, 1, 12)
[ 58.447133] i8042: [57633] d4 -> i8042 (command)
[ 58.447380] i8042: [57634] e8 -> i8042 (parameter)
[ 58.450212] i8042: [57636] fa <- i8042 (interrupt, 1, 12)
[ 58.450311] i8042: [57636] d4 -> i8042 (command)
[ 58.450500] i8042: [57637] 00 -> i8042 (parameter)
[ 58.453413] i8042: [57640] fa <- i8042 (interrupt, 1, 12)
[ 58.453513] i8042: [57640] d4 -> i8042 (command)
[ 58.453703] i8042: [57640] e8 -> i8042 (parameter)
[ 58.456535] i8042: [57643] fa <- i8042 (interrupt, 1, 12)
[ 58.456632] i8042: [57643] d4 -> i8042 (command)
[ 58.456822] i8042: [57643] 00 -> i8042 (parameter)
[ 58.459802] i8042: [57646] fa <- i8042 (interrupt, 1, 12)
[ 58.459883] i8042: [57646] d4 -> i8042 (command)
[ 58.460073] i8042: [57646] e8 -> i8042 (parameter)
[ 58.462991] i8042: [57649] fa <- i8042 (interrupt, 1, 12)
[ 58.463089] i8042: [57649] d4 -> i8042 (command)
[ 58.463279] i8042: [57649] 01 -> i8042 (parameter)
[ 58.466208] i8042: [57652] fa <- i8042 (interrupt, 1, 12)
[ 58.466309] i8042: [57652] d4 -> i8042 (command)
[ 58.466499] i8042: [57653] e9 -> i8042 (parameter)
[ 58.469401] i8042: [57656] fa <- i8042 (interrupt, 1, 12)
[ 58.470958] i8042: [57657] 5e <- i8042 (interrupt, 1, 12)
[ 58.472517] i8042: [57659] 0f <- i8042 (interrupt, 1, 12)
[ 58.474100] i8042: [57660] 01 <- i8042 (interrupt, 1, 12)
[ 58.474206] i8042: [57660] d4 -> i8042 (command)
[ 58.474395] i8042: [57661] f8 -> i8042 (parameter)
[ 58.477297] i8042: [57663] fa <- i8042 (interrupt, 1, 12)
[ 58.477433] i8042: [57664] d4 -> i8042 (command)
[ 58.477624] i8042: [57664] 00 -> i8042 (parameter)
[ 58.480494] i8042: [57667] fa <- i8042 (interrupt, 1, 12)
[ 58.480596] i8042: [57667] d4 -> i8042 (command)
[ 58.480786] i8042: [57667] f8 -> i8042 (parameter)
[ 58.483737] i8042: [57670] fa <- i8042 (interrupt, 1, 12)
[ 58.483840] i8042: [57670] d4 -> i8042 (command)
[ 58.484087] i8042: [57670] 07 -> i8042 (parameter)
[ 58.486810] i8042: [57673] fa <- i8042 (interrupt, 1, 12)
[ 58.486845] i8042: [57673] d4 -> i8042 (command)
[ 58.487087] i8042: [57673] f8 -> i8042 (parameter)
[ 58.490100] i8042: [57676] fa <- i8042 (interrupt, 1, 12)
[ 58.490212] i8042: [57676] d4 -> i8042 (command)
[ 58.490402] i8042: [57677] 00 -> i8042 (parameter)
[ 58.493329] i8042: [57679] fa <- i8042 (interrupt, 1, 12)
[ 58.493433] i8042: [57680] d4 -> i8042 (command)
[ 58.493622] i8042: [57680] f8 -> i8042 (parameter)
[ 58.496526] i8042: [57683] fa <- i8042 (interrupt, 1, 12)
[ 58.496645] i8042: [57683] d4 -> i8042 (command)
[ 58.496836] i8042: [57683] 01 -> i8042 (parameter)
[ 58.499720] i8042: [57686] fa <- i8042 (interrupt, 1, 12)
[ 58.499824] i8042: [57686] d4 -> i8042 (command)
[ 58.500013] i8042: [57686] e6 -> i8042 (parameter)
[ 58.502909] i8042: [57689] fa <- i8042 (interrupt, 1, 12)
[ 58.503014] i8042: [57689] d4 -> i8042 (command)
[ 58.503260] i8042: [57689] f3 -> i8042 (parameter)
[ 58.506108] i8042: [57692] fa <- i8042 (interrupt, 1, 12)
[ 58.506208] i8042: [57692] d4 -> i8042 (command)
[ 58.506454] i8042: [57693] 64 -> i8042 (parameter)
[ 58.509299] i8042: [57695] fa <- i8042 (interrupt, 1, 12)
[ 58.509433] i8042: [57696] d4 -> i8042 (command)
[ 58.509623] i8042: [57696] e8 -> i8042 (parameter)
[ 58.512510] i8042: [57699] fa <- i8042 (interrupt, 1, 12)
[ 58.512585] i8042: [57699] d4 -> i8042 (command)
[ 58.512775] i8042: [57699] 03 -> i8042 (parameter)
[ 58.515647] i8042: [57702] fa <- i8042 (interrupt, 1, 12)
[ 58.515752] i8042: [57702] d4 -> i8042 (command)
[ 58.515941] i8042: [57702] e6 -> i8042 (parameter)
[ 58.518872] i8042: [57705] fa <- i8042 (interrupt, 1, 12)
[ 58.518955] i8042: [57705] d4 -> i8042 (command)
[ 58.519201] i8042: [57705] f4 -> i8042 (parameter)
[ 58.522055] i8042: [57708] fa <- i8042 (interrupt, 1, 12)
[ 58.542819] i8042: [57729] 08 <- i8042 (interrupt, 1, 12)
[ 58.544388] i8042: [57730] 00 <- i8042 (interrupt, 1, 12)
[ 58.545968] i8042: [57732] 00 <- i8042 (interrupt, 1, 12)
[ 58.552599] i8042: [57739] 54 <- i8042 (interrupt, 1, 12)
[ 58.554215] i8042: [57740] 01 <- i8042 (interrupt, 1, 12)
[ 58.555765] i8042: [57742] 00 <- i8042 (interrupt, 1, 12)
[ 58.555804] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.557346] i8042: [57743] 10 <- i8042 (interrupt, 1, 12)
[ 58.558938] i8042: [57745] 00 <- i8042 (interrupt, 1, 12)
[ 58.560507] i8042: [57747] 00 <- i8042 (interrupt, 1, 12)
[ 58.562102] i8042: [57748] 54 <- i8042 (interrupt, 1, 12)
[ 58.563675] i8042: [57750] 12 <- i8042 (interrupt, 1, 12)
[ 58.565257] i8042: [57751] bc <- i8042 (interrupt, 1, 12)
[ 58.565296] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.566840] i8042: [57753] 31 <- i8042 (interrupt, 1, 12)
[ 58.568424] i8042: [57755] a2 <- i8042 (interrupt, 1, 12)
[ 58.570001] i8042: [57756] 48 <- i8042 (interrupt, 1, 12)
[ 58.571585] i8042: [57758] 44 <- i8042 (interrupt, 1, 12)
[ 58.573169] i8042: [57759] 12 <- i8042 (interrupt, 1, 12)
[ 58.574726] i8042: [57761] bc <- i8042 (interrupt, 1, 12)
[ 58.574767] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.576338] i8042: [57762] 31 <- i8042 (interrupt, 1, 12)
[ 58.577916] i8042: [57764] 72 <- i8042 (interrupt, 1, 12)
[ 58.579502] i8042: [57766] 48 <- i8042 (interrupt, 1, 12)
[ 58.581081] i8042: [57767] 04 <- i8042 (interrupt, 1, 12)
[ 58.582664] i8042: [57769] 00 <- i8042 (interrupt, 1, 12)
[ 58.584238] i8042: [57770] 00 <- i8042 (interrupt, 1, 12)
[ 58.584278] psmouse serio1: Touchpad at isa0060/serio1/input0 lost sync at byte 6
[ 58.585828] i8042: [57772] 10 <- i8042 (interrupt, 1, 12)
[ 58.587307] i8042: [57773] 00 <- i8042 (interrupt, 1, 12)
[ 58.588887] i8042: [57775] 00 <- i8042 (interrupt, 1, 12)
[ 73.937492] Lockdown: futility: raw io port access is restricted; see man kernel_lockdown.7
[ 73.944371] Lockdown: flashrom: raw io port access is restricted; see man kernel_lockdown.7
[ 73.947701] Lockdown: flashrom: raw io port access is restricted; see man kernel_lockdown.7
[ 75.227619] Lockdown: debugd: debugfs access is restricted; see man kernel_lockdown.7
[ 75.227872] Lockdown: debugd: debugfs access is restricted; see man kernel_lockdown.7
^ permalink raw reply
* Re: [PATCH RFC bpf-next 0/9] allow HID-BPF to do device IOs
From: Alexei Starovoitov @ 2024-02-12 21:24 UTC (permalink / raw)
To: Benjamin Tissoires
Cc: Toke Høiland-Jørgensen, Benjamin Tissoires,
Alexei Starovoitov, Daniel Borkmann, John Fastabend,
Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
Yonghong Song, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Jiri Kosina, Jonathan Corbet, Shuah Khan, bpf, LKML,
open list:HID CORE LAYER, open list:DOCUMENTATION,
open list:KERNEL SELFTEST FRAMEWORK
In-Reply-To: <CAO-hwJLxkt=THKBjxDA6KZsC5h52rCXZ-2RNKPCiYMHNjhQJNg@mail.gmail.com>
On Mon, Feb 12, 2024 at 10:21 AM Benjamin Tissoires
<benjamin.tissoires@redhat.com> wrote:
>
> On Mon, Feb 12, 2024 at 6:46 PM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
> >
> > Benjamin Tissoires <benjamin.tissoires@redhat.com> writes:
> >
> > [...]
> > >> IIUC, the bpf_timer callback is just a function (subprog) from the
> > >> verifier PoV, so it is verified as whatever program type is creating the
> > >> timer. So in other words, as long as you setup the timer from inside a
> > >> tracing prog type, you should have access to all the same kfuncs, I
> > >> think?
> > >
> > > Yep, you are correct. But as mentioned above, I am now in trouble with
> > > the sleepable state:
> > > - I need to call timer_start() from a non sleepable tracing function
> > > (I'm in hard IRQ when dealing with a physical device)
> > > - but then, ideally, the callback function needs to be tagged as a
> > > sleepable one, so I can export my kfuncs which are doing kzalloc and
> > > device IO as such.
> > >
> > > However, I can not really teach the BPF verifier to do so:
> > > - it seems to check for the callback first when it is loaded, and
> > > there is no SEC() equivalent for static functions
> > > - libbpf doesn't have access to the callback as a prog as it has to be
> > > a static function, and thus isn't exported as a full-blown prog.
> > > - the verifier only checks for the callback when dealing with
> > > BPF_FUNC_timer_set_callback, which doesn't have a "flag" argument
> > > (though the validation of the callback has already been done while
> > > checking it first, so we are already too late to change the sleppable
> > > state of the callback)
> > >
> > > Right now, the only OK-ish version I have is declaring the kfunc as
> > > non-sleepable, but checking that we are in a different context than
> > > the IRQ of the initial event. This way, I am not crashing if this
> > > function is called from the initial IRQ, but will still crash if used
> > > outside of the hid context.
> > >
> > > This is not satisfactory, but I feel like it's going to be hard to
> > > teach the verifier that the callback function is sleepable in that
> > > case (maybe we could suffix the callback name, like we do for
> > > arguments, but this is not very clean either).
> >
> > The callback is only set once when the timer is first setup; I *think*
> > it works to do the setup (bpf_timer_init() and bpf_timer_set_callback())
> > in the context you need (from a sleepable prog), but do the arming
> > (bpf_timer_start()) from a different program that is not itself sleepable?
> >
>
> Genius! It works, and I can just keep having them declared as a
> syscall kfunc, not as a tracing kfunc.
>
> But isn't this an issue outside of my use case? I mean, if the
> callback is assuming the environment for when it is set up but can be
> called from any context there seems to be a problem when 2 contexts
> are not equivalent, no?
I agree that workqueue delegation fits into the bpf_timer concept and
a lot of code can and should be shared.
All the lessons(bugs) learned with bpf_timer don't need to be re-discovered :)
Too bad, bpf_timer_set_callback() doesn't have a flag argument,
so we need a new kfunc to set a sleepable callback.
Maybe
bpf_timer_set_sleepable_cb() ?
The verifier will set is_async_cb = true for it (like it does for regular cb-s).
And since prog->aux->sleepable is kinda "global" we need another
per subprog flag:
bool is_sleepable: 1;
We can factor out a check "if (prog->aux->sleepable)" into a helper
that will check that "global" flag and another env->cur_state->in_sleepable
flag that will work similar to active_rcu_lock.
Once the verifier starts processing subprog->is_sleepable
it will set cur_state->in_sleepable = true;
to make all subprogs called from that cb to be recognized as sleepable too.
A bit of a challenge is what to do with global subprogs,
since they're verified lazily. They can be called from
sleepable and non-sleepable contex. Should be solvable.
Overall I think this feature is needed urgently,
so if you don't have cycles to work on this soon,
I can prioritize it right after bpf_arena work.
^ permalink raw reply
* Re: [PATCH riscv64] kobject: fix WARNING in input_register_device
From: Edward Adam Davis @ 2024-02-13 0:43 UTC (permalink / raw)
To: gregkh
Cc: eadavis, linux-input, linux-kernel, linux-usb, rafael,
syzbot+8e41bb0c055b209ebbf4, syzkaller-bugs
In-Reply-To: <2024020836-flypaper-relapse-5c97@gregkh>
On Thu, 8 Feb 2024 12:25:10 +0000, Greg KH wrote:
> On Thu, Feb 08, 2024 at 07:37:56PM +0800, Edward Adam Davis wrote:
> > On Thu, 8 Feb 2024 10:56:00, Greg KH wrote:
> > > > The input_add_uevent_modalias_var()->input_print_modalias() will add 1684 bytes
> > > > of data to env, which will result in insufficient memory allocated to the buf
> > > > members of env.
> > >
> > > What is "env"? And can you wrap your lines at 72 columns please?
> > env is an instance of struct kobj_uevent_env.
>
> Ok, be specific please in your changelog text, otherwise we can't really
> understand what is happening.
>
> > > > Reported-and-tested-by: syzbot+8e41bb0c055b209ebbf4@syzkaller.appspotmail.com
> > > > Signed-off-by: Edward Adam Davis <eadavis@qq.com>
> > > > ---
> > > > include/linux/kobject.h | 2 +-
> > > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/include/linux/kobject.h b/include/linux/kobject.h
> > > > index c30affcc43b4..74b37b6459cd 100644
> > > > --- a/include/linux/kobject.h
> > > > +++ b/include/linux/kobject.h
> > > > @@ -30,7 +30,7 @@
> > > >
> > > > #define UEVENT_HELPER_PATH_LEN 256
> > > > #define UEVENT_NUM_ENVP 64 /* number of env pointers */
> > > > -#define UEVENT_BUFFER_SIZE 2048 /* buffer for the variables */
> > > > +#define UEVENT_BUFFER_SIZE 2560 /* buffer for the variables */
> > >
> > > That's an odd number, why that? Why not just a page? What happens if
> > > some other path wants more?
> > An increase of 512 bytes is sufficient for the current issue. Do not consider
> > the problem of hypothetical existence.
>
> Why is this 512 bytes sufficient now? What changed to cause this?
There is the following code in input_print_modalias():
drivers/input/input.c
1 len += input_print_modalias_bits(buf + len, size - len,
1403 'k', id->keybit, KEY_MIN_INTERESTING, KEY_MAX);
This code will add up to 2608 bytes of data to env at most.
(KEY_MAX - KEY_MIN_INTERESTING) * 4 = (256 * 3 - 1 - 113 ) * 4 = (765 - 113) * 4 = 652 * 4 = 2608 bytes。
Note: In the expression, 4 represents 3 bytes of hexadecimal data and 1 byte of comma.
include/uapi/linux/input-event-codes.h
188 #define KEY_MUTE 113
807 #define KEY_MIN_INTERESTING KEY_MUTE
808 #define KEY_MAX 0x2ff
During my actual testing process, I found that a total of 1684 bytes were
contributed in input_print_modalias().
>
> And how can we detect this automatically in the future? Shouldn't we
> just be truncating the buffer instead of having an overflow?
>
> > > And what's causing the input stack to have so many variables all of a
> > > sudden, what changed to cause this? Is this a bugfix for a specific
> > > commit that needs to be backported to older kernels? Why did this
> > > buffer size all of a sudden be too small?
> > The result of my analysis is that several members of struct input_dev are too
> > large, such as its member keybit.
>
> And when did that change? What commit id? What prevents it from
> growing again and us needing to change this again?
The code that caused this issue has been introduced for a long time, and it is
speculated that it was due to the fact that the warning in add_uevent_var() was
returned directly to ENOMEM without being taken seriously.
lib/kobject_uevent.c
2 if (len >= (sizeof(env->buf) - env->buflen)) {
1 WARN(1, KERN_ERR "add_uevent_var: buffer size too small\n");
672 return -ENOMEM;
1 }
I believe that this issue was introduced by:
7eff2e7a8b65 - Driver core: change add_ueventvar to use a struct.
thanks,
edward.
^ permalink raw reply
* Re: [PATCH riscv64] kobject: fix WARNING in input_register_device
From: Edward Adam Davis @ 2024-02-13 0:50 UTC (permalink / raw)
To: gregkh
Cc: eadavis, linux-input, linux-kernel, linux-usb, rafael,
syzbot+8e41bb0c055b209ebbf4, syzkaller-bugs
In-Reply-To: <2024020821-quintet-survival-54f4@gregkh>
On Thu, 8 Feb 2024 12:25:35 +0000, Greg KH wrote:
> On Thu, Feb 08, 2024 at 07:37:56PM +0800, Edward Adam Davis wrote:
> > On Thu, 8 Feb 2024 10:56:00, Greg KH wrote:
> > > > The input_add_uevent_modalias_var()->input_print_modalias() will add 1684 bytes
> > > > of data to env, which will result in insufficient memory allocated to the buf
> > > > members of env.
> > >
> > > What is "env"? And can you wrap your lines at 72 columns please?
> > env is an instance of struct kobj_uevent_env.
>
> Also, why is "risc64" in the subject line?
Because when syzbot reported this issue, it wrote "userspace arch: riscv64".
However, I actually tested it on the master branch of upstream.
thanks,
edward.
^ permalink raw reply
* Re: [PATCH riscv64] kobject: fix WARNING in input_register_device
From: Greg KH @ 2024-02-13 7:20 UTC (permalink / raw)
To: Edward Adam Davis
Cc: linux-input, linux-kernel, linux-usb, rafael,
syzbot+8e41bb0c055b209ebbf4, syzkaller-bugs
In-Reply-To: <tencent_DDCFB377C3642974A3A3A44D176B776DA605@qq.com>
On Tue, Feb 13, 2024 at 08:43:26AM +0800, Edward Adam Davis wrote:
> On Thu, 8 Feb 2024 12:25:10 +0000, Greg KH wrote:
> > On Thu, Feb 08, 2024 at 07:37:56PM +0800, Edward Adam Davis wrote:
> > > On Thu, 8 Feb 2024 10:56:00, Greg KH wrote:
> > > > > The input_add_uevent_modalias_var()->input_print_modalias() will add 1684 bytes
> > > > > of data to env, which will result in insufficient memory allocated to the buf
> > > > > members of env.
> > > >
> > > > What is "env"? And can you wrap your lines at 72 columns please?
> > > env is an instance of struct kobj_uevent_env.
> >
> > Ok, be specific please in your changelog text, otherwise we can't really
> > understand what is happening.
> >
> > > > > Reported-and-tested-by: syzbot+8e41bb0c055b209ebbf4@syzkaller.appspotmail.com
> > > > > Signed-off-by: Edward Adam Davis <eadavis@qq.com>
> > > > > ---
> > > > > include/linux/kobject.h | 2 +-
> > > > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > > > >
> > > > > diff --git a/include/linux/kobject.h b/include/linux/kobject.h
> > > > > index c30affcc43b4..74b37b6459cd 100644
> > > > > --- a/include/linux/kobject.h
> > > > > +++ b/include/linux/kobject.h
> > > > > @@ -30,7 +30,7 @@
> > > > >
> > > > > #define UEVENT_HELPER_PATH_LEN 256
> > > > > #define UEVENT_NUM_ENVP 64 /* number of env pointers */
> > > > > -#define UEVENT_BUFFER_SIZE 2048 /* buffer for the variables */
> > > > > +#define UEVENT_BUFFER_SIZE 2560 /* buffer for the variables */
> > > >
> > > > That's an odd number, why that? Why not just a page? What happens if
> > > > some other path wants more?
> > > An increase of 512 bytes is sufficient for the current issue. Do not consider
> > > the problem of hypothetical existence.
> >
> > Why is this 512 bytes sufficient now? What changed to cause this?
> There is the following code in input_print_modalias():
>
> drivers/input/input.c
> 1 len += input_print_modalias_bits(buf + len, size - len,
> 1403 'k', id->keybit, KEY_MIN_INTERESTING, KEY_MAX);
> This code will add up to 2608 bytes of data to env at most.
> (KEY_MAX - KEY_MIN_INTERESTING) * 4 = (256 * 3 - 1 - 113 ) * 4 = (765 - 113) * 4 = 652 * 4 = 2608 bytes。
> Note: In the expression, 4 represents 3 bytes of hexadecimal data and 1 byte of comma.
So your change above is wrong and will not work for the max size?
Why not restrict the modalias here to fit instead of overflowing? Odds
are we should be checking this properly no matter what the value is
changed to, right?
> include/uapi/linux/input-event-codes.h
> 188 #define KEY_MUTE 113
> 807 #define KEY_MIN_INTERESTING KEY_MUTE
> 808 #define KEY_MAX 0x2ff
> During my actual testing process, I found that a total of 1684 bytes were
> contributed in input_print_modalias().
> >
> > And how can we detect this automatically in the future? Shouldn't we
> > just be truncating the buffer instead of having an overflow?
> >
> > > > And what's causing the input stack to have so many variables all of a
> > > > sudden, what changed to cause this? Is this a bugfix for a specific
> > > > commit that needs to be backported to older kernels? Why did this
> > > > buffer size all of a sudden be too small?
> > > The result of my analysis is that several members of struct input_dev are too
> > > large, such as its member keybit.
> >
> > And when did that change? What commit id? What prevents it from
> > growing again and us needing to change this again?
> The code that caused this issue has been introduced for a long time, and it is
> speculated that it was due to the fact that the warning in add_uevent_var() was
> returned directly to ENOMEM without being taken seriously.
>
> lib/kobject_uevent.c
> 2 if (len >= (sizeof(env->buf) - env->buflen)) {
> 1 WARN(1, KERN_ERR "add_uevent_var: buffer size too small\n");
> 672 return -ENOMEM;
Odd line numbers?
Anyway, we should get rid of the WARN() as that will cause crashes, and
just handle it properly there.
> 1 }
>
> I believe that this issue was introduced by:
> 7eff2e7a8b65 - Driver core: change add_ueventvar to use a struct.
In 2007? And never been actually hit since then? So is this a real
issue? :)
thanks,
greg k-h
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox