From: "Éric Piel" <eric.piel-VkQ1JFuSMpfAbQlEx87xDw@public.gmane.org>
To: Samu Onkalo <samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
Cc: khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org,
guenter.roeck-IzeFyvvaP7pWk0Htik3J/w@public.gmane.org,
jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org,
lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 10/12] hwmon: lis3: Enhance lis3 selftest with IRQ line test
Date: Sun, 24 Oct 2010 16:58:53 +0200 [thread overview]
Message-ID: <4CC449AD.7010503@tremplin-utc.net> (raw)
In-Reply-To: <1287748654-2626-11-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
Op 22-10-10 13:57, Samu Onkalo schreef:
> Configure chip to data ready mode in selftest and count received
> interrupts to see that interrupt line(s) are working.
>
> Signed-off-by: Samu Onkalo<samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
Acked-by: Eric Piel <eric.piel-VkQ1JFuSMpfAbQlEx87xDw@public.gmane.org>
> ---
> drivers/hwmon/lis3lv02d.c | 87 ++++++++++++++++++++++++++++++++++++++++----
> drivers/hwmon/lis3lv02d.h | 3 +-
> 2 files changed, 81 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/hwmon/lis3lv02d.c b/drivers/hwmon/lis3lv02d.c
> index 9fd946c..f0343f3 100644
> --- a/drivers/hwmon/lis3lv02d.c
> +++ b/drivers/hwmon/lis3lv02d.c
> @@ -48,6 +48,13 @@
>
> #define LIS3_SYSFS_POWERDOWN_DELAY 5000 /* In milliseconds */
>
> +#define SELFTEST_OK 0
> +#define SELFTEST_FAIL -1
> +#define SELFTEST_IRQ -2
> +
> +#define IRQ_LINE0 0
> +#define IRQ_LINE1 1
> +
> /*
> * The sensor can also generate interrupts (DRDY) but it's pretty pointless
> * because they are generated even if the data do not change. So it's better
> @@ -198,6 +205,8 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> s16 x, y, z;
> u8 selftest;
> int ret;
> + u8 ctrl_reg_data;
> + unsigned char irq_cfg;
>
> mutex_lock(&lis3->mutex);
> if (lis3_dev.whoami == WAI_12B)
> @@ -205,6 +214,20 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> else
> selftest = CTRL1_STP;
>
> + irq_cfg = lis3->irq_cfg;
> + if (lis3_dev.whoami == WAI_8B) {
> + lis3->data_ready_count[IRQ_LINE0] = 0;
> + lis3->data_ready_count[IRQ_LINE1] = 0;
> +
> + /* Change interrupt cfg to data ready for selftest */
> + atomic_inc(&lis3_dev.wake_thread);
> + lis3->irq_cfg = LIS3_IRQ1_DATA_READY | LIS3_IRQ2_DATA_READY;
> + lis3->read(lis3, CTRL_REG3,&ctrl_reg_data);
> + lis3->write(lis3, CTRL_REG3, (ctrl_reg_data&
> + ~(LIS3_IRQ1_MASK | LIS3_IRQ2_MASK)) |
> + (LIS3_IRQ1_DATA_READY | LIS3_IRQ2_DATA_READY));
> + }
> +
> lis3->read(lis3, CTRL_REG1,®);
> lis3->write(lis3, CTRL_REG1, (reg | selftest));
> msleep(lis3->pwron_delay / lis3lv02d_get_odr());
> @@ -223,13 +246,33 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> results[2] = z - lis3->read_data(lis3, OUTZ);
>
> ret = 0;
> +
> + if (lis3_dev.whoami == WAI_8B) {
> + /* Restore original interrupt configuration */
> + atomic_dec(&lis3_dev.wake_thread);
> + lis3->write(lis3, CTRL_REG3, ctrl_reg_data);
> + lis3->irq_cfg = irq_cfg;
> +
> + if ((irq_cfg& LIS3_IRQ1_MASK)&&
> + lis3->data_ready_count[IRQ_LINE0]< 2) {
> + ret = SELFTEST_IRQ;
> + goto fail;
> + }
> +
> + if ((irq_cfg& LIS3_IRQ2_MASK)&&
> + lis3->data_ready_count[IRQ_LINE1]< 2) {
> + ret = SELFTEST_IRQ;
> + goto fail;
> + }
> + }
> +
> if (lis3->pdata) {
> int i;
> for (i = 0; i< 3; i++) {
> /* Check against selftest acceptance limits */
> if ((results[i]< lis3->pdata->st_min_limits[i]) ||
> (results[i]> lis3->pdata->st_max_limits[i])) {
> - ret = -EIO;
> + ret = SELFTEST_FAIL;
> goto fail;
> }
> }
> @@ -392,13 +435,24 @@ static void lis302dl_interrupt_handle_click(struct lis3lv02d *lis3)
> mutex_unlock(&lis3->mutex);
> }
>
> -static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
> +static inline void lis302dl_data_ready(struct lis3lv02d *lis3, int index)
> {
> + int dummy;
>
> + /* Dummy read to ack interrupt */
> + lis3lv02d_get_xyz(lis3,&dummy,&dummy,&dummy);
> + lis3->data_ready_count[index]++;
> +}
> +
> +static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
> +{
> struct lis3lv02d *lis3 = data;
> + u8 irq_cfg = lis3->irq_cfg& LIS3_IRQ1_MASK;
>
> - if ((lis3->irq_cfg& LIS3_IRQ1_MASK) == LIS3_IRQ1_CLICK)
> + if (irq_cfg == LIS3_IRQ1_CLICK)
> lis302dl_interrupt_handle_click(lis3);
> + else if (unlikely(irq_cfg == LIS3_IRQ1_DATA_READY))
> + lis302dl_data_ready(lis3, IRQ_LINE0);
> else
> lis3lv02d_joystick_poll(lis3->idev);
>
> @@ -407,11 +461,13 @@ static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
>
> static irqreturn_t lis302dl_interrupt_thread2_8b(int irq, void *data)
> {
> -
> struct lis3lv02d *lis3 = data;
> + u8 irq_cfg = lis3->irq_cfg& LIS3_IRQ2_MASK;
>
> - if ((lis3->irq_cfg& LIS3_IRQ2_MASK) == LIS3_IRQ2_CLICK)
> + if (irq_cfg == LIS3_IRQ2_CLICK)
> lis302dl_interrupt_handle_click(lis3);
> + else if (unlikely(irq_cfg == LIS3_IRQ2_DATA_READY))
> + lis302dl_data_ready(lis3, IRQ_LINE1);
> else
> lis3lv02d_joystick_poll(lis3->idev);
>
> @@ -614,12 +670,27 @@ static void lis3lv02d_sysfs_poweron(struct lis3lv02d *lis3)
> static ssize_t lis3lv02d_selftest_show(struct device *dev,
> struct device_attribute *attr, char *buf)
> {
> - int result;
> s16 values[3];
>
> + static const char ok[] = "OK";
> + static const char fail[] = "FAIL";
> + static const char irq[] = "FAIL_IRQ";
> + const char *res;
> +
> lis3lv02d_sysfs_poweron(&lis3_dev);
> - result = lis3lv02d_selftest(&lis3_dev, values);
> - return sprintf(buf, "%s %d %d %d\n", result == 0 ? "OK" : "FAIL",
> + switch (lis3lv02d_selftest(&lis3_dev, values)) {
> + case SELFTEST_FAIL:
> + res = fail;
> + break;
> + case SELFTEST_IRQ:
> + res = irq;
> + break;
> + case SELFTEST_OK:
> + default:
> + res = ok;
> + break;
> + }
> + return sprintf(buf, "%s %d %d %d\n", res,
> values[0], values[1], values[2]);
> }
>
> diff --git a/drivers/hwmon/lis3lv02d.h b/drivers/hwmon/lis3lv02d.h
> index d3cb662..7b22cd9 100644
> --- a/drivers/hwmon/lis3lv02d.h
> +++ b/drivers/hwmon/lis3lv02d.h
> @@ -254,7 +254,8 @@ struct lis3lv02d {
> struct fasync_struct *async_queue; /* queue for the misc device */
> wait_queue_head_t misc_wait; /* Wait queue for the misc device */
> unsigned long misc_opened; /* bit0: whether the device is open */
> - atomic_t wake_thread;
> + int data_ready_count[2];
> + atomic_t wake_thread;
> unsigned char irq_cfg;
>
> struct lis3lv02d_platform_data *pdata; /* for passing board config */
WARNING: multiple messages have this Message-ID (diff)
From: "Éric Piel" <eric.piel@tremplin-utc.net>
To: Samu Onkalo <samu.p.onkalo@nokia.com>
Cc: khali@linux-fr.org, guenter.roeck@ericsson.com, jic23@cam.ac.uk,
lm-sensors@lm-sensors.org, linux-i2c@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [lm-sensors] [PATCH 10/12] hwmon: lis3: Enhance lis3 selftest
Date: Sun, 24 Oct 2010 14:58:53 +0000 [thread overview]
Message-ID: <4CC449AD.7010503@tremplin-utc.net> (raw)
In-Reply-To: <1287748654-2626-11-git-send-email-samu.p.onkalo@nokia.com>
Op 22-10-10 13:57, Samu Onkalo schreef:
> Configure chip to data ready mode in selftest and count received
> interrupts to see that interrupt line(s) are working.
>
> Signed-off-by: Samu Onkalo<samu.p.onkalo@nokia.com>
Acked-by: Eric Piel <eric.piel@tremplin-utc.net>
> ---
> drivers/hwmon/lis3lv02d.c | 87 ++++++++++++++++++++++++++++++++++++++++----
> drivers/hwmon/lis3lv02d.h | 3 +-
> 2 files changed, 81 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/hwmon/lis3lv02d.c b/drivers/hwmon/lis3lv02d.c
> index 9fd946c..f0343f3 100644
> --- a/drivers/hwmon/lis3lv02d.c
> +++ b/drivers/hwmon/lis3lv02d.c
> @@ -48,6 +48,13 @@
>
> #define LIS3_SYSFS_POWERDOWN_DELAY 5000 /* In milliseconds */
>
> +#define SELFTEST_OK 0
> +#define SELFTEST_FAIL -1
> +#define SELFTEST_IRQ -2
> +
> +#define IRQ_LINE0 0
> +#define IRQ_LINE1 1
> +
> /*
> * The sensor can also generate interrupts (DRDY) but it's pretty pointless
> * because they are generated even if the data do not change. So it's better
> @@ -198,6 +205,8 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> s16 x, y, z;
> u8 selftest;
> int ret;
> + u8 ctrl_reg_data;
> + unsigned char irq_cfg;
>
> mutex_lock(&lis3->mutex);
> if (lis3_dev.whoami = WAI_12B)
> @@ -205,6 +214,20 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> else
> selftest = CTRL1_STP;
>
> + irq_cfg = lis3->irq_cfg;
> + if (lis3_dev.whoami = WAI_8B) {
> + lis3->data_ready_count[IRQ_LINE0] = 0;
> + lis3->data_ready_count[IRQ_LINE1] = 0;
> +
> + /* Change interrupt cfg to data ready for selftest */
> + atomic_inc(&lis3_dev.wake_thread);
> + lis3->irq_cfg = LIS3_IRQ1_DATA_READY | LIS3_IRQ2_DATA_READY;
> + lis3->read(lis3, CTRL_REG3,&ctrl_reg_data);
> + lis3->write(lis3, CTRL_REG3, (ctrl_reg_data&
> + ~(LIS3_IRQ1_MASK | LIS3_IRQ2_MASK)) |
> + (LIS3_IRQ1_DATA_READY | LIS3_IRQ2_DATA_READY));
> + }
> +
> lis3->read(lis3, CTRL_REG1,®);
> lis3->write(lis3, CTRL_REG1, (reg | selftest));
> msleep(lis3->pwron_delay / lis3lv02d_get_odr());
> @@ -223,13 +246,33 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> results[2] = z - lis3->read_data(lis3, OUTZ);
>
> ret = 0;
> +
> + if (lis3_dev.whoami = WAI_8B) {
> + /* Restore original interrupt configuration */
> + atomic_dec(&lis3_dev.wake_thread);
> + lis3->write(lis3, CTRL_REG3, ctrl_reg_data);
> + lis3->irq_cfg = irq_cfg;
> +
> + if ((irq_cfg& LIS3_IRQ1_MASK)&&
> + lis3->data_ready_count[IRQ_LINE0]< 2) {
> + ret = SELFTEST_IRQ;
> + goto fail;
> + }
> +
> + if ((irq_cfg& LIS3_IRQ2_MASK)&&
> + lis3->data_ready_count[IRQ_LINE1]< 2) {
> + ret = SELFTEST_IRQ;
> + goto fail;
> + }
> + }
> +
> if (lis3->pdata) {
> int i;
> for (i = 0; i< 3; i++) {
> /* Check against selftest acceptance limits */
> if ((results[i]< lis3->pdata->st_min_limits[i]) ||
> (results[i]> lis3->pdata->st_max_limits[i])) {
> - ret = -EIO;
> + ret = SELFTEST_FAIL;
> goto fail;
> }
> }
> @@ -392,13 +435,24 @@ static void lis302dl_interrupt_handle_click(struct lis3lv02d *lis3)
> mutex_unlock(&lis3->mutex);
> }
>
> -static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
> +static inline void lis302dl_data_ready(struct lis3lv02d *lis3, int index)
> {
> + int dummy;
>
> + /* Dummy read to ack interrupt */
> + lis3lv02d_get_xyz(lis3,&dummy,&dummy,&dummy);
> + lis3->data_ready_count[index]++;
> +}
> +
> +static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
> +{
> struct lis3lv02d *lis3 = data;
> + u8 irq_cfg = lis3->irq_cfg& LIS3_IRQ1_MASK;
>
> - if ((lis3->irq_cfg& LIS3_IRQ1_MASK) = LIS3_IRQ1_CLICK)
> + if (irq_cfg = LIS3_IRQ1_CLICK)
> lis302dl_interrupt_handle_click(lis3);
> + else if (unlikely(irq_cfg = LIS3_IRQ1_DATA_READY))
> + lis302dl_data_ready(lis3, IRQ_LINE0);
> else
> lis3lv02d_joystick_poll(lis3->idev);
>
> @@ -407,11 +461,13 @@ static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
>
> static irqreturn_t lis302dl_interrupt_thread2_8b(int irq, void *data)
> {
> -
> struct lis3lv02d *lis3 = data;
> + u8 irq_cfg = lis3->irq_cfg& LIS3_IRQ2_MASK;
>
> - if ((lis3->irq_cfg& LIS3_IRQ2_MASK) = LIS3_IRQ2_CLICK)
> + if (irq_cfg = LIS3_IRQ2_CLICK)
> lis302dl_interrupt_handle_click(lis3);
> + else if (unlikely(irq_cfg = LIS3_IRQ2_DATA_READY))
> + lis302dl_data_ready(lis3, IRQ_LINE1);
> else
> lis3lv02d_joystick_poll(lis3->idev);
>
> @@ -614,12 +670,27 @@ static void lis3lv02d_sysfs_poweron(struct lis3lv02d *lis3)
> static ssize_t lis3lv02d_selftest_show(struct device *dev,
> struct device_attribute *attr, char *buf)
> {
> - int result;
> s16 values[3];
>
> + static const char ok[] = "OK";
> + static const char fail[] = "FAIL";
> + static const char irq[] = "FAIL_IRQ";
> + const char *res;
> +
> lis3lv02d_sysfs_poweron(&lis3_dev);
> - result = lis3lv02d_selftest(&lis3_dev, values);
> - return sprintf(buf, "%s %d %d %d\n", result = 0 ? "OK" : "FAIL",
> + switch (lis3lv02d_selftest(&lis3_dev, values)) {
> + case SELFTEST_FAIL:
> + res = fail;
> + break;
> + case SELFTEST_IRQ:
> + res = irq;
> + break;
> + case SELFTEST_OK:
> + default:
> + res = ok;
> + break;
> + }
> + return sprintf(buf, "%s %d %d %d\n", res,
> values[0], values[1], values[2]);
> }
>
> diff --git a/drivers/hwmon/lis3lv02d.h b/drivers/hwmon/lis3lv02d.h
> index d3cb662..7b22cd9 100644
> --- a/drivers/hwmon/lis3lv02d.h
> +++ b/drivers/hwmon/lis3lv02d.h
> @@ -254,7 +254,8 @@ struct lis3lv02d {
> struct fasync_struct *async_queue; /* queue for the misc device */
> wait_queue_head_t misc_wait; /* Wait queue for the misc device */
> unsigned long misc_opened; /* bit0: whether the device is open */
> - atomic_t wake_thread;
> + int data_ready_count[2];
> + atomic_t wake_thread;
> unsigned char irq_cfg;
>
> struct lis3lv02d_platform_data *pdata; /* for passing board config */
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
WARNING: multiple messages have this Message-ID (diff)
From: "Éric Piel" <eric.piel@tremplin-utc.net>
To: Samu Onkalo <samu.p.onkalo@nokia.com>
Cc: khali@linux-fr.org, guenter.roeck@ericsson.com, jic23@cam.ac.uk,
lm-sensors@lm-sensors.org, linux-i2c@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 10/12] hwmon: lis3: Enhance lis3 selftest with IRQ line test
Date: Sun, 24 Oct 2010 16:58:53 +0200 [thread overview]
Message-ID: <4CC449AD.7010503@tremplin-utc.net> (raw)
In-Reply-To: <1287748654-2626-11-git-send-email-samu.p.onkalo@nokia.com>
Op 22-10-10 13:57, Samu Onkalo schreef:
> Configure chip to data ready mode in selftest and count received
> interrupts to see that interrupt line(s) are working.
>
> Signed-off-by: Samu Onkalo<samu.p.onkalo@nokia.com>
Acked-by: Eric Piel <eric.piel@tremplin-utc.net>
> ---
> drivers/hwmon/lis3lv02d.c | 87 ++++++++++++++++++++++++++++++++++++++++----
> drivers/hwmon/lis3lv02d.h | 3 +-
> 2 files changed, 81 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/hwmon/lis3lv02d.c b/drivers/hwmon/lis3lv02d.c
> index 9fd946c..f0343f3 100644
> --- a/drivers/hwmon/lis3lv02d.c
> +++ b/drivers/hwmon/lis3lv02d.c
> @@ -48,6 +48,13 @@
>
> #define LIS3_SYSFS_POWERDOWN_DELAY 5000 /* In milliseconds */
>
> +#define SELFTEST_OK 0
> +#define SELFTEST_FAIL -1
> +#define SELFTEST_IRQ -2
> +
> +#define IRQ_LINE0 0
> +#define IRQ_LINE1 1
> +
> /*
> * The sensor can also generate interrupts (DRDY) but it's pretty pointless
> * because they are generated even if the data do not change. So it's better
> @@ -198,6 +205,8 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> s16 x, y, z;
> u8 selftest;
> int ret;
> + u8 ctrl_reg_data;
> + unsigned char irq_cfg;
>
> mutex_lock(&lis3->mutex);
> if (lis3_dev.whoami == WAI_12B)
> @@ -205,6 +214,20 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> else
> selftest = CTRL1_STP;
>
> + irq_cfg = lis3->irq_cfg;
> + if (lis3_dev.whoami == WAI_8B) {
> + lis3->data_ready_count[IRQ_LINE0] = 0;
> + lis3->data_ready_count[IRQ_LINE1] = 0;
> +
> + /* Change interrupt cfg to data ready for selftest */
> + atomic_inc(&lis3_dev.wake_thread);
> + lis3->irq_cfg = LIS3_IRQ1_DATA_READY | LIS3_IRQ2_DATA_READY;
> + lis3->read(lis3, CTRL_REG3,&ctrl_reg_data);
> + lis3->write(lis3, CTRL_REG3, (ctrl_reg_data&
> + ~(LIS3_IRQ1_MASK | LIS3_IRQ2_MASK)) |
> + (LIS3_IRQ1_DATA_READY | LIS3_IRQ2_DATA_READY));
> + }
> +
> lis3->read(lis3, CTRL_REG1,®);
> lis3->write(lis3, CTRL_REG1, (reg | selftest));
> msleep(lis3->pwron_delay / lis3lv02d_get_odr());
> @@ -223,13 +246,33 @@ static int lis3lv02d_selftest(struct lis3lv02d *lis3, s16 results[3])
> results[2] = z - lis3->read_data(lis3, OUTZ);
>
> ret = 0;
> +
> + if (lis3_dev.whoami == WAI_8B) {
> + /* Restore original interrupt configuration */
> + atomic_dec(&lis3_dev.wake_thread);
> + lis3->write(lis3, CTRL_REG3, ctrl_reg_data);
> + lis3->irq_cfg = irq_cfg;
> +
> + if ((irq_cfg& LIS3_IRQ1_MASK)&&
> + lis3->data_ready_count[IRQ_LINE0]< 2) {
> + ret = SELFTEST_IRQ;
> + goto fail;
> + }
> +
> + if ((irq_cfg& LIS3_IRQ2_MASK)&&
> + lis3->data_ready_count[IRQ_LINE1]< 2) {
> + ret = SELFTEST_IRQ;
> + goto fail;
> + }
> + }
> +
> if (lis3->pdata) {
> int i;
> for (i = 0; i< 3; i++) {
> /* Check against selftest acceptance limits */
> if ((results[i]< lis3->pdata->st_min_limits[i]) ||
> (results[i]> lis3->pdata->st_max_limits[i])) {
> - ret = -EIO;
> + ret = SELFTEST_FAIL;
> goto fail;
> }
> }
> @@ -392,13 +435,24 @@ static void lis302dl_interrupt_handle_click(struct lis3lv02d *lis3)
> mutex_unlock(&lis3->mutex);
> }
>
> -static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
> +static inline void lis302dl_data_ready(struct lis3lv02d *lis3, int index)
> {
> + int dummy;
>
> + /* Dummy read to ack interrupt */
> + lis3lv02d_get_xyz(lis3,&dummy,&dummy,&dummy);
> + lis3->data_ready_count[index]++;
> +}
> +
> +static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
> +{
> struct lis3lv02d *lis3 = data;
> + u8 irq_cfg = lis3->irq_cfg& LIS3_IRQ1_MASK;
>
> - if ((lis3->irq_cfg& LIS3_IRQ1_MASK) == LIS3_IRQ1_CLICK)
> + if (irq_cfg == LIS3_IRQ1_CLICK)
> lis302dl_interrupt_handle_click(lis3);
> + else if (unlikely(irq_cfg == LIS3_IRQ1_DATA_READY))
> + lis302dl_data_ready(lis3, IRQ_LINE0);
> else
> lis3lv02d_joystick_poll(lis3->idev);
>
> @@ -407,11 +461,13 @@ static irqreturn_t lis302dl_interrupt_thread1_8b(int irq, void *data)
>
> static irqreturn_t lis302dl_interrupt_thread2_8b(int irq, void *data)
> {
> -
> struct lis3lv02d *lis3 = data;
> + u8 irq_cfg = lis3->irq_cfg& LIS3_IRQ2_MASK;
>
> - if ((lis3->irq_cfg& LIS3_IRQ2_MASK) == LIS3_IRQ2_CLICK)
> + if (irq_cfg == LIS3_IRQ2_CLICK)
> lis302dl_interrupt_handle_click(lis3);
> + else if (unlikely(irq_cfg == LIS3_IRQ2_DATA_READY))
> + lis302dl_data_ready(lis3, IRQ_LINE1);
> else
> lis3lv02d_joystick_poll(lis3->idev);
>
> @@ -614,12 +670,27 @@ static void lis3lv02d_sysfs_poweron(struct lis3lv02d *lis3)
> static ssize_t lis3lv02d_selftest_show(struct device *dev,
> struct device_attribute *attr, char *buf)
> {
> - int result;
> s16 values[3];
>
> + static const char ok[] = "OK";
> + static const char fail[] = "FAIL";
> + static const char irq[] = "FAIL_IRQ";
> + const char *res;
> +
> lis3lv02d_sysfs_poweron(&lis3_dev);
> - result = lis3lv02d_selftest(&lis3_dev, values);
> - return sprintf(buf, "%s %d %d %d\n", result == 0 ? "OK" : "FAIL",
> + switch (lis3lv02d_selftest(&lis3_dev, values)) {
> + case SELFTEST_FAIL:
> + res = fail;
> + break;
> + case SELFTEST_IRQ:
> + res = irq;
> + break;
> + case SELFTEST_OK:
> + default:
> + res = ok;
> + break;
> + }
> + return sprintf(buf, "%s %d %d %d\n", res,
> values[0], values[1], values[2]);
> }
>
> diff --git a/drivers/hwmon/lis3lv02d.h b/drivers/hwmon/lis3lv02d.h
> index d3cb662..7b22cd9 100644
> --- a/drivers/hwmon/lis3lv02d.h
> +++ b/drivers/hwmon/lis3lv02d.h
> @@ -254,7 +254,8 @@ struct lis3lv02d {
> struct fasync_struct *async_queue; /* queue for the misc device */
> wait_queue_head_t misc_wait; /* Wait queue for the misc device */
> unsigned long misc_opened; /* bit0: whether the device is open */
> - atomic_t wake_thread;
> + int data_ready_count[2];
> + atomic_t wake_thread;
> unsigned char irq_cfg;
>
> struct lis3lv02d_platform_data *pdata; /* for passing board config */
next prev parent reply other threads:[~2010-10-24 14:58 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-22 11:57 [PATCH 00/12] lis3 accelerator feature update Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] " Samu Onkalo
[not found] ` <1287748654-2626-1-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-22 11:57 ` [PATCH 01/12] hwmon: lis3: pm_runtime support Samu Onkalo
2010-10-22 11:57 ` Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] " Samu Onkalo
[not found] ` <1287748654-2626-2-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-22 16:13 ` Jonathan Cameron
2010-10-22 16:13 ` Jonathan Cameron
2010-10-22 16:13 ` [lm-sensors] " Jonathan Cameron
2010-10-24 14:03 ` Éric Piel
2010-10-24 14:03 ` Éric Piel
2010-10-24 14:03 ` [lm-sensors] " Éric Piel
2010-10-22 11:57 ` [PATCH 02/12] hwmon: lis3: regulator control Samu Onkalo
2010-10-22 11:57 ` Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] " Samu Onkalo
[not found] ` <1287748654-2626-3-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-22 16:11 ` Jonathan Cameron
2010-10-22 16:11 ` Jonathan Cameron
2010-10-22 16:11 ` [lm-sensors] " Jonathan Cameron
2010-10-24 14:59 ` Éric Piel
2010-10-24 14:59 ` [lm-sensors] " Éric Piel
2010-10-22 11:57 ` [PATCH 06/12] hwmon: lis3: restore axis enabled bits Samu Onkalo
2010-10-22 11:57 ` Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] " Samu Onkalo
2010-10-24 14:24 ` Éric Piel
2010-10-24 14:24 ` [lm-sensors] [PATCH 06/12] hwmon: lis3: restore axis enabled Éric Piel
2010-10-22 11:57 ` [PATCH 11/12] hwmon: lis3: Short explanations of platform data fields Samu Onkalo
2010-10-22 11:57 ` Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] [PATCH 11/12] hwmon: lis3: Short explanations of Samu Onkalo
[not found] ` <1287748654-2626-12-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-22 16:25 ` [PATCH 11/12] hwmon: lis3: Short explanations of platform data fields Jonathan Cameron
2010-10-22 16:25 ` Jonathan Cameron
2010-10-22 16:25 ` [lm-sensors] [PATCH 11/12] hwmon: lis3: Short explanations of Jonathan Cameron
[not found] ` <4CC1BAEE.3030708-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
2010-10-23 13:39 ` [PATCHv2] hwmon: lis3: Short explanations of platform data fields Samu Onkalo
2010-10-23 13:39 ` [lm-sensors] [PATCHv2] hwmon: lis3: Short explanations of platform Samu Onkalo
[not found] ` <1287841184-4871-1-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-24 14:59 ` [PATCHv2] hwmon: lis3: Short explanations of platform data fields Éric Piel
2010-10-24 14:59 ` [lm-sensors] [PATCHv2] hwmon: lis3: Short explanations of Éric Piel
2010-10-22 20:08 ` [PATCH 00/12] lis3 accelerator feature update Guenter Roeck
2010-10-22 20:08 ` Guenter Roeck
2010-10-22 20:08 ` [lm-sensors] " Guenter Roeck
2010-10-22 23:44 ` Éric Piel
2010-10-22 23:44 ` [lm-sensors] " Éric Piel
[not found] ` <4CC221F0.5040608-VkQ1JFuSMpfAbQlEx87xDw@public.gmane.org>
2010-10-23 1:05 ` Guenter Roeck
2010-10-23 1:05 ` Guenter Roeck
2010-10-23 1:05 ` [lm-sensors] " Guenter Roeck
2010-10-24 15:05 ` Éric Piel
2010-10-24 15:05 ` Éric Piel
2010-10-24 15:05 ` [lm-sensors] " Éric Piel
[not found] ` <4CC44B3D.5030404-VkQ1JFuSMpfAbQlEx87xDw@public.gmane.org>
2010-10-24 15:35 ` Guenter Roeck
2010-10-24 15:35 ` Guenter Roeck
2010-10-24 15:35 ` [lm-sensors] " Guenter Roeck
[not found] ` <20101024153548.GA14303-IzeFyvvaP7pWk0Htik3J/w@public.gmane.org>
2010-10-24 16:35 ` Guenter Roeck
2010-10-24 16:35 ` Guenter Roeck
2010-10-24 16:35 ` Guenter Roeck
[not found] ` <20101024163529.GA14650-IzeFyvvaP7pWk0Htik3J/w@public.gmane.org>
2010-10-24 17:01 ` Guenter Roeck
2010-10-24 17:01 ` Guenter Roeck
2010-10-24 17:01 ` Guenter Roeck
2010-10-25 6:10 ` samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w
2010-10-25 6:10 ` samu.p.onkalo
2010-10-25 6:10 ` [lm-sensors] " samu.p.onkalo
2010-10-22 11:57 ` [PATCH 03/12] hwmon: lis3: Cleanup interrupt handling Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] " Samu Onkalo
2010-10-24 14:18 ` Éric Piel
2010-10-24 14:18 ` Éric Piel
2010-10-24 14:18 ` [lm-sensors] [PATCH 03/12] hwmon: lis3: Cleanup interrupt Éric Piel
2010-10-22 11:57 ` [PATCH 04/12] hwmon: lis3: Update coordinates at polled device open Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] [PATCH 04/12] hwmon: lis3: Update coordinates at Samu Onkalo
2010-10-24 14:19 ` [PATCH 04/12] hwmon: lis3: Update coordinates at polled device open Éric Piel
2010-10-24 14:19 ` [lm-sensors] [PATCH 04/12] hwmon: lis3: Update coordinates at Éric Piel
2010-10-22 11:57 ` [PATCH 05/12] hwmon: lis3: Power on corrections Samu Onkalo
2010-10-22 11:57 ` Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] " Samu Onkalo
2010-10-24 14:22 ` Éric Piel
2010-10-24 14:22 ` Éric Piel
2010-10-24 14:22 ` [lm-sensors] " Éric Piel
2010-10-22 11:57 ` [PATCH 07/12] hwmon: lis3: New parameters to platform data Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] [PATCH 07/12] hwmon: lis3: New parameters to platform Samu Onkalo
[not found] ` <1287748654-2626-8-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-22 16:17 ` [PATCH 07/12] hwmon: lis3: New parameters to platform data Jonathan Cameron
2010-10-22 16:17 ` Jonathan Cameron
2010-10-22 16:17 ` [lm-sensors] [PATCH 07/12] hwmon: lis3: New parameters to Jonathan Cameron
2010-10-24 14:27 ` [PATCH 07/12] hwmon: lis3: New parameters to platform data Éric Piel
2010-10-24 14:27 ` Éric Piel
2010-10-24 14:27 ` [lm-sensors] [PATCH 07/12] hwmon: lis3: New parameters to Éric Piel
2010-10-22 11:57 ` [PATCH 08/12] hwmon: lis3: Adjust fuzziness for 8 bit device Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] [PATCH 08/12] hwmon: lis3: Adjust fuzziness for 8 bit Samu Onkalo
2010-10-24 14:33 ` [PATCH 08/12] hwmon: lis3: Adjust fuzziness for 8 bit device Éric Piel
2010-10-24 14:33 ` [lm-sensors] [PATCH 08/12] hwmon: lis3: Adjust fuzziness for 8 Éric Piel
2010-10-22 11:57 ` [PATCH 09/12] hwmon: lis3: use block read to access data registers Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] [PATCH 09/12] hwmon: lis3: use block read to access Samu Onkalo
2010-10-22 16:20 ` [PATCH 09/12] hwmon: lis3: use block read to access data registers Jonathan Cameron
2010-10-22 16:20 ` [lm-sensors] [PATCH 09/12] hwmon: lis3: use block read to Jonathan Cameron
2010-10-24 14:53 ` [PATCH 09/12] hwmon: lis3: use block read to access data registers Éric Piel
2010-10-24 14:53 ` [lm-sensors] [PATCH 09/12] hwmon: lis3: use block read to Éric Piel
2010-10-22 11:57 ` [PATCH 10/12] hwmon: lis3: Enhance lis3 selftest with IRQ line test Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] [PATCH 10/12] hwmon: lis3: Enhance lis3 selftest with Samu Onkalo
[not found] ` <1287748654-2626-11-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-24 14:58 ` Éric Piel [this message]
2010-10-24 14:58 ` [PATCH 10/12] hwmon: lis3: Enhance lis3 selftest with IRQ line test Éric Piel
2010-10-24 14:58 ` [lm-sensors] [PATCH 10/12] hwmon: lis3: Enhance lis3 selftest Éric Piel
2010-10-22 11:57 ` [PATCH 12/12] hwmon: lis3: Release resources is case of failure Samu Onkalo
2010-10-22 11:57 ` Samu Onkalo
2010-10-22 11:57 ` [lm-sensors] [PATCH 12/12] hwmon: lis3: Release resources is case Samu Onkalo
[not found] ` <1287748654-2626-13-git-send-email-samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-10-24 14:59 ` [PATCH 12/12] hwmon: lis3: Release resources is case of failure Éric Piel
2010-10-24 14:59 ` Éric Piel
2010-10-24 14:59 ` [lm-sensors] [PATCH 12/12] hwmon: lis3: Release resources is Éric Piel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4CC449AD.7010503@tremplin-utc.net \
--to=eric.piel-vkq1jfusmpfabqlex87xdw@public.gmane.org \
--cc=guenter.roeck-IzeFyvvaP7pWk0Htik3J/w@public.gmane.org \
--cc=jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=lm-sensors-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org \
--cc=samu.p.onkalo-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.