diff mbox series

[v7,1/2] iio: core: Introduce IIO_VAL_INT_64.

Message ID 20211024091627.28031-2-andriy.tryshnivskyy@opensynergy.com (mailing list archive)
State Accepted
Headers show
Series iio/scmi: Add reading "raw" attribute. | expand

Commit Message

Andriy Tryshnivskyy Oct. 24, 2021, 9:16 a.m. UTC
Introduce IIO_VAL_INT_64 to read 64-bit value for
channel attribute. Val is used as lower 32 bits.

Signed-off-by: Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com>
---
 drivers/iio/industrialio-core.c | 3 +++
 include/linux/iio/types.h       | 1 +
 2 files changed, 4 insertions(+)

Comments

Jonathan Cameron Oct. 24, 2021, 4:10 p.m. UTC | #1
On Sun, 24 Oct 2021 12:16:26 +0300
Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com> wrote:

> Introduce IIO_VAL_INT_64 to read 64-bit value for
> channel attribute. Val is used as lower 32 bits.
> 
> Signed-off-by: Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com>
> ---
>  drivers/iio/industrialio-core.c | 3 +++
>  include/linux/iio/types.h       | 1 +
>  2 files changed, 4 insertions(+)
> 
> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> index 6d2175eb7af2..49e42d04ea16 100644
> --- a/drivers/iio/industrialio-core.c
> +++ b/drivers/iio/industrialio-core.c
> @@ -702,6 +702,9 @@ static ssize_t __iio_format_value(char *buf, size_t offset, unsigned int type,
>  	}
>  	case IIO_VAL_CHAR:
>  		return sysfs_emit_at(buf, offset, "%c", (char)vals[0]);
> +	case IIO_VAL_INT_64:
> +		tmp2 = (s64)((((u64)vals[1]) << 32) | (u32)vals[0]);
> +		return sysfs_emit_at(buf, offset, "%lld", tmp2);
>  	default:
>  		return 0;
>  	}
> diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
> index 84b3f8175cc6..bb6578a5ee28 100644
> --- a/include/linux/iio/types.h
> +++ b/include/linux/iio/types.h
> @@ -24,6 +24,7 @@ enum iio_event_info {
>  #define IIO_VAL_INT_PLUS_NANO 3
>  #define IIO_VAL_INT_PLUS_MICRO_DB 4
>  #define IIO_VAL_INT_MULTIPLE 5
> +#define IIO_VAL_INT_64 6 /* 64-bit data, val is lower 32 bits) */

I'm guessing the closing bracket is left over of some editing?

Otherwise fine and I can tidy that up whilst applying.

Note that this is almost certainly too late for this cycle (we are
about a week away from merge window subject to whatever Linus says
for rc7 and new stuff needs some time to soak in next), but I'll
plan to get it queued up early in the next one.

>  #define IIO_VAL_FRACTIONAL 10
>  #define IIO_VAL_FRACTIONAL_LOG2 11
>  #define IIO_VAL_CHAR 12
Andriy Tryshnivskyy Oct. 24, 2021, 4:58 p.m. UTC | #2
On 24.10.21 19:10, Jonathan Cameron wrote:

> CAUTION: This email originated from outside of the organization.
> Do not click links or open attachments unless you recognize the sender and know the content is safe.
>
>
> On Sun, 24 Oct 2021 12:16:26 +0300
> Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com> wrote:
>
>> Introduce IIO_VAL_INT_64 to read 64-bit value for
>> channel attribute. Val is used as lower 32 bits.
>>
>> Signed-off-by: Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com>
>> ---
>>   drivers/iio/industrialio-core.c | 3 +++
>>   include/linux/iio/types.h       | 1 +
>>   2 files changed, 4 insertions(+)
>>
>> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
>> index 6d2175eb7af2..49e42d04ea16 100644
>> --- a/drivers/iio/industrialio-core.c
>> +++ b/drivers/iio/industrialio-core.c
>> @@ -702,6 +702,9 @@ static ssize_t __iio_format_value(char *buf, size_t offset, unsigned int type,
>>        }
>>        case IIO_VAL_CHAR:
>>                return sysfs_emit_at(buf, offset, "%c", (char)vals[0]);
>> +     case IIO_VAL_INT_64:
>> +             tmp2 = (s64)((((u64)vals[1]) << 32) | (u32)vals[0]);
>> +             return sysfs_emit_at(buf, offset, "%lld", tmp2);
>>        default:
>>                return 0;
>>        }
>> diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
>> index 84b3f8175cc6..bb6578a5ee28 100644
>> --- a/include/linux/iio/types.h
>> +++ b/include/linux/iio/types.h
>> @@ -24,6 +24,7 @@ enum iio_event_info {
>>   #define IIO_VAL_INT_PLUS_NANO 3
>>   #define IIO_VAL_INT_PLUS_MICRO_DB 4
>>   #define IIO_VAL_INT_MULTIPLE 5
>> +#define IIO_VAL_INT_64 6 /* 64-bit data, val is lower 32 bits) */
> I'm guessing the closing bracket is left over of some editing?
>
> Otherwise fine and I can tidy that up whilst applying.

Yes, it's a typo. Please remove it while applying. Thanks!

> Note that this is almost certainly too late for this cycle (we are
> about a week away from merge window subject to whatever Linus says
> for rc7 and new stuff needs some time to soak in next), but I'll
> plan to get it queued up early in the next one.
>
Noted. Thanks a lot!

>>   #define IIO_VAL_FRACTIONAL 10
>>   #define IIO_VAL_FRACTIONAL_LOG2 11
>>   #define IIO_VAL_CHAR 12

Best regards,
Andriy.
Jonathan Cameron Oct. 30, 2021, 2:47 p.m. UTC | #3
On Sun, 24 Oct 2021 19:58:52 +0300
Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com> wrote:

> On 24.10.21 19:10, Jonathan Cameron wrote:
> 
> > CAUTION: This email originated from outside of the organization.
> > Do not click links or open attachments unless you recognize the sender and know the content is safe.

Ah. One thing I forgot.  Value formatting is the only bit of IIO where
we have self tests.

Would you mind writing some test cases in
drivers/iio/tests/iio-test-format.c ?

I'll pick this up in the meantime but definitely want to make
sure we don't forget the tests!

Jonathan


> >
> >
> > On Sun, 24 Oct 2021 12:16:26 +0300
> > Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com> wrote:
> >  
> >> Introduce IIO_VAL_INT_64 to read 64-bit value for
> >> channel attribute. Val is used as lower 32 bits.
> >>
> >> Signed-off-by: Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com>
> >> ---
> >>   drivers/iio/industrialio-core.c | 3 +++
> >>   include/linux/iio/types.h       | 1 +
> >>   2 files changed, 4 insertions(+)
> >>
> >> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> >> index 6d2175eb7af2..49e42d04ea16 100644
> >> --- a/drivers/iio/industrialio-core.c
> >> +++ b/drivers/iio/industrialio-core.c
> >> @@ -702,6 +702,9 @@ static ssize_t __iio_format_value(char *buf, size_t offset, unsigned int type,
> >>        }
> >>        case IIO_VAL_CHAR:
> >>                return sysfs_emit_at(buf, offset, "%c", (char)vals[0]);
> >> +     case IIO_VAL_INT_64:
> >> +             tmp2 = (s64)((((u64)vals[1]) << 32) | (u32)vals[0]);
> >> +             return sysfs_emit_at(buf, offset, "%lld", tmp2);
> >>        default:
> >>                return 0;
> >>        }
> >> diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
> >> index 84b3f8175cc6..bb6578a5ee28 100644
> >> --- a/include/linux/iio/types.h
> >> +++ b/include/linux/iio/types.h
> >> @@ -24,6 +24,7 @@ enum iio_event_info {
> >>   #define IIO_VAL_INT_PLUS_NANO 3
> >>   #define IIO_VAL_INT_PLUS_MICRO_DB 4
> >>   #define IIO_VAL_INT_MULTIPLE 5
> >> +#define IIO_VAL_INT_64 6 /* 64-bit data, val is lower 32 bits) */  
> > I'm guessing the closing bracket is left over of some editing?
> >
> > Otherwise fine and I can tidy that up whilst applying.  
> 
> Yes, it's a typo. Please remove it while applying. Thanks!
> 
> > Note that this is almost certainly too late for this cycle (we are
> > about a week away from merge window subject to whatever Linus says
> > for rc7 and new stuff needs some time to soak in next), but I'll
> > plan to get it queued up early in the next one.
> >  
> Noted. Thanks a lot!
> 
> >>   #define IIO_VAL_FRACTIONAL 10
> >>   #define IIO_VAL_FRACTIONAL_LOG2 11
> >>   #define IIO_VAL_CHAR 12  
> 
> Best regards,
> Andriy.
> 
>
Andriy Tryshnivskyy Nov. 1, 2021, 7:28 a.m. UTC | #4
On 30.10.21 17:47, Jonathan Cameron wrote:
> CAUTION: This email originated from outside of the organization.
> Do not click links or open attachments unless you recognize the sender and know the content is safe.
>
>
> On Sun, 24 Oct 2021 19:58:52 +0300
> Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com> wrote:
>
>> On 24.10.21 19:10, Jonathan Cameron wrote:
>>
>>> CAUTION: This email originated from outside of the organization.
>>> Do not click links or open attachments unless you recognize the sender and know the content is safe.
> Ah. One thing I forgot.  Value formatting is the only bit of IIO where
> we have self tests.
>
> Would you mind writing some test cases in
> drivers/iio/tests/iio-test-format.c ?
>
> I'll pick this up in the meantime but definitely want to make
> sure we don't forget the tests!
>
> Jonathan

Sure. I will add some tests.

Regards,
Andriy.


>
>>>
>>> On Sun, 24 Oct 2021 12:16:26 +0300
>>> Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com> wrote:
>>>
>>>> Introduce IIO_VAL_INT_64 to read 64-bit value for
>>>> channel attribute. Val is used as lower 32 bits.
>>>>
>>>> Signed-off-by: Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com>
>>>> ---
>>>>    drivers/iio/industrialio-core.c | 3 +++
>>>>    include/linux/iio/types.h       | 1 +
>>>>    2 files changed, 4 insertions(+)
>>>>
>>>> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
>>>> index 6d2175eb7af2..49e42d04ea16 100644
>>>> --- a/drivers/iio/industrialio-core.c
>>>> +++ b/drivers/iio/industrialio-core.c
>>>> @@ -702,6 +702,9 @@ static ssize_t __iio_format_value(char *buf, size_t offset, unsigned int type,
>>>>         }
>>>>         case IIO_VAL_CHAR:
>>>>                 return sysfs_emit_at(buf, offset, "%c", (char)vals[0]);
>>>> +     case IIO_VAL_INT_64:
>>>> +             tmp2 = (s64)((((u64)vals[1]) << 32) | (u32)vals[0]);
>>>> +             return sysfs_emit_at(buf, offset, "%lld", tmp2);
>>>>         default:
>>>>                 return 0;
>>>>         }
>>>> diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
>>>> index 84b3f8175cc6..bb6578a5ee28 100644
>>>> --- a/include/linux/iio/types.h
>>>> +++ b/include/linux/iio/types.h
>>>> @@ -24,6 +24,7 @@ enum iio_event_info {
>>>>    #define IIO_VAL_INT_PLUS_NANO 3
>>>>    #define IIO_VAL_INT_PLUS_MICRO_DB 4
>>>>    #define IIO_VAL_INT_MULTIPLE 5
>>>> +#define IIO_VAL_INT_64 6 /* 64-bit data, val is lower 32 bits) */
>>> I'm guessing the closing bracket is left over of some editing?
>>>
>>> Otherwise fine and I can tidy that up whilst applying.
>> Yes, it's a typo. Please remove it while applying. Thanks!
>>
>>> Note that this is almost certainly too late for this cycle (we are
>>> about a week away from merge window subject to whatever Linus says
>>> for rc7 and new stuff needs some time to soak in next), but I'll
>>> plan to get it queued up early in the next one.
>>>
>> Noted. Thanks a lot!
>>
>>>>    #define IIO_VAL_FRACTIONAL 10
>>>>    #define IIO_VAL_FRACTIONAL_LOG2 11
>>>>    #define IIO_VAL_CHAR 12
>> Best regards,
>> Andriy.
>>
>>
>
Andriy Tryshnivskyy Nov. 1, 2021, 1:54 p.m. UTC | #5
From 6e6a3661785584c6cc88370f78578810e67cb0e5 Mon Sep 17 00:00:00 2001
From: Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com>
Date: Mon, 1 Nov 2021 15:44:31 +0200
Subject: [PATCH] iio: test: Add test for IIO_VAL_INT_64.

Signed-off-by: Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com>
---
  drivers/iio/test/iio-test-format.c | 51 ++++++++++++++++++++++++++++++
  1 file changed, 51 insertions(+)

diff --git a/drivers/iio/test/iio-test-format.c 
b/drivers/iio/test/iio-test-format.c
index f1e951eddb43..f07945c2cf28 100644
--- a/drivers/iio/test/iio-test-format.c
+++ b/drivers/iio/test/iio-test-format.c
@@ -182,12 +182,63 @@ static void 
iio_test_iio_format_value_multiple(struct kunit *test)
      IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1 -2 3 -4 5 \n");
  }

+static void iio_test_iio_format_value_integer_64(struct kunit *test)
+{
+    char *buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
+    s64 value;
+    int values[2];
+    int ret;
+
+    value = 24;
+    values[0] = lower_32_bits(value);
+    values[1] = upper_32_bits(value);
+    ret = iio_format_value(buf, IIO_VAL_INT_64, 2, values);
+    IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "24\n");
+
+    value = -24;
+    values[0] = lower_32_bits(value);
+    values[1] = upper_32_bits(value);
+    ret = iio_format_value(buf, IIO_VAL_INT_64, 2, values);
+    IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-24\n");
+
+    value = 0;
+    values[0] = lower_32_bits(value);
+    values[1] = upper_32_bits(value);
+    ret = iio_format_value(buf, IIO_VAL_INT_64, 2, values);
+    IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0\n");
+
+    value = 4294967295;
+    values[0] = lower_32_bits(value);
+    values[1] = upper_32_bits(value);
+    ret = iio_format_value(buf, IIO_VAL_INT_64, 2, values);
+    IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "4294967295\n");
+
+    value = -4294967295;
+    values[0] = lower_32_bits(value);
+    values[1] = upper_32_bits(value);
+    ret = iio_format_value(buf, IIO_VAL_INT_64, 2, values);
+    IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-4294967295\n");
+
+    value = LLONG_MAX;
+    values[0] = lower_32_bits(value);
+    values[1] = upper_32_bits(value);
+    ret = iio_format_value(buf, IIO_VAL_INT_64, 2, values);
+    IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "9223372036854775807\n");
+
+    value = LLONG_MIN;
+    values[0] = lower_32_bits(value);
+    values[1] = upper_32_bits(value);
+    ret = iio_format_value(buf, IIO_VAL_INT_64, 2, values);
+    IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-9223372036854775808\n");
+}
+
  static struct kunit_case iio_format_test_cases[] = {
          KUNIT_CASE(iio_test_iio_format_value_integer),
          KUNIT_CASE(iio_test_iio_format_value_fixedpoint),
          KUNIT_CASE(iio_test_iio_format_value_fractional),
          KUNIT_CASE(iio_test_iio_format_value_fractional_log2),
          KUNIT_CASE(iio_test_iio_format_value_multiple),
+        KUNIT_CASE(iio_test_iio_format_value_integer_64),
          {}
  };
Andy Shevchenko Nov. 1, 2021, 2:23 p.m. UTC | #6
On Mon, Nov 1, 2021 at 3:54 PM Andriy Tryshnivskyy
<andriy.tryshnivskyy@opensynergy.com> wrote:
>
>  From 6e6a3661785584c6cc88370f78578810e67cb0e5 Mon Sep 17 00:00:00 2001
> From: Andriy Tryshnivskyy <andriy.tryshnivskyy@opensynergy.com>
> Date: Mon, 1 Nov 2021 15:44:31 +0200
> Subject: [PATCH] iio: test: Add test for IIO_VAL_INT_64.

Something went wrong. Please, use the `git send-email ...` tool for the patches.
diff mbox series

Patch

diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 6d2175eb7af2..49e42d04ea16 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -702,6 +702,9 @@  static ssize_t __iio_format_value(char *buf, size_t offset, unsigned int type,
 	}
 	case IIO_VAL_CHAR:
 		return sysfs_emit_at(buf, offset, "%c", (char)vals[0]);
+	case IIO_VAL_INT_64:
+		tmp2 = (s64)((((u64)vals[1]) << 32) | (u32)vals[0]);
+		return sysfs_emit_at(buf, offset, "%lld", tmp2);
 	default:
 		return 0;
 	}
diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
index 84b3f8175cc6..bb6578a5ee28 100644
--- a/include/linux/iio/types.h
+++ b/include/linux/iio/types.h
@@ -24,6 +24,7 @@  enum iio_event_info {
 #define IIO_VAL_INT_PLUS_NANO 3
 #define IIO_VAL_INT_PLUS_MICRO_DB 4
 #define IIO_VAL_INT_MULTIPLE 5
+#define IIO_VAL_INT_64 6 /* 64-bit data, val is lower 32 bits) */
 #define IIO_VAL_FRACTIONAL 10
 #define IIO_VAL_FRACTIONAL_LOG2 11
 #define IIO_VAL_CHAR 12