From: William Breathitt Gray <vilhelm.gray@gmail.com>
To: linus.walleij@linaro.org
Cc: akpm@linux-foundation.org, linux-gpio@vger.kernel.org,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk,
William Breathitt Gray <vilhelm.gray@gmail.com>
Subject: [PATCH v7 0/8] Introduce the for_each_set_clump8 macro
Date: Sat, 12 Jan 2019 10:47:34 +0900 [thread overview]
Message-ID: <cover.1547257386.git.vilhelm.gray@gmail.com> (raw)
Changes in v7:
- Pass bitmap_set_value8 'value' parameter by value
- Remove bitmap_set_value8 final mask operation; users beware: values
greater than 8 bits may clobber bitmap
While adding GPIO get_multiple/set_multiple callback support for various
drivers, I noticed a pattern of looping manifesting that would be useful
standardized as a macro.
This patchset introduces the for_each_set_clump8 macro and utilizes it
in several GPIO drivers. The for_each_set_clump macro8 facilitates a
for-loop syntax that iterates over a memory region entire groups of set
bits at a time.
For example, suppose you would like to iterate over a 32-bit integer 8
bits at a time, skipping over 8-bit groups with no set bit, where
XXXXXXXX represents the current 8-bit group:
Example: 10111110 00000000 11111111 00110011
First loop: 10111110 00000000 11111111 XXXXXXXX
Second loop: 10111110 00000000 XXXXXXXX 00110011
Third loop: XXXXXXXX 00000000 11111111 00110011
Each iteration of the loop returns the next 8-bit group that has at
least one set bit.
The for_each_set_clump8 macro has four parameters:
* start: set to the bit offset of the current clump
* clump: set to the current clump value
* bits: bitmap to search within
* size: bitmap size in number of bits
In this version of the patchset, the for_each_set_clump macro has been
reimplemented and simplified based on the suggestions provided by Rasmus
Villemoes and Andy Shevchenko in the version 4 submission.
In particular, the function of the for_each_set_clump macro has been
restricted to handle only 8-bit clumps; the drivers that use the
for_each_set_clump macro only handle 8-bit ports so a generic
for_each_set_clump implementation is not necessary. Thus, a solution for
odd-sized clumps (e.g. 3-bit, 7-bit, etc.) mismatching word boundaries
can be postponed until a driver appears that actually requires a generic
for_each_set_clump implementation.
In addition, the bitmap_get_value8 and bitmap_set_value8 functions are
introduced to get and set 8-bit values respectively. Their use is based
on the behavior suggested in the patchset version 4 review. Similarly,
the implementation of the find_next_clump function has been simplified
in order for the function to match the syntax and use of the
find_next_bit function.
William Breathitt Gray (8):
bitops: Introduce the for_each_set_clump8 macro
lib/test_bitmap.c: Add for_each_set_clump8 test cases
gpio: 104-dio-48e: Utilize for_each_set_clump8 macro
gpio: 104-idi-48: Utilize for_each_set_clump8 macro
gpio: gpio-mm: Utilize for_each_set_clump8 macro
gpio: ws16c48: Utilize for_each_set_clump8 macro
gpio: pci-idio-16: Utilize for_each_set_clump8 macro
gpio: pcie-idio-24: Utilize for_each_set_clump8 macro
drivers/gpio/gpio-104-dio-48e.c | 71 ++++++-------------
drivers/gpio/gpio-104-idi-48.c | 36 ++--------
drivers/gpio/gpio-gpio-mm.c | 71 ++++++-------------
drivers/gpio/gpio-pci-idio-16.c | 73 +++++++-------------
drivers/gpio/gpio-pcie-idio-24.c | 109 +++++++++++-------------------
drivers/gpio/gpio-ws16c48.c | 71 ++++++-------------
include/asm-generic/bitops/find.h | 14 ++++
include/linux/bitops.h | 5 ++
lib/find_bit.c | 63 +++++++++++++++++
lib/test_bitmap.c | 65 ++++++++++++++++++
10 files changed, 279 insertions(+), 299 deletions(-)
--
2.20.1
next reply other threads:[~2019-01-12 1:47 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-12 1:47 William Breathitt Gray [this message]
2019-01-12 1:48 ` [PATCH v7 1/8] bitops: Introduce the for_each_set_clump8 macro William Breathitt Gray
2019-01-12 8:36 ` Andy Shevchenko
2019-01-12 1:48 ` [PATCH v7 2/8] lib/test_bitmap.c: Add for_each_set_clump8 test cases William Breathitt Gray
2019-01-12 1:48 ` [PATCH v7 3/8] gpio: 104-dio-48e: Utilize for_each_set_clump8 macro William Breathitt Gray
2019-01-12 1:49 ` [PATCH v7 4/8] gpio: 104-idi-48: " William Breathitt Gray
2019-01-12 1:49 ` [PATCH v7 5/8] gpio: gpio-mm: " William Breathitt Gray
2019-01-12 1:49 ` [PATCH v7 6/8] gpio: ws16c48: " William Breathitt Gray
2019-01-12 1:49 ` [PATCH v7 7/8] gpio: pci-idio-16: " William Breathitt Gray
2019-01-12 1:50 ` [PATCH v7 8/8] gpio: pcie-idio-24: " William Breathitt Gray
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=cover.1547257386.git.vilhelm.gray@gmail.com \
--to=vilhelm.gray@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
/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.