Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1237309 > unrolled thread

[PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function

Started byjon@ringle.org
First post2015-10-01 13:50 +0200
Last post2015-10-05 16:30 +0200
Articles 8 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function jon@ringle.org - 2015-10-01 13:50 +0200
    Re: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver David Miller <davem@davemloft.net> - 2015-10-05 12:40 +0200
      Re: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver David Miller <davem@davemloft.net> - 2015-10-05 12:50 +0200
        Re: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver David Miller <davem@davemloft.net> - 2015-10-05 12:50 +0200
    Re: [PATCH net-next v2 1/2] regmap: Allow installing custom  reg_update_bits function David Miller <davem@davemloft.net> - 2015-10-05 12:40 +0200
      Re: [PATCH net-next v2 1/2] regmap: Allow installing custom  reg_update_bits function Jon Ringle <jon@ringle.org> - 2015-10-05 14:00 +0200
        Re: [PATCH net-next v2 1/2] regmap: Allow installing custom  reg_update_bits function David Miller <davem@davemloft.net> - 2015-10-05 15:10 +0200
          Re: [PATCH net-next v2 1/2] regmap: Allow installing custom  reg_update_bits function Mark Brown <broonie@kernel.org> - 2015-10-05 16:30 +0200

#1237309 — [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function

Fromjon@ringle.org
Date2015-10-01 13:50 +0200
Subject[PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function
Message-ID<qeKx4-2WG-11@gated-at.bofh.it>
From: Jon Ringle <jringle@gridpoint.com>

This commit allows installing a custom reg_update_bits function for cases where
the hardware provides a mechanism to set or clear register bits without a
read/modify/write cycle. Such is the case with the Microchip ENCX24J600.

Signed-off-by: Jon Ringle <jringle@gridpoint.com>
---
 drivers/base/regmap/internal.h |  3 +++
 drivers/base/regmap/regmap.c   | 25 +++++++++++++++++++++++++
 include/linux/regmap.h         |  4 ++++
 3 files changed, 32 insertions(+)

diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
index cc55788..4036d7a 100644
--- a/drivers/base/regmap/internal.h
+++ b/drivers/base/regmap/internal.h
@@ -98,6 +98,9 @@ struct regmap {
 
 	int (*reg_read)(void *context, unsigned int reg, unsigned int *val);
 	int (*reg_write)(void *context, unsigned int reg, unsigned int val);
+	int (*reg_update_bits)(void *context, unsigned int reg,
+			       unsigned int mask, unsigned int val,
+			       bool *change, bool force_write);
 
 	bool defer_caching;
 
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index afaf562..70387c9 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -619,6 +619,7 @@ struct regmap *__regmap_init(struct device *dev,
 		goto skip_format_initialization;
 	} else {
 		map->reg_read  = _regmap_bus_read;
+		map->reg_update_bits = bus->reg_update_bits;
 	}
 
 	reg_endian = regmap_get_reg_endian(bus, config);
@@ -2509,6 +2510,30 @@ static int _regmap_update_bits(struct regmap *map, unsigned int reg,
 	int ret;
 	unsigned int tmp, orig;
 
+	if (map->reg_update_bits) {
+		ret = map->reg_update_bits(map->bus_context, reg, mask, val,
+					   change, force_write);
+		if (ret != 0)
+			return ret;
+
+		/* Fix up the cache by read/modify/write */
+		if (!map->cache_bypass && !map->defer_caching) {
+			ret = regcache_read(map, reg, &orig);
+			if (ret != 0)
+				return ret;
+
+			tmp = orig & ~mask;
+			tmp |= val & mask;
+
+			ret = regcache_write(map, reg, tmp);
+			if (ret != 0)
+				return ret;
+			if (map->cache_only)
+				map->cache_dirty = true;
+		}
+		return ret;
+	}
+
 	ret = _regmap_read(map, reg, &orig);
 	if (ret != 0)
 		return ret;
diff --git a/include/linux/regmap.h b/include/linux/regmap.h
index 8fc0bfd..4d3a3b1 100644
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -296,6 +296,9 @@ typedef int (*regmap_hw_reg_read)(void *context, unsigned int reg,
 				  unsigned int *val);
 typedef int (*regmap_hw_reg_write)(void *context, unsigned int reg,
 				   unsigned int val);
+typedef int (*regmap_hw_reg_update_bits)(void *context, unsigned int reg,
+					 unsigned int mask, unsigned int val,
+					 bool *change, bool force_write);
 typedef struct regmap_async *(*regmap_hw_async_alloc)(void);
 typedef void (*regmap_hw_free_context)(void *context);
 
@@ -335,6 +338,7 @@ struct regmap_bus {
 	regmap_hw_gather_write gather_write;
 	regmap_hw_async_write async_write;
 	regmap_hw_reg_write reg_write;
+	regmap_hw_reg_update_bits reg_update_bits;
 	regmap_hw_read read;
 	regmap_hw_reg_read reg_read;
 	regmap_hw_free_context free_context;
-- 
2.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1239430 — Re: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver

FromDavid Miller <davem@davemloft.net>
Date2015-10-05 12:40 +0200
SubjectRe: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver
Message-ID<qgblv-4JR-13@gated-at.bofh.it>
In reply to#1237309
From: jon@ringle.org
Date: Thu,  1 Oct 2015 07:43:21 -0400

> From: Jon Ringle <jringle@gridpoint.com>
> 
> This ethernet driver supports the Micorchip enc424j600/626j600 Ethernet
> controller over a SPI bus interface. This driver makes use of the regmap API to
> optimize access to registers by caching registers where possible.
> 
> Datasheet:
> http://ww1.microchip.com/downloads/en/DeviceDoc/39935b.pdf
> 
> Signed-off-by: Jon Ringle <jringle@gridpoint.com>

Applied.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1239438 — Re: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver

FromDavid Miller <davem@davemloft.net>
Date2015-10-05 12:50 +0200
SubjectRe: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver
Message-ID<qgbvb-4Vf-1@gated-at.bofh.it>
In reply to#1239430
RnJvbTogRGF2aWQgTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0Pg0KRGF0ZTogTW9uLCAwNSBP
Y3QgMjAxNSAwMzo1NDo1NSAtMDcwMCAoUERUKQ0KDQo+IEZyb206IGpvbkByaW5nbGUub3JnDQo+
IERhdGU6IFRodSwgIDEgT2N0IDIwMTUgMDc6NDM6MjEgLTA0MDANCj4gDQo+PiBGcm9tOiBKb24g
UmluZ2xlIDxqcmluZ2xlQGdyaWRwb2ludC5jb20+DQo+PiANCj4+IFRoaXMgZXRoZXJuZXQgZHJp
dmVyIHN1cHBvcnRzIHRoZSBNaWNvcmNoaXAgZW5jNDI0ajYwMC82MjZqNjAwIEV0aGVybmV0DQo+
PiBjb250cm9sbGVyIG92ZXIgYSBTUEkgYnVzIGludGVyZmFjZS4gVGhpcyBkcml2ZXIgbWFrZXMg
dXNlIG9mIHRoZSByZWdtYXAgQVBJIHRvDQo+PiBvcHRpbWl6ZSBhY2Nlc3MgdG8gcmVnaXN0ZXJz
IGJ5IGNhY2hpbmcgcmVnaXN0ZXJzIHdoZXJlIHBvc3NpYmxlLg0KPj4gDQo+PiBEYXRhc2hlZXQ6
DQo+PiBodHRwOi8vd3cxLm1pY3JvY2hpcC5jb20vZG93bmxvYWRzL2VuL0RldmljZURvYy8zOTkz
NWIucGRmDQo+PiANCj4+IFNpZ25lZC1vZmYtYnk6IEpvbiBSaW5nbGUgPGpyaW5nbGVAZ3JpZHBv
aW50LmNvbT4NCj4gDQo+IEFwcGxpZWQuDQoNCkFjdHVhbGx5LCBJIGhhZCB0byByZXZlcnQgYm90
aCBwYXRjaGVzLiAgUGxlYXNlIGxvb2sgYXQgdGhlIGNvbXBpbGVyDQp3YXJuaW5ncyB5b3VyIGNv
ZGUgZ2VuZXJhdGVzOg0KDQpkcml2ZXJzL21mZC93bTUxMTAtdGFibGVzLmM6IEluIGZ1bmN0aW9u
IKF3bTUxMTBfcGF0Y2iiOg0KZHJpdmVycy9tZmQvd201MTEwLXRhYmxlcy5jOjI4MToxMTogd2Fy
bmluZzogcGFzc2luZyBhcmd1bWVudCAyIG9mIKFyZWdtYXBfcmVnaXN0ZXJfcGF0Y2iiIGZyb20g
aW5jb21wYXRpYmxlIHBvaW50ZXIgdHlwZSBbZW5hYmxlZCBieSBkZWZhdWx0XQ0KSW4gZmlsZSBp
bmNsdWRlZCBmcm9tIGluY2x1ZGUvbGludXgvbWZkL2FyaXpvbmEvY29yZS5oOjE3OjAsDQogICAg
ICAgICAgICAgICAgIGZyb20gZHJpdmVycy9tZmQvd201MTEwLXRhYmxlcy5jOjE1Og0KaW5jbHVk
ZS9saW51eC9yZWdtYXAuaDo3Mjc6NTogbm90ZTogZXhwZWN0ZWQgoWNvbnN0IHN0cnVjdCByZWdf
c2VxdWVuY2UgKqIgYnV0IGFyZ3VtZW50IGlzIG9mIHR5cGUgoWNvbnN0IHN0cnVjdCByZWdfZGVm
YXVsdCAqog0KZHJpdmVycy9tZmQvd204OTk4LXRhYmxlcy5jOiBJbiBmdW5jdGlvbiChd204OTk4
X3BhdGNoojoNCmRyaXZlcnMvbWZkL3dtODk5OC10YWJsZXMuYzo1MDoxMDogd2FybmluZzogcGFz
c2luZyBhcmd1bWVudCAyIG9mIKFyZWdtYXBfcmVnaXN0ZXJfcGF0Y2iiIGZyb20gaW5jb21wYXRp
YmxlIHBvaW50ZXIgdHlwZSBbZW5hYmxlZCBieSBkZWZhdWx0XQ0KSW4gZmlsZSBpbmNsdWRlZCBm
cm9tIGluY2x1ZGUvbGludXgvbWZkL2FyaXpvbmEvY29yZS5oOjE3OjAsDQogICAgICAgICAgICAg
ICAgIGZyb20gZHJpdmVycy9tZmQvd204OTk4LXRhYmxlcy5jOjE1Og0KaW5jbHVkZS9saW51eC9y
ZWdtYXAuaDo3Mjc6NTogbm90ZTogZXhwZWN0ZWQgoWNvbnN0IHN0cnVjdCByZWdfc2VxdWVuY2Ug
KqIgYnV0IGFyZ3VtZW50IGlzIG9mIHR5cGUgoWNvbnN0IHN0cnVjdCByZWdfZGVmYXVsdCAqog0K
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1239441 — Re: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver

FromDavid Miller <davem@davemloft.net>
Date2015-10-05 12:50 +0200
SubjectRe: [PATCH net-next v2 2/2] net: Microchip encx24j600 driver
Message-ID<qgbvb-4Vf-11@gated-at.bofh.it>
In reply to#1239438
From: David Miller <davem@davemloft.net>
Date: Mon, 05 Oct 2015 04:00:42 -0700 (PDT)

> From: David Miller <davem@davemloft.net>
> Date: Mon, 05 Oct 2015 03:54:55 -0700 (PDT)
> 
>> From: jon@ringle.org
>> Date: Thu,  1 Oct 2015 07:43:21 -0400
>> 
>>> From: Jon Ringle <jringle@gridpoint.com>
>>> 
>>> This ethernet driver supports the Micorchip enc424j600/626j600 Ethernet
>>> controller over a SPI bus interface. This driver makes use of the regmap API to
>>> optimize access to registers by caching registers where possible.
>>> 
>>> Datasheet:
>>> http://ww1.microchip.com/downloads/en/DeviceDoc/39935b.pdf
>>> 
>>> Signed-off-by: Jon Ringle <jringle@gridpoint.com>
>> 
>> Applied.
> 
> Actually, I had to revert both patches.  Please look at the compiler
> warnings your code generates:

Ignore me, that stuff isn't generated by your code, sorry.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1239432 — Re: [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function

FromDavid Miller <davem@davemloft.net>
Date2015-10-05 12:40 +0200
SubjectRe: [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function
Message-ID<qgblv-4JR-15@gated-at.bofh.it>
In reply to#1237309
From: jon@ringle.org
Date: Thu,  1 Oct 2015 07:43:20 -0400

> From: Jon Ringle <jringle@gridpoint.com>
> 
> This commit allows installing a custom reg_update_bits function for cases where
> the hardware provides a mechanism to set or clear register bits without a
> read/modify/write cycle. Such is the case with the Microchip ENCX24J600.
> 
> Signed-off-by: Jon Ringle <jringle@gridpoint.com>

Applied.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1239490 — Re: [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function

FromJon Ringle <jon@ringle.org>
Date2015-10-05 14:00 +0200
SubjectRe: [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function
Message-ID<qgcAW-6rH-9@gated-at.bofh.it>
In reply to#1239432

On Mon, 5 Oct 2015, David Miller wrote:

> From: jon@ringle.org
> Date: Thu,  1 Oct 2015 07:43:20 -0400
> 
> > From: Jon Ringle <jringle@gridpoint.com>
> > 
> > This commit allows installing a custom reg_update_bits function for cases where
> > the hardware provides a mechanism to set or clear register bits without a
> > read/modify/write cycle. Such is the case with the Microchip ENCX24J600.
> > 
> > Signed-off-by: Jon Ringle <jringle@gridpoint.com>
> 
> Applied.

Thanks David. However, I've sent a v3 patch, and also expecting feedback 
from Mark Brown on the regmap portion of it.

-Jon

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1239534 — Re: [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function

FromDavid Miller <davem@davemloft.net>
Date2015-10-05 15:10 +0200
SubjectRe: [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function
Message-ID<qgdGG-8dn-25@gated-at.bofh.it>
In reply to#1239490
From: Jon Ringle <jon@ringle.org>
Date: Mon, 5 Oct 2015 07:57:00 -0400 (EDT)

> 
> 
> On Mon, 5 Oct 2015, David Miller wrote:
> 
>> From: jon@ringle.org
>> Date: Thu,  1 Oct 2015 07:43:20 -0400
>> 
>> > From: Jon Ringle <jringle@gridpoint.com>
>> > 
>> > This commit allows installing a custom reg_update_bits function for cases where
>> > the hardware provides a mechanism to set or clear register bits without a
>> > read/modify/write cycle. Such is the case with the Microchip ENCX24J600.
>> > 
>> > Signed-off-by: Jon Ringle <jringle@gridpoint.com>
>> 
>> Applied.
> 
> Thanks David. However, I've sent a v3 patch, and also expecting feedback 
> from Mark Brown on the regmap portion of it.

Please send me relative changes from v2 to v3, thanks.

Sorry about that.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1239597 — Re: [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function

FromMark Brown <broonie@kernel.org>
Date2015-10-05 16:30 +0200
SubjectRe: [PATCH net-next v2 1/2] regmap: Allow installing custom reg_update_bits function
Message-ID<qgeW6-1th-19@gated-at.bofh.it>
In reply to#1239534

[Multipart message — attachments visible in raw view] — view raw

On Mon, Oct 05, 2015 at 06:16:09AM -0700, David Miller wrote:

> >> Applied.

> > Thanks David. However, I've sent a v3 patch, and also expecting feedback 
> > from Mark Brown on the regmap portion of it.

> Please send me relative changes from v2 to v3, thanks.

> Sorry about that.

Ugh, this is a mess :(  Can you please drop this patch instead?

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web