Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1237309 > unrolled thread
| Started by | jon@ringle.org |
|---|---|
| First post | 2015-10-01 13:50 +0200 |
| Last post | 2015-10-05 16:30 +0200 |
| Articles | 8 — 4 participants |
Back to article view | Back to linux.kernel
[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
| From | jon@ringle.org |
|---|---|
| Date | 2015-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]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-10-05 12:40 +0200 |
| Subject | Re: [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]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-10-05 12:50 +0200 |
| Subject | Re: [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]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-10-05 12:50 +0200 |
| Subject | Re: [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]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-10-05 12:40 +0200 |
| Subject | Re: [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]
| From | Jon Ringle <jon@ringle.org> |
|---|---|
| Date | 2015-10-05 14:00 +0200 |
| Subject | Re: [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]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-10-05 15:10 +0200 |
| Subject | Re: [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]
| From | Mark Brown <broonie@kernel.org> |
|---|---|
| Date | 2015-10-05 16:30 +0200 |
| Subject | Re: [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