* [PATCH 0/4] staging:iio:ad2s1210: Driver cleanup
@ 2018-03-09 23:45 Rodrigo Siqueira
2018-03-09 23:45 ` [PATCH 1/4] staging:iio:ad2s1210: Remove end of line with '[' Rodrigo Siqueira
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Rodrigo Siqueira @ 2018-03-09 23:45 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
Hartmut Knaack, Peter Meerwald-Stadler, Greg Kroah-Hartman,
Graff Yang
Cc: linux-iio, devel, daniel.baluta, linux-kernel
This patchset removes some unused #define directive and variables.
Additionally, it fixes two checkpatch problems. Finally, the last patch adds
struct documentation and comments to some part of the code. All of the changes
have the intention to improve the readability of new updates.
Rodrigo Siqueira (4):
staging:iio:ad2s1210: Remove end of line with '['
staging:iio:ad2s1210: Remove unused #define directive
staging:iio:ad2s1210: Remove old_data from ad2s1210_state
staging:iio:ad2s1210: Add comments/documentation
drivers/staging/iio/resolver/ad2s1210.c | 52 +++++++++++++++++++++++----------
drivers/staging/iio/resolver/ad2s1210.h | 9 +++++-
2 files changed, 44 insertions(+), 17 deletions(-)
--
2.16.2
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/4] staging:iio:ad2s1210: Remove end of line with '['
2018-03-09 23:45 [PATCH 0/4] staging:iio:ad2s1210: Driver cleanup Rodrigo Siqueira
@ 2018-03-09 23:45 ` Rodrigo Siqueira
2018-03-10 16:41 ` Jonathan Cameron
2018-03-09 23:46 ` [PATCH 2/4] staging:iio:ad2s1210: Remove unused #define directive Rodrigo Siqueira
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Rodrigo Siqueira @ 2018-03-09 23:45 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
Hartmut Knaack, Peter Meerwald-Stadler, Greg Kroah-Hartman,
Graff Yang
Cc: linux-iio, devel, daniel.baluta, linux-kernel
This patch fixes the checkpatch.pl check:
iio/resolver/ad2s1210.c:202: CHECK: Lines should not end with a '['
Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
---
drivers/staging/iio/resolver/ad2s1210.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index f8baab061eba..0cdcd71e285b 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -165,9 +165,10 @@ int ad2s1210_update_frequency_control_word(struct ad2s1210_state *st)
static unsigned char ad2s1210_read_resolution_pin(struct ad2s1210_state *st)
{
- return ad2s1210_resolution_value[
- (gpio_get_value(st->pdata->res[0]) << 1) |
- gpio_get_value(st->pdata->res[1])];
+ int resolution = (gpio_get_value(st->pdata->res[0]) << 1) |
+ gpio_get_value(st->pdata->res[1]);
+
+ return ad2s1210_resolution_value[resolution];
}
static const int ad2s1210_res_pins[4][2] = {
--
2.16.2
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/4] staging:iio:ad2s1210: Remove unused #define directive
2018-03-09 23:45 [PATCH 0/4] staging:iio:ad2s1210: Driver cleanup Rodrigo Siqueira
2018-03-09 23:45 ` [PATCH 1/4] staging:iio:ad2s1210: Remove end of line with '[' Rodrigo Siqueira
@ 2018-03-09 23:46 ` Rodrigo Siqueira
2018-03-10 16:45 ` Jonathan Cameron
2018-03-09 23:46 ` [PATCH 3/4] staging:iio:ad2s1210: Remove old_data from ad2s1210_state Rodrigo Siqueira
2018-03-09 23:46 ` [PATCH 4/4] staging:iio:ad2s1210: Add comments/documentation Rodrigo Siqueira
3 siblings, 1 reply; 10+ messages in thread
From: Rodrigo Siqueira @ 2018-03-09 23:46 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
Hartmut Knaack, Peter Meerwald-Stadler, Greg Kroah-Hartman,
Graff Yang
Cc: linux-iio, devel, daniel.baluta, linux-kernel
This patch removes some #define directives not used in the code.
Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
---
drivers/staging/iio/resolver/ad2s1210.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index 0cdcd71e285b..79cb56670fc2 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -35,8 +35,6 @@
#define AD2S1210_SET_RES1 0x02
#define AD2S1210_SET_RES0 0x01
-#define AD2S1210_SET_ENRESOLUTION (AD2S1210_SET_ENRES1 | \
- AD2S1210_SET_ENRES0)
#define AD2S1210_SET_RESOLUTION (AD2S1210_SET_RES1 | AD2S1210_SET_RES0)
#define AD2S1210_REG_POSITION 0x80
@@ -53,10 +51,6 @@
#define AD2S1210_REG_SOFT_RESET 0xF0
#define AD2S1210_REG_FAULT 0xFF
-/* pin SAMPLE, A0, A1, RES0, RES1, is controlled by driver */
-#define AD2S1210_SAA 3
-#define AD2S1210_PN (AD2S1210_SAA + AD2S1210_RES)
-
#define AD2S1210_MIN_CLKIN 6144000
#define AD2S1210_MAX_CLKIN 10240000
#define AD2S1210_MIN_EXCIT 2000
@@ -64,10 +58,6 @@
#define AD2S1210_MIN_FCW 0x4
#define AD2S1210_MAX_FCW 0x50
-/* default input clock on serial interface */
-#define AD2S1210_DEF_CLKIN 8192000
-/* clock period in nano second */
-#define AD2S1210_DEF_TCK (1000000000 / AD2S1210_DEF_CLKIN)
#define AD2S1210_DEF_EXCIT 10000
enum ad2s1210_mode {
--
2.16.2
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/4] staging:iio:ad2s1210: Remove old_data from ad2s1210_state
2018-03-09 23:45 [PATCH 0/4] staging:iio:ad2s1210: Driver cleanup Rodrigo Siqueira
2018-03-09 23:45 ` [PATCH 1/4] staging:iio:ad2s1210: Remove end of line with '[' Rodrigo Siqueira
2018-03-09 23:46 ` [PATCH 2/4] staging:iio:ad2s1210: Remove unused #define directive Rodrigo Siqueira
@ 2018-03-09 23:46 ` Rodrigo Siqueira
2018-03-10 17:21 ` Jonathan Cameron
2018-03-09 23:46 ` [PATCH 4/4] staging:iio:ad2s1210: Add comments/documentation Rodrigo Siqueira
3 siblings, 1 reply; 10+ messages in thread
From: Rodrigo Siqueira @ 2018-03-09 23:46 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
Hartmut Knaack, Peter Meerwald-Stadler, Greg Kroah-Hartman,
Graff Yang
Cc: linux-iio, devel, daniel.baluta, linux-kernel
The variable old_data is a bool type, which only receives the value
'true' in the function ad2s1210_config_write and ad2s1210_config_read.
There is no other use for this variable. This patch removes old_data
from the ad2s1210_state and from all the function that use it.
Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
---
drivers/staging/iio/resolver/ad2s1210.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index 79cb56670fc2..ac13b99bd9cb 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -76,7 +76,6 @@ struct ad2s1210_state {
unsigned int fclkin;
unsigned int fexcit;
bool hysteresis;
- bool old_data;
u8 resolution;
enum ad2s1210_mode mode;
u8 rx[2] ____cacheline_aligned;
@@ -107,7 +106,6 @@ static int ad2s1210_config_write(struct ad2s1210_state *st, u8 data)
ret = spi_write(st->sdev, st->tx, 1);
if (ret < 0)
return ret;
- st->old_data = true;
return 0;
}
@@ -129,7 +127,6 @@ static int ad2s1210_config_read(struct ad2s1210_state *st,
ret = spi_sync_transfer(st->sdev, &xfer, 1);
if (ret < 0)
return ret;
- st->old_data = true;
return st->rx[1];
}
--
2.16.2
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/4] staging:iio:ad2s1210: Add comments/documentation
2018-03-09 23:45 [PATCH 0/4] staging:iio:ad2s1210: Driver cleanup Rodrigo Siqueira
` (2 preceding siblings ...)
2018-03-09 23:46 ` [PATCH 3/4] staging:iio:ad2s1210: Remove old_data from ad2s1210_state Rodrigo Siqueira
@ 2018-03-09 23:46 ` Rodrigo Siqueira
2018-03-10 17:52 ` Jonathan Cameron
3 siblings, 1 reply; 10+ messages in thread
From: Rodrigo Siqueira @ 2018-03-09 23:46 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
Hartmut Knaack, Peter Meerwald-Stadler, Greg Kroah-Hartman,
Graff Yang
Cc: linux-iio, devel, daniel.baluta, linux-kernel
The original code of AD2S1210 does not have documentation for structs
and register configurations; this difficult the code comprehension. This
patch adds structs documentation, briefly comments some register
settings and acronyms, and adds little explanations of some calculation
found in the code.
Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
---
drivers/staging/iio/resolver/ad2s1210.c | 32 ++++++++++++++++++++++++++++++++
drivers/staging/iio/resolver/ad2s1210.h | 9 ++++++++-
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
index ac13b99bd9cb..9bb8fd782f5a 100644
--- a/drivers/staging/iio/resolver/ad2s1210.c
+++ b/drivers/staging/iio/resolver/ad2s1210.c
@@ -24,8 +24,10 @@
#define DRV_NAME "ad2s1210"
+/* The default value of the control register on power-up */
#define AD2S1210_DEF_CONTROL 0x7E
+/* Control Register Bit */
#define AD2S1210_MSB_IS_HIGH 0x80
#define AD2S1210_MSB_IS_LOW 0x7F
#define AD2S1210_PHASE_LOCK_RANGE_44 0x20
@@ -39,14 +41,23 @@
#define AD2S1210_REG_POSITION 0x80
#define AD2S1210_REG_VELOCITY 0x82
+
+/* Loss of Signal (LOS) register address */
#define AD2S1210_REG_LOS_THRD 0x88
+
+/* Degradation of Signal (DOS) register address */
#define AD2S1210_REG_DOS_OVR_THRD 0x89
#define AD2S1210_REG_DOS_MIS_THRD 0x8A
#define AD2S1210_REG_DOS_RST_MAX_THRD 0x8B
#define AD2S1210_REG_DOS_RST_MIN_THRD 0x8C
+
+/* Loss of Tracking (LOT) register address */
#define AD2S1210_REG_LOT_HIGH_THRD 0x8D
#define AD2S1210_REG_LOT_LOW_THRD 0x8E
+
+/* Excitation Frequency (EXCIT) register address */
#define AD2S1210_REG_EXCIT_FREQ 0x91
+
#define AD2S1210_REG_CONTROL 0x92
#define AD2S1210_REG_SOFT_RESET 0xF0
#define AD2S1210_REG_FAULT 0xFF
@@ -69,6 +80,20 @@ enum ad2s1210_mode {
static const unsigned int ad2s1210_resolution_value[] = { 10, 12, 14, 16 };
+/**
+ * struct ad2s1210_state - device instance specific state.
+ * @pdata: chip model specific constants, gpioin, etc
+ * @lock: lock to ensure state is consistent
+ * @sdev: the SPI device for this driver instance
+ * @fclkin: frequency of clock input
+ * @fexcit: excitation frequency
+ * @hysteresis: cache of whether hysteresis is enabled
+ * @old_data: cache of SPI communication after operation
+ * @resolution: chip resolution could be 10/12/14/16-bit
+ * @mode: indicates the operating mode
+ * @rx: receive buffer
+ * @tx: transmit buffer
+ */
struct ad2s1210_state {
const struct ad2s1210_platform_data *pdata;
struct mutex lock;
@@ -82,6 +107,7 @@ struct ad2s1210_state {
u8 tx[2] ____cacheline_aligned;
};
+/* Maps A0 and A1 inputs to the respective mode. */
static const int ad2s1210_mode_vals[4][2] = {
[MOD_POS] = { 0, 0 },
[MOD_VEL] = { 0, 1 },
@@ -137,6 +163,11 @@ int ad2s1210_update_frequency_control_word(struct ad2s1210_state *st)
int ret;
unsigned char fcw;
+ /*
+ * The fcw stands for frequency control word, which can be obtained
+ * from:
+ * fcw = (Excitation Frequency * 2^15) / fclkin
+ */
fcw = (unsigned char)(st->fexcit * (1 << 15) / st->fclkin);
if (fcw < AD2S1210_MIN_FCW || fcw > AD2S1210_MAX_FCW) {
dev_err(&st->sdev->dev, "ad2s1210: FCW out of range\n");
@@ -158,6 +189,7 @@ static unsigned char ad2s1210_read_resolution_pin(struct ad2s1210_state *st)
return ad2s1210_resolution_value[resolution];
}
+/* Maps RES0 and RES1 inputs to the respective mode. */
static const int ad2s1210_res_pins[4][2] = {
{ 0, 0 }, {0, 1}, {1, 0}, {1, 1}
};
diff --git a/drivers/staging/iio/resolver/ad2s1210.h b/drivers/staging/iio/resolver/ad2s1210.h
index e9b2147701fc..cbe21bca7638 100644
--- a/drivers/staging/iio/resolver/ad2s1210.h
+++ b/drivers/staging/iio/resolver/ad2s1210.h
@@ -1,5 +1,5 @@
/*
- * ad2s1210.h plaform data for the ADI Resolver to Digital Converters:
+ * ad2s1210.h platform data for the ADI Resolver to Digital Converters:
* AD2S1210
*
* Copyright (c) 2010-2010 Analog Devices Inc.
@@ -11,6 +11,13 @@
#ifndef _AD2S1210_H
#define _AD2S1210_H
+/**
+ * struct ad2s1210_platform_data - chip model
+ * @sample: sample input used to clearing the fault register
+ * @a: array of inputs (A0 and A1)
+ * @res: array of resolution inputs (RES0 and RES1)
+ * @gpioin: control the read operation
+ */
struct ad2s1210_platform_data {
unsigned int sample;
unsigned int a[2];
--
2.16.2
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] staging:iio:ad2s1210: Remove end of line with '['
2018-03-09 23:45 ` [PATCH 1/4] staging:iio:ad2s1210: Remove end of line with '[' Rodrigo Siqueira
@ 2018-03-10 16:41 ` Jonathan Cameron
0 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2018-03-10 16:41 UTC (permalink / raw)
To: Rodrigo Siqueira
Cc: devel, Graff Yang, Lars-Peter Clausen, Michael Hennerich,
linux-iio, Greg Kroah-Hartman, linux-kernel,
Peter Meerwald-Stadler, Hartmut Knaack, daniel.baluta
On Fri, 9 Mar 2018 20:45:50 -0300
Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> wrote:
> This patch fixes the checkpatch.pl check:
>
> iio/resolver/ad2s1210.c:202: CHECK: Lines should not end with a '['
>
> Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Applied to the togreg branch of iio.git and pushed out as testing
for the autobuilders to play with it.
Thanks,
Jonathan
> ---
> drivers/staging/iio/resolver/ad2s1210.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
> index f8baab061eba..0cdcd71e285b 100644
> --- a/drivers/staging/iio/resolver/ad2s1210.c
> +++ b/drivers/staging/iio/resolver/ad2s1210.c
> @@ -165,9 +165,10 @@ int ad2s1210_update_frequency_control_word(struct ad2s1210_state *st)
>
> static unsigned char ad2s1210_read_resolution_pin(struct ad2s1210_state *st)
> {
> - return ad2s1210_resolution_value[
> - (gpio_get_value(st->pdata->res[0]) << 1) |
> - gpio_get_value(st->pdata->res[1])];
> + int resolution = (gpio_get_value(st->pdata->res[0]) << 1) |
> + gpio_get_value(st->pdata->res[1]);
> +
> + return ad2s1210_resolution_value[resolution];
> }
>
> static const int ad2s1210_res_pins[4][2] = {
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] staging:iio:ad2s1210: Remove unused #define directive
2018-03-09 23:46 ` [PATCH 2/4] staging:iio:ad2s1210: Remove unused #define directive Rodrigo Siqueira
@ 2018-03-10 16:45 ` Jonathan Cameron
0 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2018-03-10 16:45 UTC (permalink / raw)
To: Rodrigo Siqueira
Cc: devel, Graff Yang, Lars-Peter Clausen, Michael Hennerich,
linux-iio, Greg Kroah-Hartman, linux-kernel,
Peter Meerwald-Stadler, Hartmut Knaack, daniel.baluta
On Fri, 9 Mar 2018 20:46:05 -0300
Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> wrote:
> This patch removes some #define directives not used in the code.
>
> Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Applied.
One comment inline.
> ---
> drivers/staging/iio/resolver/ad2s1210.c | 10 ----------
> 1 file changed, 10 deletions(-)
>
> diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
> index 0cdcd71e285b..79cb56670fc2 100644
> --- a/drivers/staging/iio/resolver/ad2s1210.c
> +++ b/drivers/staging/iio/resolver/ad2s1210.c
> @@ -35,8 +35,6 @@
> #define AD2S1210_SET_RES1 0x02
> #define AD2S1210_SET_RES0 0x01
>
> -#define AD2S1210_SET_ENRESOLUTION (AD2S1210_SET_ENRES1 | \
> - AD2S1210_SET_ENRES0)
> #define AD2S1210_SET_RESOLUTION (AD2S1210_SET_RES1 | AD2S1210_SET_RES0)
>
> #define AD2S1210_REG_POSITION 0x80
> @@ -53,10 +51,6 @@
> #define AD2S1210_REG_SOFT_RESET 0xF0
> #define AD2S1210_REG_FAULT 0xFF
>
> -/* pin SAMPLE, A0, A1, RES0, RES1, is controlled by driver */
> -#define AD2S1210_SAA 3
> -#define AD2S1210_PN (AD2S1210_SAA + AD2S1210_RES)
> -
> #define AD2S1210_MIN_CLKIN 6144000
> #define AD2S1210_MAX_CLKIN 10240000
> #define AD2S1210_MIN_EXCIT 2000
> @@ -64,10 +58,6 @@
> #define AD2S1210_MIN_FCW 0x4
> #define AD2S1210_MAX_FCW 0x50
>
> -/* default input clock on serial interface */
I'm not sure what this has to do with the serial interface.
It's the clk input from an external clock source.
> -#define AD2S1210_DEF_CLKIN 8192000
> -/* clock period in nano second */
> -#define AD2S1210_DEF_TCK (1000000000 / AD2S1210_DEF_CLKIN)
> #define AD2S1210_DEF_EXCIT 10000
>
> enum ad2s1210_mode {
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] staging:iio:ad2s1210: Remove old_data from ad2s1210_state
2018-03-09 23:46 ` [PATCH 3/4] staging:iio:ad2s1210: Remove old_data from ad2s1210_state Rodrigo Siqueira
@ 2018-03-10 17:21 ` Jonathan Cameron
0 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2018-03-10 17:21 UTC (permalink / raw)
To: Rodrigo Siqueira
Cc: devel, Graff Yang, Lars-Peter Clausen, Michael Hennerich,
linux-iio, Greg Kroah-Hartman, linux-kernel,
Peter Meerwald-Stadler, Hartmut Knaack, daniel.baluta
On Fri, 9 Mar 2018 20:46:25 -0300
Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> wrote:
> The variable old_data is a bool type, which only receives the value
> 'true' in the function ad2s1210_config_write and ad2s1210_config_read.
> There is no other use for this variable. This patch removes old_data
> from the ad2s1210_state and from all the function that use it.
>
> Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Applied.
Thanks,
Jonathan
> ---
> drivers/staging/iio/resolver/ad2s1210.c | 3 ---
> 1 file changed, 3 deletions(-)
>
> diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
> index 79cb56670fc2..ac13b99bd9cb 100644
> --- a/drivers/staging/iio/resolver/ad2s1210.c
> +++ b/drivers/staging/iio/resolver/ad2s1210.c
> @@ -76,7 +76,6 @@ struct ad2s1210_state {
> unsigned int fclkin;
> unsigned int fexcit;
> bool hysteresis;
> - bool old_data;
> u8 resolution;
> enum ad2s1210_mode mode;
> u8 rx[2] ____cacheline_aligned;
> @@ -107,7 +106,6 @@ static int ad2s1210_config_write(struct ad2s1210_state *st, u8 data)
> ret = spi_write(st->sdev, st->tx, 1);
> if (ret < 0)
> return ret;
> - st->old_data = true;
>
> return 0;
> }
> @@ -129,7 +127,6 @@ static int ad2s1210_config_read(struct ad2s1210_state *st,
> ret = spi_sync_transfer(st->sdev, &xfer, 1);
> if (ret < 0)
> return ret;
> - st->old_data = true;
>
> return st->rx[1];
> }
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] staging:iio:ad2s1210: Add comments/documentation
2018-03-09 23:46 ` [PATCH 4/4] staging:iio:ad2s1210: Add comments/documentation Rodrigo Siqueira
@ 2018-03-10 17:52 ` Jonathan Cameron
2018-03-12 12:25 ` Rodrigo Siqueira
0 siblings, 1 reply; 10+ messages in thread
From: Jonathan Cameron @ 2018-03-10 17:52 UTC (permalink / raw)
To: Rodrigo Siqueira
Cc: devel, Graff Yang, Lars-Peter Clausen, Michael Hennerich,
linux-iio, Greg Kroah-Hartman, linux-kernel,
Peter Meerwald-Stadler, Hartmut Knaack, daniel.baluta
On Fri, 9 Mar 2018 20:46:40 -0300
Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> wrote:
> The original code of AD2S1210 does not have documentation for structs
> and register configurations; this difficult the code comprehension. This
> patch adds structs documentation, briefly comments some register
> settings and acronyms, and adds little explanations of some calculation
> found in the code.
>
> Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Various comments inline.
Only a few of them are about you actual patch - mostly more general.
I'd look at renaming all those defines to be more consistent. There
is no association between bits of a register and the register at the
moment which will make the code rather error prone.
Note this is going to be a difficult driver to get out of staging.
There is quite a bit to do and we don't currently have anyone who
has test hardware as far as I know. So brave move ;)
Thanks,
Jonathan
> ---
> drivers/staging/iio/resolver/ad2s1210.c | 32 ++++++++++++++++++++++++++++++++
> drivers/staging/iio/resolver/ad2s1210.h | 9 ++++++++-
> 2 files changed, 40 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
> index ac13b99bd9cb..9bb8fd782f5a 100644
> --- a/drivers/staging/iio/resolver/ad2s1210.c
> +++ b/drivers/staging/iio/resolver/ad2s1210.c
> @@ -24,8 +24,10 @@
>
> #define DRV_NAME "ad2s1210"
>
> +/* The default value of the control register on power-up */
> #define AD2S1210_DEF_CONTROL 0x7E
>
> +/* Control Register Bit */
I would change the defines to make this explicit.
This is a truely odd bit of naming anyway.
#define AD2S1210_ADDRESS 0x80
#define AD2S1210_DATA 0x00
and perhaps a
#define AD2S1210_DATA_MASK 0x7F
would make sense?
> #define AD2S1210_MSB_IS_HIGH 0x80
> #define AD2S1210_MSB_IS_LOW 0x7F
> #define AD2S1210_PHASE_LOCK_RANGE_44 0x20
> @@ -39,14 +41,23 @@
>
> #define AD2S1210_REG_POSITION 0x80
> #define AD2S1210_REG_VELOCITY 0x82
> +
> +/* Loss of Signal (LOS) register address */
> #define AD2S1210_REG_LOS_THRD 0x88
> +
> +/* Degradation of Signal (DOS) register address */
addresses
> #define AD2S1210_REG_DOS_OVR_THRD 0x89
> #define AD2S1210_REG_DOS_MIS_THRD 0x8A
> #define AD2S1210_REG_DOS_RST_MAX_THRD 0x8B
> #define AD2S1210_REG_DOS_RST_MIN_THRD 0x8C
> +
> +/* Loss of Tracking (LOT) register address */
addresses
> #define AD2S1210_REG_LOT_HIGH_THRD 0x8D
> #define AD2S1210_REG_LOT_LOW_THRD 0x8E
> +
> +/* Excitation Frequency (EXCIT) register address */
> #define AD2S1210_REG_EXCIT_FREQ 0x91
> +
> #define AD2S1210_REG_CONTROL 0x92
> #define AD2S1210_REG_SOFT_RESET 0xF0
> #define AD2S1210_REG_FAULT 0xFF
> @@ -69,6 +80,20 @@ enum ad2s1210_mode {
>
> static const unsigned int ad2s1210_resolution_value[] = { 10, 12, 14, 16 };
>
> +/**
> + * struct ad2s1210_state - device instance specific state.
> + * @pdata: chip model specific constants, gpioin, etc
Except they aren't anything to do with the chip model. This is about
how it is wired not what it is.
> + * @lock: lock to ensure state is consistent
> + * @sdev: the SPI device for this driver instance
> + * @fclkin: frequency of clock input
> + * @fexcit: excitation frequency
> + * @hysteresis: cache of whether hysteresis is enabled
> + * @old_data: cache of SPI communication after operation
Umm. You got rid of this one in the earlier patch didn't you?
> + * @resolution: chip resolution could be 10/12/14/16-bit
>From reading the datasheet quickly I suspect there is a 'best possible'
resolution given a particular set of controls. I'm not sure we want
to expose this to userspace at all.
> + * @mode: indicates the operating mode
Where operating mode is what? Comment would be more useful if it
listed them.
> + * @rx: receive buffer
> + * @tx: transmit buffer
> + */
> struct ad2s1210_state {
> const struct ad2s1210_platform_data *pdata;
> struct mutex lock;
> @@ -82,6 +107,7 @@ struct ad2s1210_state {
> u8 tx[2] ____cacheline_aligned;
> };
>
> +/* Maps A0 and A1 inputs to the respective mode. */
> static const int ad2s1210_mode_vals[4][2] = {
> [MOD_POS] = { 0, 0 },
> [MOD_VEL] = { 0, 1 },
> @@ -137,6 +163,11 @@ int ad2s1210_update_frequency_control_word(struct ad2s1210_state *st)
> int ret;
> unsigned char fcw;
>
> + /*
> + * The fcw stands for frequency control word, which can be obtained
> + * from:
> + * fcw = (Excitation Frequency * 2^15) / fclkin
> + */
Whilst we are here - userspace being responsible for writing a hardware
frequency input needs to change. Makes no sense.
> fcw = (unsigned char)(st->fexcit * (1 << 15) / st->fclkin);
> if (fcw < AD2S1210_MIN_FCW || fcw > AD2S1210_MAX_FCW) {
> dev_err(&st->sdev->dev, "ad2s1210: FCW out of range\n");
> @@ -158,6 +189,7 @@ static unsigned char ad2s1210_read_resolution_pin(struct ad2s1210_state *st)
> return ad2s1210_resolution_value[resolution];
> }
>
> +/* Maps RES0 and RES1 inputs to the respective mode. */
> static const int ad2s1210_res_pins[4][2] = {
> { 0, 0 }, {0, 1}, {1, 0}, {1, 1}
> };
> diff --git a/drivers/staging/iio/resolver/ad2s1210.h b/drivers/staging/iio/resolver/ad2s1210.h
> index e9b2147701fc..cbe21bca7638 100644
> --- a/drivers/staging/iio/resolver/ad2s1210.h
> +++ b/drivers/staging/iio/resolver/ad2s1210.h
> @@ -1,5 +1,5 @@
> /*
> - * ad2s1210.h plaform data for the ADI Resolver to Digital Converters:
> + * ad2s1210.h platform data for the ADI Resolver to Digital Converters:
> * AD2S1210
Hmm. I would suggest that, seeing as we don't have any in kernel users
we should probably just drop the platform data in favour of a devicetree
binding.
Fair enough to document it as an intermediate step however.
> *
> * Copyright (c) 2010-2010 Analog Devices Inc.
> @@ -11,6 +11,13 @@
> #ifndef _AD2S1210_H
> #define _AD2S1210_H
>
> +/**
> + * struct ad2s1210_platform_data - chip model
> + * @sample: sample input used to clearing the fault register
This hasn't been a good means of proving a gpio for some time.
These all want converting over to the current gpio handling best practice.
> + * @a: array of inputs (A0 and A1)
> + * @res: array of resolution inputs (RES0 and RES1)
> + * @gpioin: control the read operation
In what way? I think this is actually a hack to allow for the
fact that the above pins may not be controllable by the driver.
Not sure though as I haven't chased through the code fully.
> + */
> struct ad2s1210_platform_data {
> unsigned int sample;
> unsigned int a[2];
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] staging:iio:ad2s1210: Add comments/documentation
2018-03-10 17:52 ` Jonathan Cameron
@ 2018-03-12 12:25 ` Rodrigo Siqueira
0 siblings, 0 replies; 10+ messages in thread
From: Rodrigo Siqueira @ 2018-03-12 12:25 UTC (permalink / raw)
To: Jonathan Cameron
Cc: devel, Graff Yang, Lars-Peter Clausen, Michael Hennerich,
linux-iio, Greg Kroah-Hartman, linux-kernel,
Peter Meerwald-Stadler, Hartmut Knaack, daniel.baluta
On 03/10, Jonathan Cameron wrote:
> On Fri, 9 Mar 2018 20:46:40 -0300
> Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> wrote:
>
> > The original code of AD2S1210 does not have documentation for structs
> > and register configurations; this difficult the code comprehension. This
> > patch adds structs documentation, briefly comments some register
> > settings and acronyms, and adds little explanations of some calculation
> > found in the code.
> >
> > Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
> Various comments inline.
>
> Only a few of them are about you actual patch - mostly more general.
>
> I'd look at renaming all those defines to be more consistent. There
> is no association between bits of a register and the register at the
> moment which will make the code rather error prone.
>
> Note this is going to be a difficult driver to get out of staging.
> There is quite a bit to do and we don't currently have anyone who
> has test hardware as far as I know. So brave move ;)
Hi Jonathan,
After careful reading your email, I believe that is a better idea to
divide this kind of work in other patches. So, instead of trying to
document the module at once, I will do it step by step in the future
patches series; I take note of all your comments. I will put an effort
in this module because I think that is an excellent opportunity to learn
the IIO subsystem. Finally, I will try to contact Analog Devices; maybe
someone can test the module for me.
Thanks for all the reviews and comments, I learned a lot with all your
explanations :)
> Thanks,
>
> Jonathan
>
> > ---
> > drivers/staging/iio/resolver/ad2s1210.c | 32 ++++++++++++++++++++++++++++++++
> > drivers/staging/iio/resolver/ad2s1210.h | 9 ++++++++-
> > 2 files changed, 40 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
> > index ac13b99bd9cb..9bb8fd782f5a 100644
> > --- a/drivers/staging/iio/resolver/ad2s1210.c
> > +++ b/drivers/staging/iio/resolver/ad2s1210.c
> > @@ -24,8 +24,10 @@
> >
> > #define DRV_NAME "ad2s1210"
> >
> > +/* The default value of the control register on power-up */
> > #define AD2S1210_DEF_CONTROL 0x7E
> >
> > +/* Control Register Bit */
> I would change the defines to make this explicit.
> This is a truely odd bit of naming anyway.
> #define AD2S1210_ADDRESS 0x80
> #define AD2S1210_DATA 0x00
> and perhaps a
> #define AD2S1210_DATA_MASK 0x7F
>
> would make sense?
>
>
> > #define AD2S1210_MSB_IS_HIGH 0x80
> > #define AD2S1210_MSB_IS_LOW 0x7F
> > #define AD2S1210_PHASE_LOCK_RANGE_44 0x20
> > @@ -39,14 +41,23 @@
> >
> > #define AD2S1210_REG_POSITION 0x80
> > #define AD2S1210_REG_VELOCITY 0x82
> > +
> > +/* Loss of Signal (LOS) register address */
> > #define AD2S1210_REG_LOS_THRD 0x88
> > +
> > +/* Degradation of Signal (DOS) register address */
> addresses
>
> > #define AD2S1210_REG_DOS_OVR_THRD 0x89
> > #define AD2S1210_REG_DOS_MIS_THRD 0x8A
> > #define AD2S1210_REG_DOS_RST_MAX_THRD 0x8B
> > #define AD2S1210_REG_DOS_RST_MIN_THRD 0x8C
> > +
> > +/* Loss of Tracking (LOT) register address */
> addresses
>
> > #define AD2S1210_REG_LOT_HIGH_THRD 0x8D
> > #define AD2S1210_REG_LOT_LOW_THRD 0x8E
> > +
> > +/* Excitation Frequency (EXCIT) register address */
> > #define AD2S1210_REG_EXCIT_FREQ 0x91
> > +
> > #define AD2S1210_REG_CONTROL 0x92
> > #define AD2S1210_REG_SOFT_RESET 0xF0
> > #define AD2S1210_REG_FAULT 0xFF
> > @@ -69,6 +80,20 @@ enum ad2s1210_mode {
> >
> > static const unsigned int ad2s1210_resolution_value[] = { 10, 12, 14, 16 };
> >
> > +/**
> > + * struct ad2s1210_state - device instance specific state.
> > + * @pdata: chip model specific constants, gpioin, etc
> Except they aren't anything to do with the chip model. This is about
> how it is wired not what it is.
>
> > + * @lock: lock to ensure state is consistent
> > + * @sdev: the SPI device for this driver instance
> > + * @fclkin: frequency of clock input
> > + * @fexcit: excitation frequency
> > + * @hysteresis: cache of whether hysteresis is enabled
> > + * @old_data: cache of SPI communication after operation
> Umm. You got rid of this one in the earlier patch didn't you?
>
> > + * @resolution: chip resolution could be 10/12/14/16-bit
> From reading the datasheet quickly I suspect there is a 'best possible'
> resolution given a particular set of controls. I'm not sure we want
> to expose this to userspace at all.
>
> > + * @mode: indicates the operating mode
> Where operating mode is what? Comment would be more useful if it
> listed them.
>
> > + * @rx: receive buffer
> > + * @tx: transmit buffer
> > + */
> > struct ad2s1210_state {
> > const struct ad2s1210_platform_data *pdata;
> > struct mutex lock;
> > @@ -82,6 +107,7 @@ struct ad2s1210_state {
> > u8 tx[2] ____cacheline_aligned;
> > };
> >
> > +/* Maps A0 and A1 inputs to the respective mode. */
> > static const int ad2s1210_mode_vals[4][2] = {
> > [MOD_POS] = { 0, 0 },
> > [MOD_VEL] = { 0, 1 },
> > @@ -137,6 +163,11 @@ int ad2s1210_update_frequency_control_word(struct ad2s1210_state *st)
> > int ret;
> > unsigned char fcw;
> >
> > + /*
> > + * The fcw stands for frequency control word, which can be obtained
> > + * from:
> > + * fcw = (Excitation Frequency * 2^15) / fclkin
> > + */
> Whilst we are here - userspace being responsible for writing a hardware
> frequency input needs to change. Makes no sense.
>
> > fcw = (unsigned char)(st->fexcit * (1 << 15) / st->fclkin);
> > if (fcw < AD2S1210_MIN_FCW || fcw > AD2S1210_MAX_FCW) {
> > dev_err(&st->sdev->dev, "ad2s1210: FCW out of range\n");
> > @@ -158,6 +189,7 @@ static unsigned char ad2s1210_read_resolution_pin(struct ad2s1210_state *st)
> > return ad2s1210_resolution_value[resolution];
> > }
> >
> > +/* Maps RES0 and RES1 inputs to the respective mode. */
> > static const int ad2s1210_res_pins[4][2] = {
> > { 0, 0 }, {0, 1}, {1, 0}, {1, 1}
> > };
> > diff --git a/drivers/staging/iio/resolver/ad2s1210.h b/drivers/staging/iio/resolver/ad2s1210.h
> > index e9b2147701fc..cbe21bca7638 100644
> > --- a/drivers/staging/iio/resolver/ad2s1210.h
> > +++ b/drivers/staging/iio/resolver/ad2s1210.h
> > @@ -1,5 +1,5 @@
> > /*
> > - * ad2s1210.h plaform data for the ADI Resolver to Digital Converters:
> > + * ad2s1210.h platform data for the ADI Resolver to Digital Converters:
> > * AD2S1210
> Hmm. I would suggest that, seeing as we don't have any in kernel users
> we should probably just drop the platform data in favour of a devicetree
> binding.
>
> Fair enough to document it as an intermediate step however.
> > *
> > * Copyright (c) 2010-2010 Analog Devices Inc.
> > @@ -11,6 +11,13 @@
> > #ifndef _AD2S1210_H
> > #define _AD2S1210_H
> >
> > +/**
> > + * struct ad2s1210_platform_data - chip model
> > + * @sample: sample input used to clearing the fault register
> This hasn't been a good means of proving a gpio for some time.
> These all want converting over to the current gpio handling best practice.
>
> > + * @a: array of inputs (A0 and A1)
> > + * @res: array of resolution inputs (RES0 and RES1)
> > + * @gpioin: control the read operation
> In what way? I think this is actually a hack to allow for the
> fact that the above pins may not be controllable by the driver.
> Not sure though as I haven't chased through the code fully.
>
> > + */
> > struct ad2s1210_platform_data {
> > unsigned int sample;
> > unsigned int a[2];
>
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-03-12 12:25 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-09 23:45 [PATCH 0/4] staging:iio:ad2s1210: Driver cleanup Rodrigo Siqueira
2018-03-09 23:45 ` [PATCH 1/4] staging:iio:ad2s1210: Remove end of line with '[' Rodrigo Siqueira
2018-03-10 16:41 ` Jonathan Cameron
2018-03-09 23:46 ` [PATCH 2/4] staging:iio:ad2s1210: Remove unused #define directive Rodrigo Siqueira
2018-03-10 16:45 ` Jonathan Cameron
2018-03-09 23:46 ` [PATCH 3/4] staging:iio:ad2s1210: Remove old_data from ad2s1210_state Rodrigo Siqueira
2018-03-10 17:21 ` Jonathan Cameron
2018-03-09 23:46 ` [PATCH 4/4] staging:iio:ad2s1210: Add comments/documentation Rodrigo Siqueira
2018-03-10 17:52 ` Jonathan Cameron
2018-03-12 12:25 ` Rodrigo Siqueira
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).