Thread (154 messages) 154 messages, 15 authors, 2015-06-24

Re: [PATCH v4 04/10] eeprom: Add a simple EEPROM framework for eeprom consumers

From: Sascha Hauer <s.hauer@pengutronix.de>
Date: 2015-05-08 05:23:39
Also in: linux-api, linux-arm-kernel, linux-arm-msm, lkml

On Tue, May 05, 2015 at 12:46:32PM +0100, Srinivas Kandagatla wrote:
Hi Stephen,

Sorry I took so long to reply.


On 09/04/15 15:45, Stephen Boyd wrote:
quoted
On 04/07, Srinivas Kandagatla wrote:
quoted
On 07/04/15 19:45, Stephen Boyd wrote:
quoted
On 03/30, Srinivas Kandagatla wrote:

Do you have an overview of how to use these APIs? Maybe some
Documentation/ is in order? I'm mostly interested in how the
blocks array is supposed to work and how this hooks up to drivers
that are using DT.
Only doc ATM is function level kernel doc in c file.
May be I can explain you for now and I will try to add some
documentation with some usage examples in next version.
Thanks.
quoted
eeprom block array is just another way intended to get hold of
eeprom content for non-DT providers/consumers, but DT
consumers/providers can also use it. As of today SOC/mach level code
could use it as well.

In eeprom_cell_get() case the lookup of provider is done based on
provider name, this provider name is generally supplied by all the
providers (both DT/non DT).

for example in qfprom case,
provider is registered from DT with eeprom config containing a unique name:
static struct eeprom_config econfig = {
.name = "qfprom",
.id = 0,
};

In the consumer case, the tsens driver could do some like in non DT way:

struct eeprom_block blocks[4] ={
	{
	.offset = 0x404,
	.count = 0x4,
	},
	{
	.offset = 0x408,
	.count = 0x4,
	},
	{
	.offset = 0x40c,
	.count = 0x4,
	},
	{
	.offset = 0x410,
	.count = 0x4,
	},
};
calib_cell = eeprom_cell_get("qfprom0", blocks, 4);


Or in DT way
calib_cell  = of_eeprom_cell_get(np, "calib");
Ok. I guess I was hoping for a more device centric approach like
we have for clks/regulators/etc. That way a driver doesn't need
to know it's using DT or not to figure out which API to call.
That would be the best. Its easy to wrap up whats in eeprom core to
eeprom_get_cell(dev, "cell-name") for both DT and non-dt cases, if I
remove the nasty global name space thing.

Only thing which is limiting it is the existing bindings which are
just phandle based. For eeprom to be more of device centric we need
more
generic bindings/property names like

nvrom-cell = <&abc>, <&edf>
nvrom-cell-names = "cell1", "cell2";

Also we can have name associated to each eeprom cell which would
help for non-dt cases. So they can just lookup by the cell name.


Sacha, Are you ok with such binding?  As this can provide a single
interface for dt and non-dt. I remember you requested for changing
from generic properties to specific property names.
Yes, I am fine with such a binding. The same type of binding is used for
clocks and other stuff already, so it has proven good and people are
famliar with it.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help