Re: [Gta04-owner] [PATCH 0/4] UART slave device support - version 4

2015-08-28 Thread Dr. H. Nikolaus Schaller
Hi Pavel,

Am 28.08.2015 um 09:02 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 we (the developers of the hardware) have proposed an alternative
 approach to Neil’s implementation - for the same device and solving
 the same problem (notifying tty open/close and uart activity to the
 slave device driver), but differently.
 
 See:
 https://lkml.org/lkml/2015/6/28/91
 
 Discussion has not yet settled on which approach is better. So your
 opinion of comparing both is welcome.
 
 Actually, yes, discussion has settled, agreeing that phandle reference
 for the uart is a bad idea, Nikolaus just refuses to listen to anyone,

no, I only refuse to listen to you.

You are neither maintainer for any subsystem that is involved nor have
you contributed technical arguments pro/con and it appears to me that
you refuse to listen to my argumentation.

 asking device tree maintainer opinion, and then just simply ignoring
 it when he does not like it, and then making promises he did not keep.


Which promises did I not keep? Please be specific, instead of insulting.

I bring up this alternative again, since I get the impression that most readers
are simply not aware of *both* alternative proposals.

 Please don't stall patches just because of that.

Please provide better arguments and don’t spread FUD.

Please have a look into our RFC implementation and study it carefully
to learn why it is the better (IMHO more flexible, easier to maintain, more
modular) approach. Even if you don’t like phandles.

 
 Best regards,
   Pavel
 -- 
 (english) http://www.livejournal.com/~pavelmachek
 (cesky, pictures) 
 http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html


BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 0/4] UART slave device support - version 4

2015-08-27 Thread Dr. H. Nikolaus Schaller
Hi Linus,

Am 12.08.2015 um 01:20 schrieb NeilBrown n...@brown.name:

 On Fri, 7 Aug 2015 15:01:47 +0200 Linus Walleij
 linus.wall...@linaro.org wrote:
 
 Hi Neil,
 
 first, this is a *VERY* interesting and much needed patch series,
 I intend to look closer at it, and if possible test it with some
 (heh) board file device. Would be happy of you put me on CC for these.
 
 On Mon, May 11, 2015 at 3:56 AM, NeilBrown n...@brown.name wrote:
 
 When a device is connected to a UART via RS-232 (or similar), there
 is a DTR line that can be used for power management, and other modem
 control lines.
 
 On an embedded board, it is very likely that there is no DTR, and
 any power management need to be done using some completely separate
 mechanism.
 
 So these slaves are really just for devices permanently attached to
 UARTs without a full RS-232 (or similar) connection.  The driver
 does all the extra control beyond Tx/Rx.
 
 What is usually happening (and I have seen it in a few places) is that
 the SoC has *one* fully featured RS232 with CTS/RTS and even
 DTS,DCD,RI and other esoterica, which is intended to be connected to a
 host serial port or so, for example if this SoC is to act as a modem
 or a fax machine, or if it is to drive one.
 
 Then they often have a few more UART blocks, usually identical, which
 only have RxD+TxD available, so they are just UARTs.
 
 To complicate things further, you may wonder what happened with
 the CTS/RTS (etc) signals from the other blocks. Usually they are there
 in the silicon but just routed to dead ends.
 
 To complicate it even further, usually all these pins are placed under
 pin control multiplexing, so in an actual electronic design, the
 system will mux out CTS/RTS (etc) from the fully featured RS232
 blocks and only use them as UARTs anyways.
 
 Then there are those who created real simple RxD/TxD-only UARTs
 (yeah lets dump this RS232 legacy crap / yeah yeah)
 and then realized they want to drive modems (oh crap, it seemed
 like a good idea at the time). Then they usually take
 two GPIO pins for CTS/RTS and drive them as GPIOs using
 software and you have a cheap 4-line modem line. This is what
 drivers/tty/serial/serial_mctrl_gpio.c is for if you wondered.
 
 I've tested this set and it seems to work ... except that something
 is sadly broken with bluetooth support in 4.1-rc1 so I've only really
 tested the GPS driver.  I guess it is time to rebase to -rc3.
 
 You have a hardware taget I see. Which one?
 
 GTA04 (www.gta04.org - openmoko successor).
 
 3 uarts on OMAP3 are wired: one as RS-232 for console, one to bluetooth
 half of a wifi/bluetooth module, and one to a GPS.
 
 For the GPS, I just want to power on/off when the TTY is opened/closed,
 but the power-on sequence is non-trivial as both turn on and
 turn-off' toggle the same line, so I need to be able to detect current
 state.
 
 For the bluetooth, the power is a (shared) regulator.  As well as
 power-on when the TTY is opened, I'd like regulator to be turned of
 when I hciconfig down - even though the TTY is still open.
 I did a patch a while ago which hooked in to hci_uart_{open,close} to
 make this work, but it isn't a really good patch.
 
 It would be nice to hide the TTY from user-space in the bluetooth case,
 and have the hciattach happen in the kernel, but I think hciattach
 does extra initialisation...
 
 NeilBrown


we (the developers of the hardware) have proposed an alternative
approach to Neil’s implementation - for the same device and solving
the same problem (notifying tty open/close and uart activity to the
slave device driver), but differently.

See:
https://lkml.org/lkml/2015/6/28/91

Discussion has not yet settled on which approach is better. So your
opinion of comparing both is welcome.

BR,
Nikolaus


--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH RFC 0/3] UART slave device support

2015-06-03 Thread Dr. H. Nikolaus Schaller
Hi all,
this patch series is our proposal to add hooks so that the driver for a device 
connected to an UART can
monitor modem control lines and data activity of the connected chip.

It contains an example for such a device driver which needs such sophisticated 
power control: wi2wi,w2sg0004

A remote device connected to a RS232 interface is usually power controlled by 
the DTR line.
The DTR line is managed automatically by the UART driver for open() and close() 
syscalls
and on demand by tcsetattr().

With embedded devices, the serial peripheral might be directly and always 
connected to the UART
and there might be no physical DTR line involved. Power control (on/off) has to 
be done by some
chip specific device driver (which we call UART slave) through some 
mechanisms (I2C, GPIOs etc.)
not related to the serial interface. Some devices do not tell their power state 
except by sending
or not sending data to the UART. In such a case the device driver must be able 
to monitor data
activity. The role of the device driver is to encapsulate such power control in 
a single place.

This patch series allows to support such UART slave drivers by providing:
* a mechanism that a slave driver can identify the UART instance it is 
connected to
* a mechanism that UART slave drivers can register to be notified
* notfications for DTR (and other modem control) state changes
* notifications that the device has sent some data to the UART

A slave device tree entry simply adds a phandle reference to the UART it is 
connected to, e.g.

gps {
compatible = wi2wi,w2sg0004;
uart = uart1;
};

The slave driver calls devm_serial_get_uart_by_phandle() to identify the uart 
driver.
devm_serial_get_uart_by_phandle() follows the concept of 
devm_usb_get_phy_by_phandle().

A slave device driver registers itself with serial_register_slave() to receive 
notifications.
Notification handlers can be registered by serial_register_mctrl_notification() 
and
serial_register_rx_notification(). If an UART has a NULL slave or a NULL 
handler registered,
no notifications are sent.

RX notification handlers can define a ktermios setup and modify or decide to 
throw away the
character that is passed upwards.

This all is a follow-up to the w2sg0004 driver submitted in 2014 that did want 
to add an optional
GPIO to DTR in omap-serial.c and required the w2sg0004 driver to present itself 
as a virtual
GPIO. The idea of a virtual GPIO  is not compatible with the concept that DT 
must
describe hardware (and not virtual hardware). So in this new solution DT only 
describes that
the w2sg0004 is connected to some UART and how the power state signalling works 
is left
to the driver implementations.

The rx data notification also removes the concept of having two different 
pinmux states
and make the w2sg0004 driver intercept rx activities by switching the rx line 
to a GPIO
interrupt. This was very OMAP3 specific. The new solution is generic and might 
even be
extensible that the chip driver could filter or consume the rx data before it 
is passed
to the tty layer.

This patch works on linux-next as intended except one major weakness: we have 
to call 
uart_change_speed() each time we open the tty. This is the opposite of what we 
would like
to have: that the slave initializes the uart speed through some termios and the 
tty level just uses
this setting. We have not yet completely understood how to make this work and 
are happy
about help in this area.

And of course we would like to see general comments about the whole 
implementation
approach.


Signed-off-by: H. Nikolaus Schaller h...@goldelico.com


--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 0/3] tty slave device support - version 3.

2015-05-06 Thread Dr. H. Nikolaus Schaller
Hi Pavel,

Am 06.05.2015 um 11:27 schrieb Pavel Machek pa...@ucw.cz:

 On Wed 2015-05-06 07:19:31, Dr. H. Nikolaus Schaller wrote:
 Hi Peter,
 
 Am 05.05.2015 um 21:54 schrieb Peter Hurley pe...@hurleysoftware.com:
 
 Hi Neil,
 
 On 03/18/2015 01:58 AM, NeilBrown wrote:
 here is version 3 of support for tty-slaves.
 
 Is there a v4 of this that I missed?
 
 We did have a lengthy discussion about [PATCH 3/3] how to best (1)
 represent the slave device in the device tree but as far as I am concerned,
 I do not see that we have a consensus (2) and the device tree maintainers
 have no comments or clear guidelines so far.
 
 Yes. Everyone and their dog disagrees

What a wonderful argument…
I still ask myself who the dog is.

 with Nikolaus, who is playing
 devil's advocate

I hope you don't think that Linux users are devils…

No, I am not playing devil’s advocate (which would imply that I am doing this
for fun to tease the dog), but I feel I have to be the advocate of future board
designers who want to easily import an existing board DT and overwrite device
tree nodes to describe design changes, i.e. what slave device is connected to
which uart.

At least in this regard, the alternatives are really differently easy to handle.

And, the alternatives have some influence how a tty driver and a slave device
driver is designed. So that is for me the root question, before discussing 
(some)
implementation details.

Because it is not resolved in a way that convinces me (and future board DT
designers), I bring it up again and again. Even if you and some dog apparently
disagree.

 here, so we clearly have to get confirmation from
 device tree maintainers. And when they disagree with him, we'll need
 to get concensus from Linus, too...
   Pavel

BR,
Nikolaus--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-04-29 Thread Dr. H. Nikolaus Schaller
Hi Pavel,

Am 27.04.2015 um 22:35 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 In my opinion making something a node in / is always the
 last resort and in my perspective it has been handled in such a way
 so far.
 
 But that contradicts some documents I have found and linked. Please
 show me a document about DT that supports your view.
 
 I agree that both views can be valid, but in lack of some ?official? 
 guideline
 we can?t decide ourselves.
 
 This is not how kernel development works.
 
 We can decide ourselves, and DT people will swear at us if we decide wrongly,
 and then Linus swears at them if they do too obvious mistakes.
 
 Lets KISS.

some time ago you also wrote in this thread:

 Device tree is not operating system specific. 

In other words: this is a discussion about compatibility with the world outside 
of Linux.
And compatibility can not be achieved by decisions about Linux implementation 
details,
even if Linus is deciding. He can just decide to stay incompatible (but then it 
should
IMHO be a general decision and not case specific).

So I think we should follow some basic design principles, if they exist (which 
I don’t know),
to have this compatibility. And then adapt the Linux implementation (using the 
KISS principle).

Anyways I have not yet seen any comment from the DT people or did I miss them?

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-04-04 Thread Dr. H. Nikolaus Schaller
Hi Pavel,

Am 04.04.2015 um 10:16 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 Please propose your own code doing that so that we can test if it is
 better.
 
 So, how does this look?
 
 It looks to me like you have cca 0.1 Ohm resistance in your system,
 
 This is completely unknown.
 
 and are using cca 75mA while discharging, and charge by cca 1.4A.
 
 Where do you get these figures from?
 
 Least squares fitting of my coefficients to your tables.

Ah, I see.

 
 A GTA04 board discharges usually between 50 and 400 mA (depending on 
 activities)
 and if you turn on WiFi, it will be up to 600 mA. If you use 3G it can draw 
 even more
 during operation.
 
 How big battery do you have?

1200 mAh

 According to least squares fitting,
 assuming maximum charge of .46A, you were taking about 25mA when
 doing the discharge test.

No, that can’t fit well. But I do not remember who has done this calibration in 
which situation
because it was done many months ago for the platform data version. We have just 
reformatted
the table for the DT.

 
 Total current going in is 500-800 mA (depending on USB negotiations) and 
 this is
 split into system operation and charging current. So 1.4A charging current 
 is not
 possible. Rather 200-500 mA.
 
 So it might be that the battery is discharged although the system is 
 connected
 to a charger.
 
 Yah, and your battery meter will be wrong in such case, as will be
 mine, because they are based on same information.

Well, it is not “mine”, it is the platform_data based driver already in 
kernel.org
since ca. 3.12.

We have just updated it to DT to get rid of platform_data in this area as well…

Yes, I see your argument that hiding the tables (two characteristic curves)
into an analytic approximation can be superior. 

The problem I see is just that your formula needs some parameters which
are difficult to derive or estimate. And must be adjusted to the specific
battery and system setup in a non-trivial way.

At least we must supply a tool (in the kernel/scripts directory?) where someone
can can estimate the parameters of the formula from the characteristic curves.

Maybe a tool that automatically runs several charge/discharge cycles at
different system load. And measures time vs. voltage. And assumes a linear
capacity decrease between the end points. (i.e. if it needs 10 hours to charge
from completely empty to full, we can assume 50% after 5,0 hours).

So my goal is to measure all characteristics of the battery - and no need to
study a (potentially non-existing) data sheet.

If you can provide that for all parameters of your algorithm I am fine with it.

 The thing is, mine
 can be improved without adding more tables. 

How can you improve your algorithm without tweaking or adding new parameters?

 
 It is tricky to do a good job near 0%... or anywhere else. See for
 example
 
 http://cseweb.ucsd.edu/~trosing/lectures/battery.pdf
 
 You start a call, percentage goes down, end a call, it will go
 back up. I'm pretty sure you will not be able to make a call with 5%
 indication from your code at low battery temperature (say -10C).
 
 The whole system is heating up a little, so that you never have -10C for the
 battery.
 
 Umm. When not calling, your phone should not heat itself up.

Yes, in suspend it needs 20 mA which does not heat or course.
But steady operation at 20-400 mA does significantly rise OMAP
temperature beyond environment temperature.

 And you
 definitely can power it down, leave it in outer pocket, then power it
 up. It is actually something people do when they want to preserve battery...
 
 I think you are trying to solve situations that don’t exist in practice.
 
 And AFAIK, the GTA04 board is the only user of this driver in case the 
 battery
 has no built-in fuel gauge. So why improve it beyond what the GTA04
 users need?
 
 Because then other users can share the same code, and because you

But you have ugly parameters in dts that nobody can easily see in the schematics
and that are full of assumptions.

From a perspective of uncertainty analysis, estimation of the internal 
parameters
needs a higher precision than the calibration points.

 avoid big ugly tables in dts.

Well, the biggest tables I have seen in dts are keyboard matrix codes…

 
 I repeat myself: this driver is not built for highest precision because 
 there are
 better methods (fuel gauge chip). These might not be available so this 
 fall-back
 driver has been built.
 
 It is definitively better than no driver and worse than the optimum.
 
 And my email suggested solution better than your driver, so why not
 just use it?

I am not yet convinced that it is better.

It just moves the (unavoidable) limitations (measuring multiple calibration 
points)
just to a different area (measuring the hidden and not precisely known parameter
of the system).

 
 
 #perc = percent(volt)
 compute(charging, 1)
 compute(discharging, 0)
 
 Please explain what you calculate here. Especially what “Badness” is?
 
 

Re: [PATCH v4 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-04-01 Thread Dr. H. Nikolaus Schaller
Hi Pavel,

Am 31.03.2015 um 09:26 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 + io-channels = twl_madc 1,
 +   twl_madc 10,
 +   twl_madc 12;
 + io-channel-names = temp,
 +ichg,
 +vbat;
 + };
 
 Rather than just making platform_data into device tree properties..
 
 Can't you hide the these custom properties behind the compatible flag?
 
 You can initialize that data in the driver based on the compatible
 flag and the match data.
 
 This makes sense if you can group things to similar configurations.
 
 Maybe I have not completely understood your proposal.
 
 Do you mean to go back to have big parameter tables for each device/battery
 combination in the driver code and the compatible flag (e.g. compatible = 
 “board17”)
 chooses the right data set for the charging map and channels?
 
 If you can somehow group them, then yes. Not for every board if there
 are many of them naturally.
 
 I thought this is what the DT was introduced for - to have the same driver 
 code but adapt to different boards depending on hardware variations.
 
 Yeah but you also need to consider the issues related to introducing
 new device tree properties. The device tree properties introduced
 should be generic where possible.
 
 And batteries have very different characteristics and vary between devices…
 
 Right. Maybe that has been already agreed on to use capacity-uah for
 batteries in general? In that case I have not problem with that as
 it's a generic property :)
 
 The charging maps are depending on the battery type connected to the twl4030
 and which madc channel is which value is also a little hardware dependent
 (although the twl4030 doesn’t give much choice).
 
 Just to consider alternatives before introducing driver specific
 property for the maps.. Maybe here you could have few different type
 of maps and select something safe by default? Of course it could be this
 is higly board specific, I think some devices may be able to run below
 3.3V for example..
 
 As I explained in some other mail, those tables should not be
 neccessary at all. They can be computed from li-ion characteristics
 and internal resistance, and assumed current during charge and
 discharge.

I already explained that we do not know the charging and discharging
current well enough for such a calculation.

And I explained that the “internal resistance” is a system (battery + cables +
connectors + other circuits) parameter that is not easy to derive or measure
and type into the .dts source code.

At least I have no idea how I should find it out for my boards. While I can
easily determine the curves (and we already have them for the platform_data
driver).

Please propose your own code doing that so that we can test if it is
better.

 
 Running below 3.3V.. not really. At that point, the battery is really
 _empty_, and voltage is going down really really fast.

It is the diffference between 2% and 0% where a fuel indication might
be most important…

 
 Plus, you are damaging the battery at that point.

The power controller will shut down - but the driver should report
reasonable (but IMHO not necessarily perfect) values until the last
moment.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-04-01 Thread Dr. H. Nikolaus Schaller
Hi,

Am 01.04.2015 um 18:30 schrieb Rob Herring robherri...@gmail.com:

 On Tue, Mar 10, 2015 at 4:27 PM, Marek Belisko ma...@goldelico.com wrote:
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../bindings/power_supply/twl4030_madc_battery.txt | 43 
 ++
 1 file changed, 43 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 
 diff --git 
 a/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 new file mode 100644
 index 000..d3dd9d8
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 @@ -0,0 +1,43 @@
 +twl4030_madc_battery
 +
 +Required properties:
 + - compatible : ti,twl4030-madc-battery
 
 Is this a sub-node of the twl4030 or something? Please define where
 this fits (hint: I would expect to be a sub node of a charging
 controller or battery monitor).

It is a driver connecting some battery parameters with measurements provided
by the twl4030-madc to present a /sys/class/power_supply node for the battery
with a coarse estimate for the charging level.

So maybe the best wording is that it is a battery-driver assuming a twl4030-madc
providing raw measurements (voltage, charging).

Therefore it could as well be battery-twl4030-madc.

 
 + - capacity-uah : battery capacity in uAh
 + - ti,volt-to-capacity-charging-map : list of voltage(mV):level(%) values
 +   for charging calibration (see example)
 + - ti,volt-to-capacity-discharging-map : list of voltage(mV):level(%) values
 +   for discharging calibration (see example)
 
 These seem like properties of the battery independent of the
 battery/charging controller which is the twl4030. Ideally we would
 define battery nodes generically and independent of the charge
 controllers. Then there are smart batteries to consider too.

For smart batteries there are completely independent mechanisms
like I2C and HDQ/1-wire communication with fuel gauge chips (e.g. b27xxx).

Those do not need such battery properties because they are stored
in EEPROMs within these chips.

So all this is a quite special solution just for those handful of board that
have no smart battery and use exactly this twl4030 chip.

It is not intended to become a generic charging/fuel solution. Just
make it work with DT (it worked with platform_data since ~3.12).

BR,
Nikolaus



 
 Rob
 
 + - io-channels: Should contain IIO channel specifiers
 +   for each element in io-channel-names.
 +- io-channel-names: Should contain the following values:
 + * temp - The ADC channel for temperature reading
 + * ichg - The ADC channel for battery charging status
 + * vbat - The ADC channel to measure the battery voltage
 +
 +Example:
 +   madc-battery {
 +   compatible = ti,twl4030-madc-battery;
 +   capacity-uah = 120;
 +   ti,volt-to-capacity-charging-map = 4200 100,
 +   4100 75,
 +   4000 55,
 +   3900 25,
 +   3800 5,
 +   3700 2,
 +   3600 1,
 +   3300 0;
 +
 +   ti,volt-to-capacity-discharging-map = 4200 100
 +  4100 95,
 +  4000 70,
 +  3800 50,
 +  3700 10,
 +  3600 5,
 +  3300 0;
 +   io-channels = twl_madc 1,
 + twl_madc 10,
 + twl_madc 12;
 +   io-channel-names = temp,
 +  ichg,
 +  vbat;
 +   };
 --
 1.9.1
 

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-04-01 Thread Dr. H. Nikolaus Schaller
Hi,

Am 01.04.2015 um 22:16 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 As I explained in some other mail, those tables should not be
 neccessary at all. They can be computed from li-ion characteristics
 and internal resistance, and assumed current during charge and
 discharge.
 
 I already explained that we do not know the charging and discharging
 current well enough for such a calculation.
 
 And I explained that the “internal resistance” is a system (battery + cables 
 +
 connectors + other circuits) parameter that is not easy to derive or measure
 and type into the .dts source code.
 
 At least I have no idea how I should find it out for my boards. While I can
 easily determine the curves (and we already have them for the platform_data
 driver).
 
 Please propose your own code doing that so that we can test if it is
 better.
 
 So, how does this look?
 
 It looks to me like you have cca 0.1 Ohm resistance in your system,

This is completely unknown.

 and are using cca 75mA while discharging, and charge by cca 1.4A.

Where do you get these figures from?

A GTA04 board discharges usually between 50 and 400 mA (depending on activities)
and if you turn on WiFi, it will be up to 600 mA. If you use 3G it can draw 
even more
during operation.

Total current going in is 500-800 mA (depending on USB negotiations) and this is
split into system operation and charging current. So 1.4A charging current is 
not
possible. Rather 200-500 mA.

So it might be that the battery is discharged although the system is connected
to a charger.

 (And
 these are all the coefficients the code should need; rest is battery
 characteristics -- common to all li-ions, and charger characteristics
 -- that will be common to all cellphones. If current can be measured,
 this code should go more precise answers).
 
 pavel@amd:~/g/tui/ofone$ ./liion_maps
 Charging
 Voltage  4.2 V ; table  100 %  internal voltage 4.18 V current 0.233 A 
 computed  97 %
 Voltage  4.1 V ; table  75 %  internal voltage 4.08 V current 0.233 A 
 computed  87 %
 Voltage  4.0 V ; table  55 %  internal voltage 3.93 V current 0.700 A 
 computed  69 %
 Voltage  3.9 V ; table  25 %  internal voltage 3.76 V current 1.400 A 
 computed  26 %
 Voltage  3.8 V ; table  5 %  internal voltage 3.66 V current 1.400 A computed 
  3 %
 Voltage  3.7 V ; table  2 %  internal voltage 3.56 V current 1.400 A computed 
  2 %
 Voltage  3.6 V ; table  1 %  internal voltage 3.46 V current 1.400 A computed 
  1 %
 Voltage  3.3 V ; table  0 %  internal voltage 3.16 V current 1.400 A computed 
  -1 %
 Badness  395.4861761427434
 Discharging
 Voltage  4.2 V ; table  100 %  internal voltage 4.21 V current -0.075 A 
 computed  100 %
 Voltage  4.1 V ; table  95 %  internal voltage 4.11 V current -0.075 A 
 computed  91 %
 Voltage  4.0 V ; table  70 %  internal voltage 4.01 V current -0.075 A 
 computed  79 %
 Voltage  3.8 V ; table  50 %  internal voltage 3.81 V current -0.075 A 
 computed  46 %
 Voltage  3.7 V ; table  10 %  internal voltage 3.71 V current -0.075 A 
 computed  3 %
 Voltage  3.6 V ; table  5 %  internal voltage 3.61 V current -0.075 A 
 computed  2 %
 Voltage  3.3 V ; table  0 %  internal voltage 3.31 V current -0.075 A 
 computed  0 %
 Badness  171.69576218433212
 
 Running below 3.3V.. not really. At that point, the battery is really
 _empty_, and voltage is going down really really fast.
 
 It is the diffference between 2% and 0% where a fuel indication might
 be most important…
 
 Plus, you are damaging the battery at that point.
 
 The power controller will shut down - but the driver should report
 reasonable (but IMHO not necessarily perfect) values until the last
 moment.
 
 It is tricky to do a good job near 0%... or anywhere else. See for
 example
 
 http://cseweb.ucsd.edu/~trosing/lectures/battery.pdf
 
 You start a call, percentage goes down, end a call, it will go
 back up. I'm pretty sure you will not be able to make a call with 5%
 indication from your code at low battery temperature (say -10C).

The whole system is heating up a little, so that you never have -10C for the
battery.

I think you are trying to solve situations that don’t exist in practice.

And AFAIK, the GTA04 board is the only user of this driver in case the battery
has no built-in fuel gauge. So why improve it beyond what the GTA04 users need?

I repeat myself: this driver is not built for highest precision because there 
are
better methods (fuel gauge chip). These might not be available so this fall-back
driver has been built.

It is definitively better than no driver and worse than the optimum.

 
 Anyway, see above, I think I provide reasonable values even in that range.
 
 Signed-off-by: Pavel Machek pa...@ucw.cz
   Pavel
 
 #!/usr/bin/python3
 import math
 
 def percent_internal(v):
u = 0.0387-(1.4523*(3.7835-v))
if u  0:
# Formula above does gives 19.66% for 3.756, and refuses to
# work below that. 

Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-27 Thread Dr. H. Nikolaus Schaller
Hi,

Am 26.03.2015 um 19:08 schrieb Sebastian Reichel s...@kernel.org:

 Hi,
 
 On Wed, Mar 25, 2015 at 05:44:42PM +0100, Dr. H. Nikolaus Schaller wrote:
 Am 25.03.2015 um 16:21 schrieb Sebastian Reichel s...@kernel.org:
 On Wed, Mar 25, 2015 at 08:59:14AM +0100, Dr. H. Nikolaus Schaller wrote:
 Am 25.03.2015 um 02:45 schrieb Sebastian Reichel s...@kernel.org:
 On Tue, Mar 24, 2015 at 06:58:15PM +0100, Dr. H. Nikolaus Schaller wrote:
 So you propose that the parent-child relationship is “control”? I.e. 
 some
 channel which allows to address some bus client (through reg) and
 control that devices.
 
 Makes sense. This is how i2c and spi clients are specified.
 
 In the case of our GPS, it receives control over the serial connection 
 from
 the UART,
 
 Ahem - does it?
 
 AFAIK the chip simply starts to emit NMEA records if powered on.
 There is no command going over the serial interface to address it
 or control it.
 
 Right, since GPS basically doesn't need any configuration/control.
 That’s not true for other UART attached devices, though.
 
 Do you have an example? Usually an UART data stream is transparently
 presented to a /dev/tty - and user-space daemon can configure/control the
 attached device. In most cases it can mix payload data and control command
 by some AT command and escape sequences.
 
 Yes, but the configuration is minimal. Anyways as you said there
 *is* some kind of control happening over the UART.
 
 Control is happening on a higher network stack level than UART. It
 control is done through AT commands.
 
 Yes, obviously UART is only the physical layer. The same is true for
 busses and does not really matter.

Fine that we agree on that. I just mentioned it because we discussed about line
disciplines and tty which are higher level.

 
 also receives control via a GPIO to the on/off pin, and also needs
 a regulator to power the antenna.
 
 So should the parent be the uart, the on/off GPIO, or the regulator?
 
 I would much rather there wasn't a parent, and that each of these were 
 listed
 as ad-hoc attribute assignments.  But device-tree says there must be a 
 parent
 (where possible), and the parent is the thing that is “primarily in 
 control.
 
 Well, IMHO the “parent” could also be the root. Representing the
 whole board.
 
 Nevertheless, I doubt your rule that “ability to control” defines
 the parentchild relation (see below).
 
 
 I think the GPS is “primarily a uart-attached device.
 
 But not in the same way as an I2C device.
 
 Especially the serial interface is not a bus and not used for
 signalling and power control. It is payload data (only).
 
 Actually many I2C devices are also powered on/off via a GPIO and
 even use additional GPIOs for sending interrupts. Nevertheless they
 are normally identified as an I2C device.
 
 Because I2C is a bus that can address multiple clients and gpio isn’t
 a bus and a point-to-point connection.
 
 But IMHO it is not because they (can) send payload data over i2c.
 
 From my POV it's not because I2C is a bus, but because the primary
 function is happening via I2C (e.g. configuring sensor, gettings its
 data). The GPIOs are only needed to compensate some I2C shortcomings
 (missing irq feature in I2C) or reduce the complexity of the client
 (power GPIO). The actual system interaction with the I2C chip is
 going via I2C, though.
 
 Yes, but this is in my new understanding irrelevant for proper DT
 description.
 
 And for my understanding it is. We are arguing in a circle…

Yes, and that is the reason why I try to go to a higher level of discussion. 
I.e.
find out the principles behind. If we can agree on those, it becomes easy
to decide the details.

 
 If you assume that parentchild relationship is about control (only). 
 But if it
 is about data flow, there is a different concept in DT. For example the 
 CSI/DSI
 (OMAP DSS) use the “port” concept.
 
 Yes, this is about data not going to the cpu / system memory.
 
 Really? The frame buffer data is in system memory and gets to the panel. 
 Or a
 camera image ends up in system memory.
 
 Really? So the panel accesses the system memory? Check again. The
 panel is simply connected via DSI/SDI/... and does not access the
 system memory at all. The display controller OTH does. So let's have
 a look at the DT structure (simplified):
 
 ocp - dss - { port = panel; }
 ... - spi - panel { port = dss; }
 
 So the port models a device-to-device connection, which works
 independent of the remaining system. No system memory is involved.
 
 Sorry, but I can’t exactly follow what you want to show.
 
 Yes, the port mechanism describes a device to device connection.
 
 But it does not describe system memory. Although it is the source of
 the video (i.e. the framebuffer).
 
 This shows that the DT does not necessarily describe data flow.
 
 So why do you want to describe data flow from tty to uart to some
 connected device?
 
 It shows, that the tree models system memory flow and adds
 references for stuff

Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-27 Thread Dr. H. Nikolaus Schaller

Am 27.03.2015 um 17:31 schrieb Sebastian Reichel s...@kernel.org:

 Hi,
 
 On Fri, Mar 27, 2015 at 10:22:11AM +0100, Dr. H. Nikolaus Schaller wrote:
 Coming back at my sentence: I asked about a non-trivial, non-bus
 connected HW, which has a DT binding.
 
 from omap3-beagle-xm.dts:
 hsusb2_phy (connected through ULPI)
 gpio-keys (it is not a trivial on/off)
 tfp410 (DVI encoder only part of the video pipeline)
 
 These just need a couple of gpios. For me that's trivial compared to
 an interface as complex as UART. Since they do not have any complex
 interface they could be a child of, they must land in /.

ULPI-PHY is not at all “just a couple of GPIOs”. It is a 60 MHz 8 bit wide
parallel protocol with handshake… Sort of 8 UARTs or SPI with common clock.

But still no bus. The bus driven by the ULPI-PHY is “USB2” which is known
not to be a physical bus but a tree. It just becomes a bus by higher level
protocols.

I must admit that I lost the goal that you want to demonstrate with this
question/examples.

 
 sound/codec (connected through McBSPs)
 
 The audio codec is a child device of the TWL. The node you are
 talking about is a ***virtual*** device.

Ah interesting that they exist! A virtual gpio was not acceptable…

 See also
 
 http://devicetree.org/SoC_Audio
 
 Note that the audio binding of many devices is not that clean,
 since quite some relationships are hidden away behind kernel quirks
 and very specific compatible strings.
 
 and there are components on the board which are not described at
 all but work out of the box: audio connectors, usb/ethernet hub
 
 Sure. Everything that can be identified automatically (USB/Ethernet
 stuff) is not encoded into DT. DT has been created to provide a
 description for devices, which can *not* be identified automatically.

Exactly.

 
 And passive components like audio connectors are normally not
 encoded into DT, since no configuration is needed and no information
 is gained. Before you argument with video connectors: Yes they are
 different, but IMHO for good reasons:
 
 1. The user can see DVI label for DVI output and HDMI label
   for HDMI output. This is not known by the display controller.
 2. The display data channel is i2c and the connector may use a
   system i2c controller together with the data wires provided by
   the display controller. The display subsystem must know which
   i2c controller takes care of the port.

Yes. Indeed.

 
 In the meantime, I have proposed an IMHO even better approach.
 
 It is not to make the gps a regulator or a subnode of some “primary 
 interface”,
 but give it a reference to the uart it is connected to.
 
 And make it an independent node on DT root level.
 
 Then we are completely independent on how the gps driver presents
 data to any user space on any OS.
 
 IMHO that approach is not better per se. The child variant is more
 generic it contains information without the kernel even knowing
 about uart specific stuff.
 
 Note, that we could always use references in DT. The tree structure
 is not needed at all, since references make it possible to describe
 a graph.

Right.

 Obviously that would defeat the purpose of the tree
 structure.

Which might be there for completeness if something wants to be
better described in a tree structure. Multiple clients of a single bus 
controller
that can be selected (addressed) are obviously better described by
a parentchild relationship (which includes some sort of “address”
to describe how this addressing works).

 In my opinion making something a node in / is always the
 last resort and in my perspective it has been handled in such a way
 so far.

But that contradicts some documents I have found and linked. Please
show me a document about DT that supports your view.

I agree that both views can be valid, but in lack of some “official” guideline
we can’t decide ourselves.

 
 What is bad with having a net? Why must we squeeze everything into
 a tree structure just because it is called such? DT language
 provides the syntax for references and that allows to make nets.
 And it is heavily used.
 
 I think so far references were mainly used when tree structure was
 too limited to describe something.
 
 You said NAK about referencing a regulator from the UART node and
 now?
 
 No. I said NAK about referencing *the* regulator from the BT/GPS
 node. My NAK was about referencing a regulator in the UART node
 (local side), which is actually needed by the GPS/BT module (remote
 side).
 
 Ah, now I understand your argument, and agree to it.
 
 My comment was on a slightly different topic that the DTR line from the
 UART (node) can be used to signal the remote regulator to be turned on.
 
 But I learned yesterday that we can even hide this explicit signalling
 mechanism (being regulator, gpio or whatever) by:
 
 bt {
  compatible = “vendor,btchip”;
  regulator = regulator to power the btchip;
  uart = uart1;
  gpio = gpio to enable the chip;
 };
 
 uart1

Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-26 Thread Dr. H. Nikolaus Schaller
Hi,

Am 26.03.2015 um 06:56 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 Main reason is, that I would need to go
 through the UART to “communicate with the w2sg0004.
 
 You can always communicate” through the UART. Even without DT. As long as
 the connected chip is powered up by any means (could be some 
 fixed-regulator
 or hard wired).
 
 But you don't know how to communicate through the uart.
 
 Maybe we are talking using different assumptions. As long as you have a user 
 space
 gpsd daemon that talks to the gps chip the kernel simply has to 
 transparently (except
 line disciplines) pass the data to the uart.
 
 Forget userspace, some other operating system (or future linux) may
 want to put gps handling into the kernel. (To hide differences between
 different GPSes).
 
 Because we want the phone to boot knowing I have a bluetooth or I
 have a GPS, as it would if it was connected using USB, and not having
 user figure out what commands he needs to do to enable reasonable
 hardware support (and getting it wrong, because you need to specify
 _many_ critical parameters to hciattach).
 
 Yes, this is indeed something I also would like to see for the GTA04 (and 
 other)
 devices.
 
 So the reason is that some kernel driver wants to use the tty/uart to 
 communicate
 directly with the chip. This is very similar to a gpio that some driver 
 wants to use.
 
 Thus please consider the
 
 / {
  bt {
  compatible = vendor,product“;
  uart = uart1;
  enable = gpio17 34 0;
  };
 };
 
 Would work, too, but I and everyone knows that subnode is better,
 easier solution.

“Everyone” could be wrong and ignorant.

And I thought we are not looking for the easiest solution but the right one.
Especially if we define something that is for other operating systems as well.

About easier: the one given above allows to modify the driver to present e.g. 
an iio
interface to user space (and no /dev/tty) *without changing the DT*. Because the
driver code decides which interface it presents. And not where it is a subnode 
in DT.

This is the level of abstraction DT nodes should have.


It may be that you did not read my previous argumentation completely.

In short, please see:

http://www.devicetree.org/Device_Tree_Usage#Devices

And check of there is anything that mandates useage of a subnode in this case.
I simply don’t find it.

Rather, although it is also not explicitly excluded, I read hints that it 
should *not* be
done the subnode way.

The reason is that it appears to me that the DT hierarchy is intended to 
describe
how kernel drivers can *address* different components. Nothing less and nothing 
more.

Especially there is no hint that layering in DT has anything to do with data 
flow
hierarchies or a “primary” interface as Sebastian calls it.

 
 approach.
 
 And if you want to hide uart1 from the user-space, that should be a property
 of the uart1 node (whereever it is defined).
 
 Sorry? That would be one heck of layering violation.

Which layering?

I think you still mix the software/kernel driver/data flow layers with DT 
layers.

DT can and must be independent on that.

BR,
Nikolaus


--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-25 Thread Dr. H. Nikolaus Schaller
Hi,

Am 25.03.2015 um 02:45 schrieb Sebastian Reichel s...@kernel.org:

 Hi,
 
 On Tue, Mar 24, 2015 at 06:58:15PM +0100, Dr. H. Nikolaus Schaller wrote:
 So you propose that the parent-child relationship is “control”? I.e. some
 channel which allows to address some bus client (through reg) and
 control that devices.
 
 Makes sense. This is how i2c and spi clients are specified.
 
 
 In the case of our GPS, it receives control over the serial connection from
 the UART,
 
 Ahem - does it?
 
 AFAIK the chip simply starts to emit NMEA records if powered on.
 There is no command going over the serial interface to address it
 or control it.
 
 Right, since GPS basically doesn't need any configuration/control.
 That’s not true for other UART attached devices, though.

Do you have an example? Usually an UART data stream is transparently
presented to a /dev/tty - and user-space daemon can configure/control the
attached device. In most cases it can mix payload data and control command
by some AT command and escape sequences.

 
 also receives control via a GPIO to the on/off pin, and also needs
 a regulator to power the antenna.
 
 So should the parent be the uart, the on/off GPIO, or the regulator?
 
 I would much rather there wasn't a parent, and that each of these were 
 listed
 as ad-hoc attribute assignments.  But device-tree says there must be a 
 parent
 (where possible), and the parent is the thing that is “primarily in 
 control.
 
 Well, IMHO the “parent” could also be the root. Representing the
 whole board.
 
 Nevertheless, I doubt your rule that “ability to control” defines
 the parentchild relation (see below).
 
 
 I think the GPS is “primarily a uart-attached device.
 
 But not in the same way as an I2C device.
 
 Especially the serial interface is not a bus and not used for
 signalling and power control. It is payload data (only).
 
 Actually many I2C devices are also powered on/off via a GPIO and
 even use additional GPIOs for sending interrupts. Nevertheless they
 are normally identified as an I2C device.

Because I2C is a bus that can address multiple clients and gpio isn’t
a bus and a point-to-point connection.

But IMHO it is not because they (can) send payload data over i2c.

 
 Also for non-GPS device the serial connection is used for
 controlling and configuring the device.

This assumes that “controls a device” is the criterion for making a device
a subnode. I doubt that.

 
 So I propose a device-node which describes the GPS, which is a child of the
 UART, and explicitly identifies the GPIO it uses to power on/off, the
 regulator it uses to power the antenna, and how it receives on or off
 status indications from the GPS.
 
 The more I think about that, you have given good arguments *not*
 to use the parent-child relationship for the UART interface of
 the GPS.
 
 Let me give another example. The 3G Modem has 3 (or 4) interfaces:
 1. an USB-Interface for AT signalling and payload
 2. some GPIOs for power control.
 3. a PCM interface for digital voice. 
 4. it might also have a serial interface as alternate AT command and (GPRS
low speed) payload.
 
 So which one is the most prominent or most important to make it a child of?
 
 If you use “control” you must make it a child of the USB phy and the serial 
 interface
 which requires multiple inheritance…
 
 So I am not sure at all. None is IMHO prominent and unique enough to make it
 a parentchild relation.
 
 Threrefore, I would be happy to see it as multiple children of /. For 
 example a
 MFD with subnodes.
 
 This scenario has already been seen before and can happen for
 non-UART based devices (e.g. SPI + I2C). So far the decision was to
 postpone the discussion about this kind of devices until one of them
 appears.
 
 It is arguable that the antenna should be treated as a separate device - a
 child of the GPS - which controls the regulator and also provides a 'extcon'
 which reports whether an external GPS antenna is attached, or whether the
 internal on is in use.  I haven't made the time to properly explore that
 issue yet.
 
 If you assume that parentchild relationship is about control (only). But if 
 it
 is about data flow, there is a different concept in DT. For example the 
 CSI/DSI
 (OMAP DSS) use the “port” concept.
 
 Yes, this is about data not going to the cpu / system memory.

Really? The frame buffer data is in system memory and gets to the panel. Or a
camera image ends up in system memory.

 
 This means that indeed parentchild is used for control, e.g. I2C
 or SPI to tell the panel controller to switch on.
 
 well parent  child is not about power control, but about primary
 control.

Can you clearly and precisely define what “primary” control is? I think
two people will have three opinions about that.

For example I would see the w2sg0004 on/off gpio as the primary “control”
which makes the light (NMES records) turned on.

Therefore we should make it the subnode of some gpio-controller, shouldn’t we?

 Some I2C/SPI

Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-25 Thread Dr. H. Nikolaus Schaller
Hi,

Am 25.03.2015 um 16:21 schrieb Sebastian Reichel s...@kernel.org:

 Hi,
 
 On Wed, Mar 25, 2015 at 08:59:14AM +0100, Dr. H. Nikolaus Schaller wrote:
 Am 25.03.2015 um 02:45 schrieb Sebastian Reichel s...@kernel.org:
 On Tue, Mar 24, 2015 at 06:58:15PM +0100, Dr. H. Nikolaus Schaller wrote:
 So you propose that the parent-child relationship is “control”? I.e. some
 channel which allows to address some bus client (through reg) and
 control that devices.
 
 Makes sense. This is how i2c and spi clients are specified.
 
 
 In the case of our GPS, it receives control over the serial connection 
 from
 the UART,
 
 Ahem - does it?
 
 AFAIK the chip simply starts to emit NMEA records if powered on.
 There is no command going over the serial interface to address it
 or control it.
 
 Right, since GPS basically doesn't need any configuration/control.
 That’s not true for other UART attached devices, though.
 
 Do you have an example? Usually an UART data stream is transparently
 presented to a /dev/tty - and user-space daemon can configure/control the
 attached device. In most cases it can mix payload data and control command
 by some AT command and escape sequences.
 
 Yes, but the configuration is minimal. Anyways as you said there
 *is* some kind of control happening over the UART.

Control is happening on a higher network stack level than UART. It
control is done through AT commands.

 
 also receives control via a GPIO to the on/off pin, and also needs
 a regulator to power the antenna.
 
 So should the parent be the uart, the on/off GPIO, or the regulator?
 
 I would much rather there wasn't a parent, and that each of these were 
 listed
 as ad-hoc attribute assignments.  But device-tree says there must be a 
 parent
 (where possible), and the parent is the thing that is “primarily in 
 control.
 
 Well, IMHO the “parent” could also be the root. Representing the
 whole board.
 
 Nevertheless, I doubt your rule that “ability to control” defines
 the parentchild relation (see below).
 
 
 I think the GPS is “primarily a uart-attached device.
 
 But not in the same way as an I2C device.
 
 Especially the serial interface is not a bus and not used for
 signalling and power control. It is payload data (only).
 
 Actually many I2C devices are also powered on/off via a GPIO and
 even use additional GPIOs for sending interrupts. Nevertheless they
 are normally identified as an I2C device.
 
 Because I2C is a bus that can address multiple clients and gpio isn’t
 a bus and a point-to-point connection.
 
 But IMHO it is not because they (can) send payload data over i2c.
 
 From my POV it's not because I2C is a bus, but because the primary
 function is happening via I2C (e.g. configuring sensor, gettings its
 data). The GPIOs are only needed to compensate some I2C shortcomings
 (missing irq feature in I2C) or reduce the complexity of the client
 (power GPIO). The actual system interaction with the I2C chip is
 going via I2C, though.

Yes, but this is in my new understanding irrelevant for proper DT description.

 
 Also for non-GPS device the serial connection is used for
 controlling and configuring the device.
 
 This assumes that “controls a device” is the criterion for making a device
 a subnode. I doubt that.
 
 For me the criterion always was accessing the device's
 registers/configuration/data from the system's point of view (so
 your video port does not count, since it models a connection between
 two components without system interaction).

 
 So I propose a device-node which describes the GPS, which is a child of 
 the
 UART, and explicitly identifies the GPIO it uses to power on/off, the
 regulator it uses to power the antenna, and how it receives on or off
 status indications from the GPS.
 
 The more I think about that, you have given good arguments *not*
 to use the parent-child relationship for the UART interface of
 the GPS.
 
 Let me give another example. The 3G Modem has 3 (or 4) interfaces:
 1. an USB-Interface for AT signalling and payload
 2. some GPIOs for power control.
 3. a PCM interface for digital voice. 
 4. it might also have a serial interface as alternate AT command and (GPRS
   low speed) payload.
 
 So which one is the most prominent or most important to make it a child of?
 
 If you use “control” you must make it a child of the USB phy and the 
 serial interface
 which requires multiple inheritance…
 
 So I am not sure at all. None is IMHO prominent and unique enough to make 
 it
 a parentchild relation.
 
 Threrefore, I would be happy to see it as multiple children of /. For 
 example a
 MFD with subnodes.
 
 This scenario has already been seen before and can happen for
 non-UART based devices (e.g. SPI + I2C). So far the decision was to
 postpone the discussion about this kind of devices until one of them
 appears.
 
 It is arguable that the antenna should be treated as a separate device 
 - a
 child of the GPS - which controls the regulator and also provides a 
 'extcon'
 which

Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-25 Thread Dr. H. Nikolaus Schaller
Hi,

Am 25.03.2015 um 21:42 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 In the case of our GPS, it receives control over the serial connection from
 the UART,
 
 Ahem - does it?
 
 AFAIK the chip simply starts to emit NMEA records if powered on. There is no
 command going over the serial interface to address it or control it.
 
 Well _most_ GPSes enable you to control them over the serial
 line. (Things like sampling rate, AGPS data upload, …)

Yes, I know.

But is this something the kernel is/must be aware? And
must it be represented by the DT? Or does it have to influence
the way the DT is structured?

Well, if GPS data is presented through iio, these commands must
be handled by some driver.

 
 I think the GPS is “primarily a uart-attached device.
 
 But not in the same way as an I2C device.
 
 Especially the serial interface is not a bus and not used for signalling and
 power control. It is payload data (only).
 
 Serial interface looks a lot like a (point-to-point) bus to
 me. Similar to SATA, for example.

In that sense a gpio looks also a lot like a 1-bit bus...

Anyways, there are no subnodes (clients) of a gpio but the
gpiocontroller pattern is used.

In other words: a driver that wants to control a gpio asks for a
reference of the gpio controller and uses the gpiolib to control it.

In the same way, a driver that wants to use an uart could ask
for a reference to the tty/uart driver and use some functions to
control it (and send commands). So a hypothetical gps-iio
driver could set sampling rate etc.

And it can also ask the tty/uart: „please register me and notify if
some syscall wants you to open() or close() so that I (the driver of
the GPS chip) can turn on power of the GPS chip (and only I know
how to do that - nobody else has to care)“.

I am just playing the Devil's advocate to find out what the really
common principle is and how the DT for clients of a serial interface
should really be represented in a DT in a way that is agnostic to
a specific driver structure, driver functions and user space.

And to find out if we need tty/slaves (as proposed in the title of this
patch series) at all. Or if there is a better way to describe the relation
of the gps chip driver and the tty/uart.

BR,
Nikolaus--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-25 Thread Dr. H. Nikolaus Schaller

Am 25.03.2015 um 21:53 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 AFAIK the chip simply starts to emit NMEA records if powered on.
 There is no command going over the serial interface to address it
 or control it.
 
 Right, since GPS basically doesn't need any configuration/control.
 That’s not true for other UART attached devices, though.
 
 Do you have an example? Usually an UART data stream is transparently
 presented to a /dev/tty - and user-space daemon can configure/control the
 attached device. In most cases it can mix payload data and control command
 by some AT command and escape sequences.
 
 Bluetooth H4P protocol is one example.
 
 well parent  child is not about power control, but about primary
 control.
 
 Can you clearly and precisely define what “primary” control is? I think
 two people will have three opinions about that.
 
 This has not be a problem so far...
 
 For example I would see the w2sg0004 on/off gpio as the primary “control”
 which makes the light (NMES records) turned on.
 
 ...and I don't think it is a problem now.
 
 Main reason is, that I would need to go
 through the UART to “communicate with the w2sg0004.
 
 You can always communicate” through the UART. Even without DT. As long as
 the connected chip is powered up by any means (could be some fixed-regulator
 or hard wired).
 
 But you don't know how to communicate through the uart.

Maybe we are talking using different assumptions. As long as you have a user 
space
gpsd daemon that talks to the gps chip the kernel simply has to transparently 
(except
line disciplines) pass the data to the uart.

For that there is no need to describe anything in DT.

 
 Let me raise the question:
 
 Why do we need to describe in the DT (independently of Linux power control
 structures and drivers!) that the GPS data interface is connected to a 
 specific UART?
 
 Because we want the phone to boot knowing I have a bluetooth or I
 have a GPS, as it would if it was connected using USB, and not having
 user figure out what commands he needs to do to enable reasonable
 hardware support (and getting it wrong, because you need to specify
 _many_ critical parameters to hciattach).

Yes, this is indeed something I also would like to see for the GTA04 (and other)
devices.

So the reason is that some kernel driver wants to use the tty/uart to 
communicate
directly with the chip. This is very similar to a gpio that some driver wants 
to use.

Thus please consider the

/ {
bt {
compatible = vendor,product“;
uart = uart1;
enable = gpio17 34 0;
};
};

approach.

And if you want to hide uart1 from the user-space, that should be a property
of the uart1 node (whereever it is defined).

BR,
Nikolaus--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-24 Thread Dr. H. Nikolaus Schaller
Hi,

Am 21.03.2015 um 00:31 schrieb NeilBrown ne...@suse.de:

 On Fri, 20 Mar 2015 10:34:18 +0100 Dr. H. Nikolaus Schaller
 h...@goldelico.com wrote:
 
 
 Am 20.03.2015 um 09:54 schrieb NeilBrown ne...@suse.de:
 
 There needs to be one device-node for each device, and that device-node 
 needs
 to be a child of the device-node for the device which is the primary
 connection to the child device.
 
 Then please explain to me nodes like
 
 / {
  compatible = ti,omap3-gta04, ti,omap36xx, ti,omap3;
 
  cpus {
  cpu@0 {
  cpu0-supply = vcc;
  };
  };
 
 According to the rule you apply here it should be something like
 
  cpu@0 {
  regulator {
  …
  }
 
 
 
 This exactly highlight one of the big problems with device tree as I see it.
 
 Each device can potentially have relationships with a number of other
 devices, for the supply of power, reset signalling, interrupt handled, data
 transfer, command transfer etc etc etc.

Yes. The network is a mesh.

 
 devicetree provides two ways to indicated a relationship between devices.
 One way is a parent/child arrangement.  The other way is ad-hoc
   attribute = devicename
 assignments.

Yes.

 
 Each device can only have one parent, but can have multiple arbitrary
 assignments.
 
 I would much rather that the parent/child relationship didn't exist at all.
 Each device should stand alone, and list all relationships explicitly.  But
 that is not the way devicetree works, and we need to live with that.

Is it not how the device tree works or how we use it? Or how you think it
should better be?

What stops us from using it in arbitrary assignments like clocks and
regulators?

GPIOs are also a nice example: you just specify the gpio controller
and the gpio number to use it. There is no parent/child connection.

Why for tty / serial and serial consumers but not for GPIOs?

I have tried to find out the rules when parentchild is used (see below).

 
 So we need a clear understanding of what the 'parent' of a given device
 should be.
 I don't know what the specifications say, if anything, but what I see is that
 the parent is in practive a device which can ‘address' the child.  

I think this holds only for “bus” devices - where it is really a good and
standard way of structuring the bus and it’s masters/slaves. One child
node per client.

 i.e.
 control signalling is the key parent-child relationship.
 This is consistent with the fact that many device nodes have a 
   reg=xxx
 attribute which gives the address of the node as seen by it's parent.
 
 Given that understanding, a regulator must be a child of the device which can
 control it - which can turn it on or off.  Not a child of the device which
 receives power from it.

So you propose that the parent-child relationship is “control”? I.e. some
channel which allows to address some bus client (through reg) and
control that devices.

Makes sense. This is how i2c and spi clients are specified.

 
 In the case of our GPS, it receives control over the serial connection from
 the UART,

Ahem - does it?

AFAIK the chip simply starts to emit NMEA records if powered on. There is no
command going over the serial interface to address it or control it.

 also receives control via a GPIO to the on/off pin, and also needs
 a regulator to power the antenna.
 
 So should the parent be the uart, the on/off GPIO, or the regulator?
 
 I would much rather there wasn't a parent, and that each of these were listed
 as ad-hoc attribute assignments.  But device-tree says there must be a parent
 (where possible), and the parent is the thing that is “primarily in control.

Well, IMHO the “parent” could also be the root. Representing the whole board.

Nevertheless, I doubt your rule that “ability to control” defines the 
parentchild
relation (see below).

 
 I think the GPS is “primarily a uart-attached device.

But not in the same way as an I2C device.

Especially the serial interface is not a bus and not used for signalling and
power control. It is payload data (only).

 So I propose a device-node which describes the GPS, which is a child of the
 UART, and explicitly identifies the GPIO it uses to power on/off, the
 regulator it uses to power the antenna, and how it receives on or off
 status indications from the GPS.

The more I think about that, you have given good arguments *not* to use the
parent-child relationship for the UART interface of the GPS.

Let me give another example. The 3G Modem has 3 (or 4) interfaces:
1. an USB-Interface for AT signalling and payload
2. some GPIOs for power control.
3. a PCM interface for digital voice. 
4. it might also have a serial interface as alternate AT command and (GPRS
low speed) payload.

So which one is the most prominent or most important to make it a child of?

If you use “control” you must make it a child of the USB phy and the serial 
interface
which requires multiple inheritance

Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-20 Thread Dr. H. Nikolaus Schaller

Am 18.03.2015 um 06:58 schrieb NeilBrown n...@brown.name:

 If a platform has a particular device permanently attached to a UART,
 there may be out-of-band signaling necessary to power the device
 on and off.
 
 This driver controls that signalling for a number of different devices.
 It can
 - enable/disable a regulator
 - toggle a GPIO
 - register an 'rfkill' which can force the device to be off.
 
 When the rfkill is absent or unblocked, the device will be on when the
 associated tty device is open, and closed otherwise.
 
 Signed-off-by: NeilBrown n...@brown.name
 ---
 .../bindings/tty_slave/wi2wi,w2cbw003.txt  |   19 +
 .../bindings/tty_slave/wi2wi,w2sg0004.txt  |   37 +
 .../devicetree/bindings/vendor-prefixes.txt|1 
 drivers/tty/slave/Kconfig  |   14 +
 drivers/tty/slave/Makefile |2 
 drivers/tty/slave/serial-power-manager.c   |  510 
 6 files changed, 583 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt
 create mode 100644 
 Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt
 create mode 100644 drivers/tty/slave/serial-power-manager.c
 
 diff --git a/Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt 
 b/Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt
 new file mode 100644
 index ..cfe6ee5e01e9
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt
 @@ -0,0 +1,19 @@
 +wi2wi bluetooth module
 +
 +This is accessed via a serial port and is largely controlled via that
 +link.  Extra configuration is needed to enable power on/off
 +
 +Required properties:
 +- compatible: wi2wi,w2cbw003
 +- vdd-supply: regulator used to power the device.
 +
 +The node for this device must be the child of a UART.
 +
 +Example:
 +
 +uart1 {
 +   bluetooth {
 +   compatible = wi2wi,w2cbw003;
 +   vdd-supply = vaux4;
 +   };
 +};

Wouldn’t it be easier to simply write

uart1 {
vdd-suppy = vaux4;
}

 diff --git a/Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt 
 b/Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt
 new file mode 100644
 index ..fdc52cf56533
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt
 @@ -0,0 +1,37 @@
 +wi2wi GPS device
 +
 +This is accessed via a serial port and is largely controlled via that
 +link.  Extra configuration is needed to enable power on/off
 +
 +Required properties:
 +- compatible: wi2wi,w2sg0004
 +- gpios: gpios used to toggle 'on/off' pin
 +- interrupts: interrupt generated by RX pin when device
 +  should be off
 +
 +Optional properties:
 +- vdd-supply: regulator used to power antenna
 +- pinctrl: default, off
 +  if off setting is provided it is imposed when device should
 +  be off.  This can route the RX pin to a GPIO interrupt.
 +
 +The w2sg0004 uses a pin-toggle both to power-on and to
 +power-off, so the driver needs to detect what state it is in.
 +It does this by detecting characters on the RX line.
 +When it should be off, these can optionally be detected by a GPIO.
 +
 +The node for this device must be the child of a UART.
 +
 +Example:
 +uart2 {
 +   gps {
 +   compatible = wi2iw,w2sg0004;
 +   vdd-supply = vsim;
 +   gpios = gpio5 17 0; /* GPIO_145 */
 +   interrupts-extended = gpio5 19 0; /* GPIO_147 */
 +   /* When off, switch RX to be an interrupt */
 +   pinctrl-names = default, off;
 +   pinctrl-0 = uart2_pins;
 +   pinctrl-1 = uart2_pins_rx_gpio;
 +   };
 +};

If the wi2wi driver is a regulator driver one would write

/ {
   gps-regulator: gps {
   compatible = wi2iw,w2sg0004;
   vdd-supply = vsim;
   gpios = gpio5 17 0; /* GPIO_145 */
   interrupts-extended = gpio5 19 0; /* GPIO_147 */
   /* When off, switch RX to be an interrupt */
   pinctrl-names = default, off;
   pinctrl-0 = uart2_pins;
   pinctrl-1 = uart2_pins_rx_gpio;
   };
}

uart2 {
vdd-suppy = gps-regulator;
};

Which IMHO better describes that the uart controls power of a separate driver.

And this pattern for writing a DT would IMHO be more flexible because you
can „connect“ to any regulator, e.g. a regulator for a RS232 level shifter.


 diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt 
 b/Documentation/devicetree/bindings/vendor-prefixes.txt
 index 389ca1347a77..81d259303710 100644
 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt
 +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
 @@ -189,6 +189,7 @@ variscite Variscite Ltd.
 via   VIA Technologies, Inc.
 virtioVirtual I/O Device Specification, developed by the OASIS 
 consortium
 voipacVoipac Technologies s.r.o.
 +wi2wi

Re: [Gta04-owner] [PATCH 0/3] tty slave device support - version 3.

2015-03-20 Thread Dr. H. Nikolaus Schaller
Hi Neil,

Am 18.03.2015 um 06:58 schrieb NeilBrown n...@brown.name:

 Hi again,
 here is version 3 of support for tty-slaves.
 
 This version introduces a new bus-type for tty-slaves,

Hm. I am still not convinced that a tty is a „bus“ and 
that this is a solution for a wide-spread problem.

 and causes
 a tty-slave device to appear in /sys/devices between the uart and the
 tty.
 It effectively intercepts and calls from the tty to the uart (i.e. any
 tty_operations) and applies extra functionality at that point.

 
 Currently the only driver intercepts open and close.
 It powers on the device on open, and powers off at last-close.

That is what the missing piece in Linux is to make the w2sg0004
chip work.

 
 Power can be controlled by a regulator or by toggling a GPIO.

I think such a GPIO logic has nothing to do with serial and
should be left over to the regulator logic, i.e. we need a special
regulator-w2sg0004 driver.

So I suggest to remove the GPIO logic from your 

drivers/tty/slave/serial-power-manager.c

And then you can even get rid of adding a chip specific „compatible“
entry for the subnodes.

 
 I think I've incorporated most of the feed back I received from
 previous versions, but if I missed something - I apologize.  If
 this approach is structurally acceptable then I can fix up all the
 smaller issues.

As said I would prefer that the w2sg0004 driver is just a separate
„regulator“ driver as we had proposed before.

Nikolaus



 
 Thanks for your review,
 NeilBrown
 
 
 ---
 
 NeilBrown (3):
  TTY: use class_find_device to find port in uart_suspend/resume.
  TTY: add support for tty_slave devices.
  tty/slaves: add a driver to power on/off UART attached devices.
 
 
 .../bindings/tty_slave/wi2wi,w2cbw003.txt  |   19 +
 .../bindings/tty_slave/wi2wi,w2sg0004.txt  |   37 +
 .../devicetree/bindings/vendor-prefixes.txt|1 
 drivers/tty/Kconfig|1 
 drivers/tty/Makefile   |1 
 drivers/tty/serial/serial_core.c   |   21 -
 drivers/tty/slave/Kconfig  |   21 +
 drivers/tty/slave/Makefile |4 
 drivers/tty/slave/serial-power-manager.c   |  510 
 drivers/tty/slave/tty_slave_core.c |  136 +
 drivers/tty/tty_io.c   |   60 ++
 include/linux/tty.h|2 
 include/linux/tty_slave.h  |   26 +
 13 files changed, 813 insertions(+), 26 deletions(-)
 create mode 100644 
 Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt
 create mode 100644 
 Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt
 create mode 100644 drivers/tty/slave/Kconfig
 create mode 100644 drivers/tty/slave/Makefile
 create mode 100644 drivers/tty/slave/serial-power-manager.c
 create mode 100644 drivers/tty/slave/tty_slave_core.c
 create mode 100644 include/linux/tty_slave.h
 
 --
 Signature
 
 ___
 Gta04-owner mailing list
 gta04-ow...@goldelico.com
 http://lists.goldelico.com/mailman/listinfo.cgi/gta04-owner

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 3/3] tty/slaves: add a driver to power on/off UART attached devices.

2015-03-20 Thread Dr. H. Nikolaus Schaller

Am 20.03.2015 um 09:54 schrieb NeilBrown ne...@suse.de:

 On Fri, 20 Mar 2015 08:54:38 +0100 Dr. H. Nikolaus Schaller
 h...@goldelico.com wrote:
 
 
 Am 18.03.2015 um 06:58 schrieb NeilBrown n...@brown.name:
 
 If a platform has a particular device permanently attached to a UART,
 there may be out-of-band signaling necessary to power the device
 on and off.
 
 This driver controls that signalling for a number of different devices.
 It can
 - enable/disable a regulator
 - toggle a GPIO
 - register an 'rfkill' which can force the device to be off.
 
 When the rfkill is absent or unblocked, the device will be on when the
 associated tty device is open, and closed otherwise.
 
 Signed-off-by: NeilBrown n...@brown.name
 ---
 .../bindings/tty_slave/wi2wi,w2cbw003.txt  |   19 +
 .../bindings/tty_slave/wi2wi,w2sg0004.txt  |   37 +
 .../devicetree/bindings/vendor-prefixes.txt|1 
 drivers/tty/slave/Kconfig  |   14 +
 drivers/tty/slave/Makefile |2 
 drivers/tty/slave/serial-power-manager.c   |  510 
 
 6 files changed, 583 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt
 create mode 100644 
 Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt
 create mode 100644 drivers/tty/slave/serial-power-manager.c
 
 diff --git a/Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt 
 b/Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt
 new file mode 100644
 index ..cfe6ee5e01e9
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/tty_slave/wi2wi,w2cbw003.txt
 @@ -0,0 +1,19 @@
 +wi2wi bluetooth module
 +
 +This is accessed via a serial port and is largely controlled via that
 +link.  Extra configuration is needed to enable power on/off
 +
 +Required properties:
 +- compatible: wi2wi,w2cbw003
 +- vdd-supply: regulator used to power the device.
 +
 +The node for this device must be the child of a UART.
 +
 +Example:
 +
 +uart1 {
 +   bluetooth {
 +   compatible = wi2wi,w2cbw003;
 +   vdd-supply = vaux4;
 +   };
 +};
 
 Wouldn’t it be easier to simply write
 
 uart1 {
  vdd-suppy = vaux4;
 }
 
 Easier to write: certainly.
 Easier to justify? No.

I just justified.

 Easier to get merged upstream?  Definitely not.

Are you the maintainer?

 After all, the uart itself doesn't require a power supply.
 It is the device connected to the uart which requires the power supply.

Yes.

 
 
 
 diff --git a/Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt 
 b/Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt
 new file mode 100644
 index ..fdc52cf56533
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/tty_slave/wi2wi,w2sg0004.txt
 @@ -0,0 +1,37 @@
 +wi2wi GPS device
 +
 +This is accessed via a serial port and is largely controlled via that
 +link.  Extra configuration is needed to enable power on/off
 +
 +Required properties:
 +- compatible: wi2wi,w2sg0004
 +- gpios: gpios used to toggle 'on/off' pin
 +- interrupts: interrupt generated by RX pin when device
 +  should be off
 +
 +Optional properties:
 +- vdd-supply: regulator used to power antenna
 +- pinctrl: default, off
 +  if off setting is provided it is imposed when device should
 +  be off.  This can route the RX pin to a GPIO interrupt.
 +
 +The w2sg0004 uses a pin-toggle both to power-on and to
 +power-off, so the driver needs to detect what state it is in.
 +It does this by detecting characters on the RX line.
 +When it should be off, these can optionally be detected by a GPIO.
 +
 +The node for this device must be the child of a UART.
 +
 +Example:
 +uart2 {
 +   gps {
 +   compatible = wi2iw,w2sg0004;
 +   vdd-supply = vsim;
 +   gpios = gpio5 17 0; /* GPIO_145 */
 +   interrupts-extended = gpio5 19 0; /* GPIO_147 */
 +   /* When off, switch RX to be an interrupt */
 +   pinctrl-names = default, off;
 +   pinctrl-0 = uart2_pins;
 +   pinctrl-1 = uart2_pins_rx_gpio;
 +   };
 +};
 
 If the wi2wi driver is a regulator driver one would write
 
 / {
   gps-regulator: gps {
   compatible = wi2iw,w2sg0004;
   vdd-supply = vsim;
   gpios = gpio5 17 0; /* GPIO_145 */
   interrupts-extended = gpio5 19 0; /* GPIO_147 */
   /* When off, switch RX to be an interrupt */
   pinctrl-names = default, off;
   pinctrl-0 = uart2_pins;
   pinctrl-1 = uart2_pins_rx_gpio;
   };
 }
 
 uart2 {
  vdd-suppy = gps-regulator;
 };
 
 Which IMHO better describes that the uart controls power of a separate 
 driver.
 
 But the uart doesn’t control the power.
 An 'open' on the tty causes one driver to turn on a regulator, and another
 driver to activate a uart so that the device represented by the tty can

Re: [Gta04-owner] [PATCH 0/3] tty slave device support - version 3.

2015-03-20 Thread Dr. H. Nikolaus Schaller
Hi,

Am 20.03.2015 um 14:08 schrieb Sebastian Reichel s...@kernel.org:

 Hi,
 
 On Fri, Mar 20, 2015 at 09:54:21AM +0100, Dr. H. Nikolaus Schaller wrote:
 [...]
 And we do not write a driver for the w2sg0004 but the regulator inside that
 chip.
 
 DT describes the hardware structure and not the Linux driver
 structure.

I am not advocating for describing the Linux driver structure in DT.
Rather I suggest that the DT should describe hardware and there
is a regulator inside that chip… Linux drivers can follow that or mix
everything into a single driver if that is better.

 
 You also won’t expect that the omap3 driver hides everything. You
 expect that the twl4030 provides some regulators that can be enabled
 by subsystems inside the omap3. And if I remember correctly there are
 regulators inside the omap3 which have explicit regulator nodes in the DT.
 
 so let's have a look at twl regulators. They can be found below
 the twl node, so they will look similar to
 
 / - omap3 - i2c - twl - regulator
 
 So properly mapped to the w2sg0004 device this would put your
 regulator to
 
 / - omap3 - serial - w2sg0004 - regulator

Yes. Indeed.

Currently it is

omap3 - serial - serial-power-manager (trying to cover a multitude
of different chips).

 
 This will gain you nothing as far as I can tell.

And because of that I think Neil’s argument isn’t for or against
anything.

 
 Please note that subdevices under the serial node are pretty useful,
 since then the kernel can e.g. automatically setup correct line
 disciplines for serial attached bluetooth chips and make bluetooth
 work out of the box.

I don’t doubt that such subnodes are useful. I just object mixing
different chips and controls into a single subnode driver.

And as soon as you want to control line disciplines from such
a subnode, you indeed need a driver for each variant.

So a GPS chip needing some line discipline could be

 / - omap3 - serial - w2sg0004 - line-discipline
 / - omap3 - serial - w2sg0004 - regulator

And if omap3 - serial can directly control a regulator, it can
easily be the w2sg0004 - regulator

 
 I am aware, that the Linux kernel has no such thing for serial
 attached GPS devices, but that's Linux specific and irrelevant
 for the DT description.
 
 The w2sg0004-regulator approach just follows this principle.
 Anyone willing to control the power of the w2sg0004 can use this
 regulator interface.
 
 From a HW perspective your regulator hides the information, that
 there is a device attached to the serial port and instead claims,
 that a regulator is needed to make the serial port work.

Yes, without this regulator the serial port does not work. It is IMHO
more important than stating the obvious that a serial device is
connected to a serial port.

And if there is nothing to hide (the obvious serial interface wiring), why
describe it at all?

Anyways, in my proposal there will be a subnode of the uart, the
one where it is specified that it should control the regulator of the
w2sg.

Basically, Neil’s proposal already covers this case. His bluetooth
subnode just controls vaux4 which turns on power for the w2cbw003
chip.

So for my view it is not really understandable why one uart subnode
can control a regulator, and the other can’t or shouldn’t and why
this regulator function can’t be divided from the serial management
into a regulator driver.

 
 Apart from that this interface is limited in its features. I'm
 currently working on N900's bluetooth chip. This one needs to set a
 gpio before data is sent data to the chip, has a reset gpio and
 a gpio to wakeup the OMAP SoC from idle states to avoid data loss
 on the UART.

Yes, that looks equally complicated to solve if not even more than
the w2sg chip.

But what would you prefer:

* extend the drivers/tty/slave/serial-power-manager.c to also cover your
  special case

* instantiate a drivers/misc/n900-bluetooth-regulator.c and hook it up
  exactly like the vaux4 of the gta04 bluetooth chip? Just referencing
  a different regulator node?

And as said I don’t mind if the regulator is a subnode of the omap3 serial.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 0/3] tty slave device support - version 3.

2015-03-20 Thread Dr. H. Nikolaus Schaller
Hi,

Am 20.03.2015 um 09:43 schrieb NeilBrown ne...@suse.de:

 On Fri, 20 Mar 2015 08:54:35 +0100 Dr. H. Nikolaus Schaller
 h...@goldelico.com wrote:
 
 Hi Neil,
 
 Am 18.03.2015 um 06:58 schrieb NeilBrown n...@brown.name:
 
 Hi again,
 here is version 3 of support for tty-slaves.
 
 This version introduces a new bus-type for tty-slaves,
 
 Hm. I am still not convinced that a tty is a „bus“ and 
 that this is a solution for a wide-spread problem.
 
 Don’t read too much into the word bus.  

Then we should find a different word.

 It is really just a mechanism for
 grouping drivers together - with maybe a hint of a suggestions that it helps
 communicate with the devices which the drivers drive.
 
 And I'm not particularly interested in solving wide-spread problems, just in
 solving my problem in a suitably idiomatic way.
 
 
 
 and causes
 a tty-slave device to appear in /sys/devices between the uart and the
 tty.
 It effectively intercepts and calls from the tty to the uart (i.e. any
 tty_operations) and applies extra functionality at that point.
 
 
 Currently the only driver intercepts open and close.
 It powers on the device on open, and powers off at last-close.
 
 That is what the missing piece in Linux is to make the w2sg0004
 chip work.
 
 
 Power can be controlled by a regulator or by toggling a GPIO.
 
 I think such a GPIO logic has nothing to do with serial and
 should be left over to the regulator logic, i.e. we need a special
 regulator-w2sg0004 driver.
 
 So I suggest to remove the GPIO logic from your 
 
 drivers/tty/slave/serial-power-manager.c
 
 And then you can even get rid of adding a chip specific „compatible“
 entry for the subnodes.
 
 But (nearly) every node has a compatible entry.
 Each node describes a device, and the compatible string tells us what sort
 of device.

Yes, it should - if necessary.

 Surely you agree that there is a particular device that needs to be
 controlled?

No, my opinion is that a specific regulator should be controlled.

  In that case there needs to be a node representing it and a
 compatible string describing it.  That is how “devicetree works.

For this there is the vdd-regulator = regulator idiom and that is
how “devicetree” works as well.

 
 
 
 
 I think I've incorporated most of the feed back I received from
 previous versions, but if I missed something - I apologize.  If
 this approach is structurally acceptable then I can fix up all the
 smaller issues.
 
 As said I would prefer that the w2sg0004 driver is just a separate
 „regulator“ driver as we had proposed before.
 
 You can prefer that if you wish.  But given that the w2sg0004 is not in fact
 a regulator,

therefore our proposal is to make it a drivers/misc and not a drivers/regulator.
But it has a regulator inside that can obviously be turned on or off. So I want 
to
keep close to the logical energy flow.

 but is in fact a GPS device, I doubt you will find a lot of
 support for your approach (as indeed I didn’t when I tried it...)

We got a lot of support. The main opposition was about using a “virtual”
gpio controller instead of a regulator API to turn the chip on and off as
directed by the tty driver.

And we do not write a driver for the w2sg0004 but the regulator inside that
chip. You also won’t expect that the omap3 driver hides everything. You
expect that the twl4030 provides some regulators that can be enabled
by subsystems inside the omap3. And if I remember correctly there are
regulators inside the omap3 which have explicit regulator nodes in the DT.

The w2sg0004-regulator approach just follows this principle. Anyone willing
to control the power of the w2sg0004 can use this regulator interface.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-03-17 Thread Dr. H. Nikolaus Schaller
Hi,

Am 17.03.2015 um 09:47 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 diff --git 
 a/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 new file mode 100644
 index 000..bb3580c
 --- /dev/null
 +++ 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 @@ -0,0 +1,43 @@
 +twl4030_madc_battery
 +
 +Required properties:
 + - compatible : ti,twl4030-madc-battery
 + - capacity-uah : battery capacity in uAh
 
 Could we make it capacity-uAh ?
 This name was suggested by Mark Rutland [1] and naming convention
 should be all lowercase. There exists already bindings
 without uppercase (e.g. ti,bb-uamp) so I would keep it consistent.
 
 Messing up SI units due to convention is _stupid_. Don't do it.
 
 to introduce coefficients for temperature and discharge rate?
 What do you mean? Nothing like that is used in current driver why do
 we need to add it?
 
 Well, conversion between Li-ion's voltage and state of charge at 0
 current is well known:

We can’t measure at 0 current since the OMAP is driven from battery
and charger and may also draw some mA…

 
def percent(m, v):
   u = 0.0387-(1.4523*(3.7835-v))
if u  0:
return 0
  return (0.1966+math.sqrt(u))*100
 
 And there's not much to calibrate there, and it should become library
 helper function; there's no need to write it to every single dts.
 
 The charge/discharge difference is due to internal battery resistance,
 and Ohm's law. (Then, you should not need different values for
 charging/discharging case.)

Yes, and that also depends on the board and battery type. So you always
need to specify some battery specific coefficient for that in the DT.

We simply did choose a table, because calculating the right coefficients
is more complex and getting the table values can easily be done from
running one full charge-discharge-charge cycle.

 
 With your aproach, you'll get lower percentage when phone is under
 load vs. idle. Taking internal resistance into account would give you
 more precise readings. (Attached, old patch for zaurus shows the
 needed computation).

This is why we have a charging and a discharging table to compensate
for this effect.

 
 And if you wanted even more precise readings... internal resistance
 depends on temperature.

We don’t necessarily know the real battery temperature.

 
 I guess this should go into library somewhere, because many machines
 need similar code.

Is a library easier to maintain and handle than just a set of table values?

Anyways it ends up in a representation of a mapping function with two
input parameters (voltage and charge/discharge indication).

My proposal: keep it simple for everybody. And I can’t imagine something
easier than a mapping table.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-03-17 Thread Dr. H. Nikolaus Schaller

Am 17.03.2015 um 09:48 schrieb Pavel Machek pa...@ucw.cz:

 
 Temperature calibration should have already been done in the underlaying 
 twl4030 iio driver.
 
 Discharge rate is the real current flow reported in uA. Also
 reported by iio.
 
 Ack, but there's rather severe temperature dependency of the lithium
 battery, which you should take into account if you want to compute
 “percentage charged.

We just want to estimate it as good as possible. 5-10% is sufficient
and better than no value at all (which is what you get without this
driver).

And, we just convert the (existing) driver from non-DT to DT and to use
iio, so we do not want to change the inner logic what it does and how it
works.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-03-17 Thread Dr. H. Nikolaus Schaller

Am 17.03.2015 um 09:47 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 diff --git 
 a/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 new file mode 100644
 index 000..bb3580c
 --- /dev/null
 +++ 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 @@ -0,0 +1,43 @@
 +twl4030_madc_battery
 +
 +Required properties:
 + - compatible : ti,twl4030-madc-battery
 + - capacity-uah : battery capacity in uAh
 
 Could we make it capacity-uAh ?
 This name was suggested by Mark Rutland [1] and naming convention
 should be all lowercase. There exists already bindings
 without uppercase (e.g. ti,bb-uamp) so I would keep it consistent.
 
 Messing up SI units due to convention is _stupid_. Don't do it.
 
 to introduce coefficients for temperature and discharge rate?
 What do you mean? Nothing like that is used in current driver why do
 we need to add it?
 
 Well, conversion between Li-ion's voltage and state of charge at 0
 current is well known:
 
def percent(m, v):
   u = 0.0387-(1.4523*(3.7835-v))
if u  0:
return 0
  return (0.1966+math.sqrt(u))*100

I forgot to ask: does the kernel have a sqrt() function?
 
 And there's not much to calibrate there, and it should become library
 helper function; there's no need to write it to every single dts.
 
 The charge/discharge difference is due to internal battery resistance,
 and Ohm's law. (Then, you should not need different values for
 charging/discharging case.)
 
 With your aproach, you'll get lower percentage when phone is under
 load vs. idle. Taking internal resistance into account would give you
 more precise readings. (Attached, old patch for zaurus shows the
 needed computation).
 
 And if you wanted even more precise readings... internal resistance
 depends on temperature.
 
 I guess this should go into library somewhere, because many machines
 need similar code.
 
   Pavel
 -- 
 (english) http://www.livejournal.com/~pavelmachek
 (cesky, pictures) 
 http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
 zbattery.10.diff

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-03-17 Thread Dr. H. Nikolaus Schaller
Hi Pavel,

Am 17.03.2015 um 11:37 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 to introduce coefficients for temperature and discharge rate?
 What do you mean? Nothing like that is used in current driver why do
 we need to add it?
 
 Well, conversion between Li-ion's voltage and state of charge at 0
 current is well known:
 
 We can’t measure at 0 current since the OMAP is driven from battery
 and charger and may also draw some mA…
 
 Yes, but you know how many mA you are taking just now. So if you knew
 the internal resistance, you could compute the voltage at 0
 current. (And it should also work during charging, as long as you know
 how much current is going in.)

As far as I understand the twl4030 charger and MADC it is not possible to
separate these values. It is only reporting the inflow from charger to
battery + system. So you don’t know how many mA are supplying the system
and how many mA are left over for charging.

You can only assume how much the system is drawing while running (something
between 50 and 600 mA but this depends on system activities, power state
of peripherald and e.g. backlight being switched on).

I think your basic assumption that we know any time how many mA the system
is taking is not given.

 
   def percent(m, v):
 u = 0.0387-(1.4523*(3.7835-v))
   if u  0:
   return 0
 return (0.1966+math.sqrt(u))*100
 
 And there's not much to calibrate there, and it should become library
 helper function; there's no need to write it to every single dts.
 
 The charge/discharge difference is due to internal battery resistance,
 and Ohm's law. (Then, you should not need different values for
 charging/discharging case.)
 
 Yes, and that also depends on the board and battery type. So you always
 need to specify some battery specific coefficient for that in the DT.
 
 Yes, and that coefficient should be internal battery resistance ;-).

But where do you know this value from to write it into a DT file?
Usually you can’t measure it easily and for some batteries you don’t have
a data sheet.

Contrary, the calibration curves can easily be measured on the device
(assuming that the charge level decreases/increases linearly over time
between Full and Empty).

I tend to make software easy to use for the user (developer of a board support
package) of a driver, not theoretically correct or mathematically elegant.

 
 We simply did choose a table, because calculating the right coefficients
 is more complex and getting the table values can easily be done from
 running one full charge-discharge-charge cycle.
 
 Well.. One set of coefficients would be kind of ok. But you are doing
 two, because it really depends on current, not charge/discharge. So
 why not do it right, for all currents…?

Because the right solution for all these issues is to use a fuel gauge chip
(bq27xxx).

This driver is just for systems where the hardware designer did forget
(or did not want to spend money) for such a chip, but user space
expects some /sys/class/power_supply indication (e.g. Android/Replicant).

The missing optimal precision is something we can live with.

 
 With your aproach, you'll get lower percentage when phone is under
 load vs. idle. Taking internal resistance into account would give you
 more precise readings. (Attached, old patch for zaurus shows the
 needed computation).
 
 This is why we have a charging and a discharging table to compensate
 for this effect.
 
 Yes, but there's very different current during idle phone and during
 call (for example). So yes, you are compensating for different current
 during charge and discharge, but it is possible to do better.

I am not convinced that it can be really done better, considering the
limitations of the twl4030 circuits, and I doubt that it is worth the efforts
of doing it better.

 
 I guess this should go into library somewhere, because many machines
 need similar code.
 
 Is a library easier to maintain and handle than just a set of table
 values?
 
 I think so, yes, because otherwise you need a set of tables for each
 machine.

Yes, but what is the problem? We have different device trees for each
machine anyways. And as soon as they differ in battery characteristics
the coefficients for your calculation have to be defined for each machine.

So someone has to write in some DT values (difficult to understand
and derive coefficients or two simple mapping tables).

To me it looks as if you want to make it a 100% solution while I am happy
with the 80% solution, which already exists as a platform data driver and
just want to get it back into DT based boards.

So I would suggest that Mareks patches to make the platform data
driver DT compatible are applied first, and you are invited to submit a
technically better solution for testing on real hardware.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  

Re: [PATCH v3 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-03-17 Thread Dr. H. Nikolaus Schaller
Hi Pavel,

Am 17.03.2015 um 14:59 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 to introduce coefficients for temperature and discharge rate?
 What do you mean? Nothing like that is used in current driver why do
 we need to add it?
 
 Well, conversion between Li-ion's voltage and state of charge at 0
 current is well known:
 
 We can’t measure at 0 current since the OMAP is driven from battery
 and charger and may also draw some mA…
 
 Yes, but you know how many mA you are taking just now. So if you knew
 the internal resistance, you could compute the voltage at 0
 current. (And it should also work during charging, as long as you know
 how much current is going in.)
 
 As far as I understand the twl4030 charger and MADC it is not possible to
 separate these values. It is only reporting the inflow from charger to
 battery + system. So you don’t know how many mA are supplying the system
 and how many mA are left over for charging.
 
 You can only assume how much the system is drawing while running (something
 between 50 and 600 mA but this depends on system activities, power state
 of peripherald and e.g. backlight being switched on).
 
 I think your basic assumption that we know any time how many mA the system
 is taking is not given.
 
 So.. you won't be able to get exact value while charging, but you
 get one while discharging, which is what really matters…?

Is it the same during charging?

And, as we already discussed it depends on the situation.

In addition, GSM power consumption runs in bursts and I don’t know if the sample
rate of the MADC is good enough to track that correctly.

 
 Yes, and that coefficient should be internal battery resistance ;-).
 
 But where do you know this value from to write it into a DT file?
 Usually you can’t measure it easily and for some batteries you don’t have
 a data sheet.
 
 Contrary, the calibration curves can easily be measured on the device
 (assuming that the charge level decreases/increases linearly over time
 between Full and Empty).
 
 If you can copy it from the data sheet, that's the easiest option. If
 not, you should be able to easily compute it from the charge/discharge
 curves or from measured voltage at different loads.

Well, this again assumes that you can generate/control different loads
easily (e.g. turn on/off this and that peripheral) to check the voltage
drop. Sounds good in theory, but I don’t want to do it in practice to
derive this parameter.

And, don’t forget that the MADC signals are nosiy and don’t have the
best precision. So it is likely that you get wrong values.

As said, I think it is not worth the effort around the imperfect twl4030/MADC
charging system.

If someone wants precise data, that is what fuel gauge chips are good for.
And we already have drivers for them.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-03-16 Thread Dr. H. Nikolaus Schaller

Am 16.03.2015 um 22:20 schrieb Belisko Marek marek.beli...@gmail.com:

 On Mon, Mar 16, 2015 at 10:05 PM, Pavel Machek pa...@ucw.cz wrote:
 On Wed 2015-02-04 23:14:32, Marek Belisko wrote:
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../bindings/power_supply/twl4030_madc_battery.txt | 43 
 ++
 1 file changed, 43 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 
 diff --git 
 a/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 new file mode 100644
 index 000..bb3580c
 --- /dev/null
 +++ 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 @@ -0,0 +1,43 @@
 +twl4030_madc_battery
 +
 +Required properties:
 + - compatible : ti,twl4030-madc-battery
 + - capacity-uah : battery capacity in uAh
 
 Could we make it capacity-uAh ?
 This name was suggested by Mark Rutland [1] and naming convention
 should be all lowercase. There exists already bindings
 without uppercase (e.g. ti,bb-uamp) so I would keep it consistent.
 
 + - volt-to-capacity-charging-map : list of voltage(mV):level(%) values
 + for charging calibration (see example)
 + - volt-to-capacity-discharging-map : list of voltage(mV):level(%) values
 + for discharging calibration (see example)
 
 Would mV-to-capacity... be more accurate? Also, would it make sense
 Again maybe mv but it can be added also later.
 to introduce coefficients for temperature and discharge rate?
 What do you mean? Nothing like that is used in current driver why do
 we need to add it?

Temperature calibration should have already been done in the underlaying 
twl4030 iio driver.

Discharge rate is the real current flow reported in uA. Also reported by iio.

 
 Thanks,
Pavel
 --
 (english) http://www.livejournal.com/~pavelmachek
 (cesky, pictures) 
 http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
 
 [1] - http://lists.openwall.net/linux-kernel/2014/10/09/104
 
 BR,
 
 marek
 

BR,
Nikolaus


--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-03-11 Thread Dr. H. Nikolaus Schaller
Hi,

Am 11.03.2015 um 16:24 schrieb Tony Lindgren t...@atomide.com:

 Hi,
 
 * Marek Belisko ma...@goldelico.com [150310 14:28]:
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../bindings/power_supply/twl4030_madc_battery.txt | 43 
 ++
 1 file changed, 43 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 
 diff --git 
 a/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 new file mode 100644
 index 000..d3dd9d8
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 @@ -0,0 +1,43 @@
 +twl4030_madc_battery
 +
 +Required properties:
 + - compatible : ti,twl4030-madc-battery
 + - capacity-uah : battery capacity in uAh
 + - ti,volt-to-capacity-charging-map : list of voltage(mV):level(%) values
 +for charging calibration (see example)
 + - ti,volt-to-capacity-discharging-map : list of voltage(mV):level(%) values
 +for discharging calibration (see example)
 + - io-channels: Should contain IIO channel specifiers
 +for each element in io-channel-names.
 +- io-channel-names: Should contain the following values:
 + * temp - The ADC channel for temperature reading
 + * ichg - The ADC channel for battery charging status
 + * vbat - The ADC channel to measure the battery voltage
 +
 +Example:
 +madc-battery {
 +compatible = ti,twl4030-madc-battery;
 +capacity-uah = 120;
 +ti,volt-to-capacity-charging-map = 4200 100,
 +4100 75,
 +4000 55,
 +3900 25,
 +3800 5,
 +3700 2,
 +3600 1,
 +3300 0;
 +
 +ti,volt-to-capacity-discharging-map = 4200 100
 +   4100 95,
 +   4000 70,
 +   3800 50,
 +   3700 10,
 +   3600 5,
 +   3300 0;
 +io-channels = twl_madc 1,
 +  twl_madc 10,
 +  twl_madc 12;
 +io-channel-names = temp,
 +   ichg,
 +   vbat;
 +};
 
 Rather than just making platform_data into device tree properties..
 
 Can't you hide the these custom properties behind the compatible flag?
 
 You can initialize that data in the driver based on the compatible
 flag and the match data.
 
 This makes sense if you can group things to similar configurations.

Maybe I have not completely understood your proposal.

Do you mean to go back to have big parameter tables for each device/battery
combination in the driver code and the compatible flag (e.g. compatible = 
“board17”)
chooses the right data set for the charging map and channels?

I thought this is what the DT was introduced for - to have the same driver 
code but adapt to different boards depending on hardware variations.

And batteries have very different characteristics and vary between devices…

The charging maps are depending on the battery type connected to the twl4030
and which madc channel is which value is also a little hardware dependent
(although the twl4030 doesn’t give much choice).

And moving this information into the driver for each board that uses it
would blow up the code.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 3/6] Documentation: DT: Document twl4030-madc-battery bindings

2015-03-11 Thread Dr. H. Nikolaus Schaller

Am 11.03.2015 um 17:44 schrieb Tony Lindgren t...@atomide.com:

 * Dr. H. Nikolaus Schaller h...@goldelico.com [150311 09:17]:
 Hi,
 
 Am 11.03.2015 um 16:24 schrieb Tony Lindgren t...@atomide.com:
 
 Hi,
 
 * Marek Belisko ma...@goldelico.com [150310 14:28]:
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../bindings/power_supply/twl4030_madc_battery.txt | 43 
 ++
 1 file changed, 43 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 
 diff --git 
 a/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 new file mode 100644
 index 000..d3dd9d8
 --- /dev/null
 +++ 
 b/Documentation/devicetree/bindings/power_supply/twl4030_madc_battery.txt
 @@ -0,0 +1,43 @@
 +twl4030_madc_battery
 +
 +Required properties:
 + - compatible : ti,twl4030-madc-battery
 + - capacity-uah : battery capacity in uAh
 + - ti,volt-to-capacity-charging-map : list of voltage(mV):level(%) values
 +  for charging calibration (see example)
 + - ti,volt-to-capacity-discharging-map : list of voltage(mV):level(%) 
 values
 +  for discharging calibration (see example)
 + - io-channels: Should contain IIO channel specifiers
 +  for each element in io-channel-names.
 +- io-channel-names: Should contain the following values:
 + * temp - The ADC channel for temperature reading
 + * ichg - The ADC channel for battery charging status
 + * vbat - The ADC channel to measure the battery voltage
 +
 +Example:
 +  madc-battery {
 +  compatible = ti,twl4030-madc-battery;
 +  capacity-uah = 120;
 +  ti,volt-to-capacity-charging-map = 4200 100,
 +  4100 75,
 +  4000 55,
 +  3900 25,
 +  3800 5,
 +  3700 2,
 +  3600 1,
 +  3300 0;
 +
 +  ti,volt-to-capacity-discharging-map = 4200 100
 + 4100 95,
 + 4000 70,
 + 3800 50,
 + 3700 10,
 + 3600 5,
 + 3300 0;
 +  io-channels = twl_madc 1,
 +twl_madc 10,
 +twl_madc 12;
 +  io-channel-names = temp,
 + ichg,
 + vbat;
 +  };
 
 Rather than just making platform_data into device tree properties..
 
 Can't you hide the these custom properties behind the compatible flag?
 
 You can initialize that data in the driver based on the compatible
 flag and the match data.
 
 This makes sense if you can group things to similar configurations.
 
 Maybe I have not completely understood your proposal.
 
 Do you mean to go back to have big parameter tables for each device/battery
 combination in the driver code and the compatible flag (e.g. compatible = 
 “board17”)
 chooses the right data set for the charging map and channels?
 
 If you can somehow group them, then yes.

I don’t see how to group them. Could you make a proposal?

 Not for every board if there
 are many of them naturally.
 
 I thought this is what the DT was introduced for - to have the same driver 
 code but adapt to different boards depending on hardware variations.
 
 Yeah but you also need to consider the issues related to introducing
 new device tree properties. The device tree properties introduced
 should be generic where possible.

Yes, that was discussed for a while for this driver’s bindings leading to v4.

Which ones do you think are not generic enough?

 
 And batteries have very different characteristics and vary between devices…
 
 Right. Maybe that has been already agreed on to use capacity-uah for
 batteries in general?

Ah, do you mean with generic/not generic the distinction between a “ti,” prefix
and no prefix?

Well, I don’t know if there is such an agreement and I would have no argument
against calling it “ti,capacity-uah”.

 In that case I have not problem with that as
 it’s a generic property :)

Well, many batteries and systems have a fuel gauge chip (e.g. bq27000). This
chip “knows” the capacity. But therefore it is not needed to specify
it anywhere because it can be read out (usually in uAh).

This driver is to solve the issue that there is no such factory-programmed
battery or fuel gauge chip connected to a twl4030 driver. Nobody can program
that capacity value - except someone matching the device tree with real 
hardware.

And, by doing and averaging some charge-discharge cycles the fuel gauge
mapping is calibrated.

 
 The charging maps are depending on the battery type

Re: [PATCH 1/4] ARM: dts: omap3-pandora: add common device tree

2015-02-12 Thread Dr. H. Nikolaus Schaller

Am 12.02.2015 um 18:47 schrieb Grazvydas Ignotas nota...@gmail.com:

 On Thu, Feb 12, 2015 at 3:03 PM, Marek Belisko ma...@goldelico.com wrote:
 From: H. Nikolaus Schaller h...@goldelico.com
 
 This device tree allows to boot, supports the panel,
 framebuffer, touch screen, as well as some more peripherals.
 Since there is a OMAP3530 based 600 MHz variant and a DM3730 based
 1 GHz variant we must include this common device tree code
 in one of two CPU specific device trees.
 
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 arch/arm/boot/dts/omap3-pandora-common.dtsi | 641 
 
 1 file changed, 641 insertions(+)
 create mode 100644 arch/arm/boot/dts/omap3-pandora-common.dtsi
 
 diff --git a/arch/arm/boot/dts/omap3-pandora-common.dtsi 
 b/arch/arm/boot/dts/omap3-pandora-common.dtsi
 new file mode 100644
 index 000..0a2a878
 --- /dev/null
 +++ b/arch/arm/boot/dts/omap3-pandora-common.dtsi
 @@ -0,0 +1,641 @@
 
 ...
 
 +
 +   gpio-leds {
 +
 +   compatible = gpio-leds;
 +
 +   pinctrl-names = default;
 +   pinctrl-0 = led_pins;
 +
 +   led@1 {
 +   label = pandora::sd1;
 +   gpios = gpio5 0 GPIO_ACTIVE_HIGH;/* GPIO_128 
 */
 +   linux,default-trigger = mmc0;
 +   default-state = off;
 +   };
 +
 +   led@2 {
 +   label = pandora::sd2;
 +   gpios = gpio5 1 GPIO_ACTIVE_HIGH;/* GPIO_129 
 */
 +   linux,default-trigger = mmc1;
 +   default-state = off;
 +   };
 +
 +   led@3 {
 +   label = pandora::bluetooth;
 +   gpios = gpio5 30 GPIO_ACTIVE_HIGH;   /* GPIO_158 
 */
 +   linux,default-trigger = heartbeat;
 
 I’d prefer this had no trigger, but no strong feelings here.

Ok. Well, this is more or less our testing setup - so that we did see something 
before
we could fix the display setup. I think practice will show what is better, and 
then
it can be patched. We are at the beginning of Pandora DT work…

 
 +   default-state = off;
 +   };
 +
 +   led@4 {
 +   label = pandora::wifi;
 +   gpios = gpio5 31 GPIO_ACTIVE_HIGH;   /* GPIO_159 
 */
 +   linux,default-trigger = mmc2;
 +   default-state = off;
 +   };
 +   };
 +
 +   gpio-keys {
 +   compatible = gpio-keys;
 +
 +   pinctrl-names = default;
 +   pinctrl-0 = button_pins;
 +
 +   up-button {
 +   label = up;
 +   linux,code = KEY_UP;
 +   gpios = gpio4 14 GPIO_ACTIVE_HIGH;   /* GPIO_110 
 */
 +   gpio-key,wakeup;
 +   };
 +
 +   down-button {
 +   label = down;
 +   linux,code = KEY_DOWN;
 +   gpios = gpio4 7 GPIO_ACTIVE_HIGH;/* GPIO_103 
 */
 +   gpio-key,wakeup;
 +   };
 +
 +   left-button {
 +   label = left;
 +   linux,code = KEY_LEFT;
 +   gpios = gpio4 0 GPIO_ACTIVE_HIGH;/* GPIO_96 */
 +   gpio-key,wakeup;
 +   };
 +
 +   right-button {
 +   label = right;
 +   linux,code = KEY_RIGHT;
 +   gpios = gpio4 2 GPIO_ACTIVE_HIGH;/* GPIO_98 */
 +   gpio-key,wakeup;
 +   };
 +
 +   pageup-button {
 +   label = game 1;
 +   linux,code = KEY_PAGEUP;
 +   gpios = gpio4 13 GPIO_ACTIVE_HIGH;   /* GPIO_109 
 */
 +   gpio-key,wakeup;
 +   };
 +
 +   pagedown-button {
 +   label = game 3;
 +   linux,code = KEY_PAGEDOWN;
 +   gpios = gpio4 10 GPIO_ACTIVE_HIGH;   /* GPIO_106 
 */
 +   gpio-key,wakeup;
 +   };
 +
 +   home-button {
 +   label = game 4;
 +   linux,code = KEY_HOME;
 +   gpios = gpio4 5 GPIO_ACTIVE_HIGH;/* GPIO_101 
 */
 +   gpio-key,wakeup;
 +   };
 +
 +   end-button {
 +   label = game 2;
 +   linux,code = KEY_END;
 +   gpios = gpio4 15 GPIO_ACTIVE_HIGH;   /* GPIO_111 
 */
 +   gpio-key,wakeup;
 +   };
 +
 +   right-shift {
 +   label = l;
 +   linux,code = KEY_RIGHTSHIFT;
 +  

Re: [PATCH 1/4] ARM: dts: omap3-pandora: add common device tree

2015-02-12 Thread Dr. H. Nikolaus Schaller

Am 12.02.2015 um 17:03 schrieb Tony Lindgren t...@atomide.com:

 Hi,
 
 Few comments below.
 
 * Marek Belisko ma...@goldelico.com [150212 05:07]:
 +
 +omap3_pmx_core {
 +
 +mmc1_pins: pinmux_mmc1_pins {
 +pinctrl-single,pins = 
 +OMAP3_CORE1_IOPAD(0x2144, PIN_INPUT_PULLUP | MUX_MODE0) 
 /* sdmmc1_clk.sdmmc1_clk */
 +OMAP3_CORE1_IOPAD(0x2146, PIN_INPUT_PULLUP | MUX_MODE0) 
 /* sdmmc1_cmd.sdmmc1_cmd */
 +OMAP3_CORE1_IOPAD(0x2148, PIN_INPUT_PULLUP | MUX_MODE0) 
 /* sdmmc1_dat0.sdmmc1_dat0 */
 +OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT_PULLUP | MUX_MODE0) 
 /* sdmmc1_dat1.sdmmc1_dat1 */
 +OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT_PULLUP | MUX_MODE0) 
 /* sdmmc1_dat2.sdmmc1_dat2 */
 +OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT_PULLUP | MUX_MODE0) 
 /* sdmmc1_dat3.sdmmc1_dat3 */
 +;
 ...
 
 +omap3_pmx_core2 {
 +/* define in CPU specific file that includes this one
 + * use either OMAP3430_CORE2_IOPAD() or OMAP3630_CORE2_IOPAD()
 + */
 +};
 
 OK looks like you have some SoC specific pins too.. I assume you
 guys have checked that all the pins defined in this file are at
 the same offset between 34xx and 36xx variants?

Yes. All in this file are common between 34xx and 36xx.
The 600mhz / 1ghz files cover the differences for pmx_core2 through the 
different macros
(OMAP3430_CORE2_IOPAD vs. OMAP3460_CORE2_IOPAD).

 
 +i2c1 {
 +clock-frequency = 260;
 +
 +twl: twl@48 {
 +reg = 0x48;
 +interrupts = 7; /* SYS_NIRQ cascaded to intc */
 +interrupt-parent = intc;
 +
 +twl_power: power {
 +compatible = ti,twl4030-power-reset;
 +ti,use_poweroff;
 +};
 +
 +twl_audio: audio {
 +compatible = ti,twl4030-audio;
 +
 +codec {
 +ti,ramp_delay_value = 3;
 +};
 +};
 +};
 +};
 
 Can be done later naturally, but ere you probably want
 ti,twl4030-power-idle or ti,twl4030-power-idle-osc-off
 if the osicllator can be shut down during off-idle.

Good hint. We have to check and test if it can be shut down.
But as said, this is just the beginning of DT support.

 
 +gpmc {
 +ranges = 0 0 0x3000 0x04; /* CS0: NAND */
 
 The ranges here allocate the GPMC partition, so it needs to be
 a minimum of 16MB:
 
   ranges = 0 0 0x3000 0x100,/* CS0: 16MB for NAND */
 
 +nand@0,0 {
 +reg = 0 0 0; /* CS0, offset 0 */
 
 The reg is for the device driver to ioremap it's registers,
 for NAND it's just 4:
 
   reg = 0 0 4;  /* CS0, offset 0, IO size 4 */

Ok, that was a typo and we have not tested how compatible it is to the
board file scheme.

 
 +filesystem@68 {
 +label = rootfs;
 +reg = 0xc8 0; /* 0 = MTDPART_SIZ_FULL */
 +};
 +};
 +};
 
 Is the NAND the same size on all of them?

AFAIK not necessarily.

 I don't think dts
 has a binding for MTDPART_SIZ_FULL type thing..

It does not need a special binding, we just set the size to 0. This
is interpreted as MTDPART_SIZ_FULL later on. For board files,
there is just a #define in include/linux/mtd/partitions.h and it appears
to work.

 
 +lcd: lcd@1 {
 +reg = 1;  /* CS1 */
 +compatible =omapdss,tpo,td043mtea1;
 +spi-max-frequency = 10;
 +spi-cpol;
 +spi-cpha;
 +
 +label = lcd;
 +reset-gpios = gpio5 29 GPIO_ACTIVE_LOW;  /* GPIO_157 */
 +vcc-supply = vaux1;
 +
 +port {
 +lcd_in: endpoint {
 +remote-endpoint = dpi_out;
 +};
 +};
 +};
 
 Oh there's already a binding for the LCD too? That’s great :)

Yes, we were happy to find that the panel driver has already been upgraded
for DT use.

 
 Nine job, good to see this happening!
 
 Regards,
 
 
 Tony

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] input: tsc2007: Add pre-calibration, flipping and rotation

2015-01-15 Thread Dr. H. Nikolaus Schaller

Am 15.01.2015 um 19:16 schrieb Dmitry Torokhov dmitry.torok...@gmail.com:

 On Thu, Jan 15, 2015 at 05:14:38PM +0100, Dr. H. Nikolaus Schaller wrote:
 
 Am 15.01.2015 um 15:38 schrieb Sebastian Reichel s...@kernel.org:
 
 Hi,
 
 On Thu, Jan 15, 2015 at 08:36:44AM +0100, Dr. H. Nikolaus Schaller wrote:
 1. Perform conversion in input core rather than individual drivers. I
 think we should allocate a new bitmaps for some transformations and have
 the code do X/Y flip/clip of the coordinates.
 
 Do you have a suggestion where this should be (I have no clue how
 the input system works or is structured - we just know how to extend a
 driver that uses it)?
 
 2. Standardize on bindings. We already have of-touchscreen.c doing
 rudimentary parsing, we shoudl look into extending it rather than
 creating myriad of driver-specific bindings.
 
 Ok, looks reasonable.
 
 Documentation is in 
 
 Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt
 
 I did look into it now. Unfortunately, it does not fit well into my view of 
 how bindings
 should be. They should describe hardware (as we are told for many other 
 kernel
 subsystems).
 
 Pixels and resolutions are IMHO related to the screen it is glued on - and 
 that is
 quite independent.
 
 Well, I think pixels was the wrong word to be used there. It is meant to
 be native units, as opposed to millimeters, inches, points, etc.

ok.

 
 
 So I don’t see how they do describe the different ways the touch screen can 
 be
 wired to a tsc2007 controller.
 
 Please can you add minimum and maximum properties for us?
 
 Then, inverted-x and inverted-y is redundant because it is the same as having
 an expected higher value from the ADC for the minimum coordinate and a lower
 for the maximum.
 
 I'd rather not add minimum and maximum, but add the touchscreen-start-x and
 touchscreen-start-y instead so that we limit the number of obsolete
 properties.

ok, that should not be too difficult to add.

So we will modify our driver to use the new functions and align 
omap3-gta04.dtsi accordingly.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] input: tsc2007: Add pre-calibration, flipping and rotation

2015-01-15 Thread Dr. H. Nikolaus Schaller
Hi,

Am 15.01.2015 um 15:38 schrieb Sebastian Reichel s...@kernel.org:

 Hi,
 
 On Thu, Jan 15, 2015 at 08:36:44AM +0100, Dr. H. Nikolaus Schaller wrote:
 1. Perform conversion in input core rather than individual drivers. I
 think we should allocate a new bitmaps for some transformations and have
 the code do X/Y flip/clip of the coordinates.
 
 Do you have a suggestion where this should be (I have no clue how
 the input system works or is structured - we just know how to extend a
 driver that uses it)?
 
 2. Standardize on bindings. We already have of-touchscreen.c doing
 rudimentary parsing, we shoudl look into extending it rather than
 creating myriad of driver-specific bindings.
 
 Ok, looks reasonable.
 
 Documentation is in 
 
 Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt
 
 Also, do we need swap and flip or do we simply need rotation (like the
 proposed Broadcom iproc driver has)?
 
 Well, since the DT should describe hardware, there are 3 sets of wires which
 can have a cross-over: X+ and X-, Y+ and Y-, X and Y.
 
 So IMHO hardware has no “rotation”, just crossover of wires. Rotation is an
 interpretation of the result of these connections in combination with some
 panel the touch is glued to and should therefore not be represented in the 
 DT.
 
 As a result we have proposed a scheme without explicit rotation. We specify 
 what
 coordinates X- and X+ should report at their ends (min, max) because the DT
 programmer has to specify them anyways. Flipping is a result of defining 
 these
 coordinates in an ascending or descending way. Only swapping of the X and Y
 wires can’t be implicitly defined so it has its own property. So the scheme 
 we
 have proposed tries to optimize the efforts needed to adapt new boards and 
 write
 DTs and focus the DT on hardware description.
 
 As a bonus we also specify the min and max value to be reported for the touch
 pressure (Z axis) using the same basic principle.
 
 And it is a pure add-on on top of the existing driver so that it attempts not
 to break existing device trees.
 
 from what I can see there are no in-tree-users using any of the
 new properties.

Not yet. But our [patch 2/3] of this series defines the DT entry for the GTA04 
devices:

https://lkml.org/lkml/2014/9/30/663

 
 Maybe could you accept it as a first step for this specific driver (and 
 let’s do
 the big standardization work later on)?
 
 That does not work, since you create an ABI.

Hm. I don’t understand what you mean with creating an ABI?




--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] input: tsc2007: Add pre-calibration, flipping and rotation

2015-01-15 Thread Dr. H. Nikolaus Schaller

Am 15.01.2015 um 15:38 schrieb Sebastian Reichel s...@kernel.org:

 Hi,
 
 On Thu, Jan 15, 2015 at 08:36:44AM +0100, Dr. H. Nikolaus Schaller wrote:
 1. Perform conversion in input core rather than individual drivers. I
 think we should allocate a new bitmaps for some transformations and have
 the code do X/Y flip/clip of the coordinates.
 
 Do you have a suggestion where this should be (I have no clue how
 the input system works or is structured - we just know how to extend a
 driver that uses it)?
 
 2. Standardize on bindings. We already have of-touchscreen.c doing
 rudimentary parsing, we shoudl look into extending it rather than
 creating myriad of driver-specific bindings.
 
 Ok, looks reasonable.
 
 Documentation is in 
 
 Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt

I did look into it now. Unfortunately, it does not fit well into my view of how 
bindings
should be. They should describe hardware (as we are told for many other kernel
subsystems).

Pixels and resolutions are IMHO related to the screen it is glued on - and that 
is
quite independent.

So I don’t see how they do describe the different ways the touch screen can be
wired to a tsc2007 controller.

Please can you add minimum and maximum properties for us?

Then, inverted-x and inverted-y is redundant because it is the same as having
an expected higher value from the ADC for the minimum coordinate and a lower
for the maximum.

 
 Also, do we need swap and flip or do we simply need rotation (like the
 proposed Broadcom iproc driver has)?
 
 Well, since the DT should describe hardware, there are 3 sets of wires which
 can have a cross-over: X+ and X-, Y+ and Y-, X and Y.
 
 So IMHO hardware has no “rotation”, just crossover of wires. Rotation is an
 interpretation of the result of these connections in combination with some
 panel the touch is glued to and should therefore not be represented in the 
 DT.
 
 As a result we have proposed a scheme without explicit rotation. We specify 
 what
 coordinates X- and X+ should report at their ends (min, max) because the DT
 programmer has to specify them anyways. Flipping is a result of defining 
 these
 coordinates in an ascending or descending way. Only swapping of the X and Y
 wires can’t be implicitly defined so it has its own property. So the scheme 
 we
 have proposed tries to optimize the efforts needed to adapt new boards and 
 write
 DTs and focus the DT on hardware description.
 
 As a bonus we also specify the min and max value to be reported for the touch
 pressure (Z axis) using the same basic principle.
 
 And it is a pure add-on on top of the existing driver so that it attempts not
 to break existing device trees.
 
 from what I can see there are no in-tree-users using any of the
 new properties.
 
 Maybe could you accept it as a first step for this specific driver (and 
 let’s do
 the big standardization work later on)?
 
 That does not work, since you create an ABI.
 
 -- Sebastian

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] input: tsc2007: Add pre-calibration, flipping and rotation

2015-01-14 Thread Dr. H. Nikolaus Schaller
Hi,

Am 15.01.2015 um 01:59 schrieb Dmitry Torokhov dmitry.torok...@gmail.com:

 On Sat, Jan 10, 2015 at 03:15:39PM +0100, Belisko Marek wrote:
 Ping for input maintainer. DT changes was acked. Thanks.
 
 On Tue, Sep 30, 2014 at 10:17 PM, Marek Belisko ma...@goldelico.com wrote:
 This patch adds new parameters that allow to address typical hardware
 design differences: touch screens may be wired or oriented differently
 (portrait or landscape). And usually the active area of the touch is a
 little larger than the active area of the LCD. This results in the touch
 coordinates that have some significant deviation from LCD coordinates.
 Usually this is addressed in user space by a calibration tool (e.g. tslib
 or xinput-calibrator) but some systems don't have these tools or require
 that the screen is already roughly calibrated (e.g. Replicant) to operate
 the device until a better calibration can be done. And, some systems
 react very strangely if the touch event stream reports coordinates
 outside of the active area.
 
 This makes it necessry to be able to configure:
 1. swapping x and y wires (coordinate values)
 2. flipping of x (left - right) or y (top - bottom) or even both
 3. define an active area so that an uncalibrated screen already
 roughly matches the LCD to be useful.
 4. clip reported coordinates to the active area.
 
 If none of the new parameters is defined (in DT) or set in a board file,
 the driver behaves the same as without this patch.
 
 Author (12): H. Nikolaus Schaller h...@goldelico.com
 Author (34): Paul Kocialkowski cont...@paulk.fr
 
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 
 OK, I was hesitant of adding these as normally we have tslib to perform
 the conversion, but maybe it is time to allow it in the kernel and
 standardize users.

Well, tslib isn’t a good replacement for this problem any more and
pre-initializing tslib makes some deep hardware dependency visible
in user space (each board needs a different tslib config and pointercal
default - and on some user spaces tslib is broken with Xorg).

But the issue to be solved is more hardware related, i.e. if the Y- and Y+
pins of the controller are connected in a swapped way to the resistor
ends of the panel.

Hence in a DT based system, this must IMHO be described by the DT
and can not be left to some user-space functions any more.

 However, this seems like a general issue and we
 should:
 
 1. Perform conversion in input core rather than individual drivers. I
 think we should allocate a new bitmaps for some transformations and have
 the code do X/Y flip/clip of the coordinates.

Do you have a suggestion where this should be (I have no clue how
the input system works or is structured - we just know how to extend a
driver that uses it)?

 
 2. Standardize on bindings. We already have of-touchscreen.c doing
 rudimentary parsing, we shoudl look into extending it rather than
 creating myriad of driver-specific bindings.

Ok, looks reasonable.

 
 Also, do we need swap and flip or do we simply need rotation (like the
 proposed Broadcom iproc driver has)?

Well, since the DT should describe hardware, there are 3 sets of wires which
can have a cross-over: X+ and X-, Y+ and Y-, X and Y.

So IMHO hardware has no “rotation”, just crossover of wires. Rotation is an
interpretation of the result of these connections in combination with some
panel the touch is glued to and should therefore not be represented in the DT.

As a result we have proposed a scheme without explicit rotation. We specify what
coordinates X- and X+ should report at their ends (min, max) because the DT
programmer has to specify them anyways. Flipping is a result of defining these
coordinates in an ascending or descending way. Only swapping of the X and Y
wires can’t be implicitly defined so it has its own property. So the scheme we
have proposed tries to optimize the efforts needed to adapt new boards and write
DTs and focus the DT on hardware description.

As a bonus we also specify the min and max value to be reported for the touch
pressure (Z axis) using the same basic principle.

And it is a pure add-on on top of the existing driver so that it attempts not
to break existing device trees.

Maybe could you accept it as a first step for this specific driver (and let’s do
the big standardization work later on)?

— hns


--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Gta04-owner] [PATCH 1/2] mmc: core: allow a reset gpio to be configured.

2014-12-01 Thread Dr. H. Nikolaus Schaller
Hi Neil,

Am 02.12.2014 um 02:55 schrieb NeilBrown ne...@suse.de:

 On Fri, 28 Nov 2014 12:56:33 +0100 Ulf Hansson ulf.hans...@linaro.org wrote:
 
 On 8 November 2014 at 01:14, NeilBrown ne...@suse.de wrote:
 If the regulator supplying an SDIO device is shared
 with another device, the turning the regulator 'on' and 'off'
 will not actually cycle power and so will not reset
 the device.
 
 This is particularly a problem for some wi2si wireless modules which
 have a BT module on chip and can share power lines.
 Without the power-cycle, subsequent reset commands fail.
 
 So allow a 'reset' gpio to be specified.  If provided, the
 line is asserted during power-up.
 
 There have been several attempts to fix similar issues as this patch
 does. The latest one I posted a few month ago, which wasn't accepted.
 http://comments.gmane.org/gmane.linux.power-management.general/46635
 
 Thanks for that link.
 
 
 There has also been some off-list discussions on especially how we
 should describe this in DT and there were actually some consensus made
 around that. Still I haven't seen any patches on the mailing lists.
 
 Wish I could have a link for those off-list discussions :-)
 
 Based on what I read and my own thoughts about other devices that I'm having
 trouble managing I wonder if the right approach might be to admit that these
 buses are *not* 100% discoverable.
 
 i.e. you can discover what is there once it is turned on, but you cannot
 discover how to turn it on.

Indeed.

 
 So the *fix* is to allow attached devices to be explicitly listed.
 In my case I would create a child node of the mmc1 node, which is
 compatible=“libertas,wifi (or whatever the proper name is).

Sounds like a good idea to me.

 
 Then when the mmc1 wants to power-up, it does:
 
   device_for_each_child(mmc_dev, NULL, power_up)
 
 where:
 
 static int power_up(struct device *dev, void *data)
 {
   pm_runtime_get_sync(dev);
   return 0;
 }
 
 Then I can put my reset-line management in the libertas driver instead of
 trying to include some of it in the mmc driver.
 
 This has the advantage of the devicetree actually describing the hardware
 (there is a libertas wifi SDIO chip attached) rather than the behaviour
 (please turn on this regulator and toggle this GPIO to initialise the device).
 
 I want to do a very similar thing for UARTs (so my GPS and Bluetooth turn on
 when /dev/ttyO? is opened), and I've been thinking about something similar
 for USB - I have a USB attached GSM module, but it also has an Audio link and
 some reset/interrupt lines that need to be configured.
 If I could say to device tree This USB port has this device attached, I
 think it would be a step in the right direction.

Thinking a little further, it could either be the core driver of the 
device/bus/protocol
or a special driver that only does power management. Or audio.

And we should consider using a list of strings in the compatible entry so that
several drivers can be loaded if the subsystem structure shows that this is 
simpler.

It could be one for power, one for audio. Or in the case of the libertas a 
separate
powerreset driver for a specific chip that uses the libertas driver so that 
chip
specific reset management is not introduced into the libertas core but separate.

For the usb connected modem the subnode to be attached is likely the PHY
where the self-powered device is connected to.

 
 
 
 
 So to summarize, I am really concerned that we keep having these power
 sequence issues for SDIO devices and right now the discussion has been
 on hold. I am considering to hack on it myself, since I am tired of
 waiting. :-)
 
 Please Cc me if you do.  Meanwhile I'll try to hack together code supporting
 my latest idea and let you know if I get anywhere.
 
 
 Regarding this patch, I don't intent to apply it.
 
 Fair enough, I’m starting to not like it so much anyway.
 

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] video: omapdss: Add opa362 driver

2014-11-19 Thread Dr. H. Nikolaus Schaller

Am 13.11.2014 um 17:41 schrieb Tomi Valkeinen tomi.valkei...@ti.com:

 On 13/11/14 18:25, Dr. H. Nikolaus Schaller wrote:
 Hi,
 
 Am 13.11.2014 um 12:51 schrieb Tomi Valkeinen tomi.valkei...@ti.com:
 
 On 13/11/14 00:10, Marek Belisko wrote:
 opa362 is amplifier for video and can be connected to the tvout pads
 of the OMAP3. It has one gpio control for enable/disable of the output
 (high impedance).
 
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 ---
 drivers/video/fbdev/omap2/displays-new/Kconfig |   6 +
 drivers/video/fbdev/omap2/displays-new/Makefile|   1 +
 .../fbdev/omap2/displays-new/amplifier-opa362.c| 343 
 +
 
 I think it would be better to rename this to encoder-opa362.c. It's not
 
 When developing this driver we did simply rename the encoder-tfp410 file,
 but thent hough that it does not fit into the „encoder“ category, because we
 would expect something digital or digital to analog „encoding“ which it does 
 not.
 
 That is true, but we already have other encoders like
 encoder-tpd12s015.c, which also do not encode. encoder in this context
 means something that takes a video input, and has a video output. In
 contrast to a panel or a connector.
 
 +
 +  in-ops.atv-set_timings(in, ddata-timings);
 +  /* fixme: should we receive the invert from our consumer, i.e. the 
 connector? */
 +  in-ops.atv-invert_vid_out_polarity(in, true);
 
 Well this does seem to be broken. I don't know what the answer to the
 question above is, but the code doesn't work properly.
 
 In the opa362_invert_vid_out_polarity function below, you get the invert
 boolean from the connector. This you pass to the OMAP venc. However,
 above you always override that value in venc with true.
 
 So, either the invert_vid_out_polarity value has to be always true or
 false, because _OPA362_ requires it to be true or false, OR you need use
 the value from the connector.
 
 Seeing the comment in opa362_invert_vid_out_polarity, my guess is the
 latter, and the call above should be removed.
 
 Yes, you are right - this is not systematic.
 
 But the problem is that we can’t ask the connector here what it wants
 to see. It might (or might not) call our opa362_invert_vid_out_polarity() 
 later
 which we can then forward to overwrite the inital state of this 
 opa362_enable().
 
 You don't need to ask. The connector calls invert_vid_out_polarity
 before enabling the output.

Unfortunately it doesn’t. At least not always.

It does only for pdata systems but not for DT based systems:

if (!ddata-dev-of_node) {
in-ops.atv-set_type(in, ddata-connector_type);
in-ops.atv-invert_vid_out_polarity(in,
ddata-invert_polarity);
}

Not calling is in our case different from calling with ddata-invert_polarity 
== 0.

 You can just pass it forward inverted, as
 you already do in this driver. If it doesn't, it's either a bug or you
 can just rely on the value that is already programmed to venc.

Therefore it is not called with “false” which would make our 
invert_vid_out_polarity
invert it and send “true” towards the VENC. So VENC remains non-inverted.

We will also add a patch for the connector-analog.c

 We are going to support only DT boot at some point. Thus I think the
 whole platform data code should be left out.
 
 Is there already a decision? I think it should not be done before. And it
 does not harm to still have it.
 
 It's just a matter of time. I don't accept any new boards using platform
 data for display, or new display drivers using platform data, because I
 don't want to spend my time converting them later. And as this is a new
 driver, no existing board can be using the opa362 platform_data. So we
 can support DT only.

Ok, that looks reasonable - as long as we can rely on that all mainline DSS
drivers are already fully converted to DT :)

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] video: omapdss: Add opa362 driver

2014-11-13 Thread Dr. H. Nikolaus Schaller
Hi,

Am 13.11.2014 um 12:51 schrieb Tomi Valkeinen tomi.valkei...@ti.com:

 On 13/11/14 00:10, Marek Belisko wrote:
 opa362 is amplifier for video and can be connected to the tvout pads
 of the OMAP3. It has one gpio control for enable/disable of the output
 (high impedance).
 
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 ---
 drivers/video/fbdev/omap2/displays-new/Kconfig |   6 +
 drivers/video/fbdev/omap2/displays-new/Makefile|   1 +
 .../fbdev/omap2/displays-new/amplifier-opa362.c| 343 
 +
 
 I think it would be better to rename this to encoder-opa362.c. It's not

When developing this driver we did simply rename the encoder-tfp410 file,
but thent hough that it does not fit into the „encoder“ category, because we
would expect something digital or digital to analog „encoding“ which it does 
not.

 encoder as such, but it falls into the same category.

But we can change it.

 
 include/video/omap-panel-data.h|  12 +
 4 files changed, 362 insertions(+)
 create mode 100644 drivers/video/fbdev/omap2/displays-new/amplifier-opa362.c
 
 diff --git a/drivers/video/fbdev/omap2/displays-new/Kconfig 
 b/drivers/video/fbdev/omap2/displays-new/Kconfig
 index e6cfc38..211b3ec 100644
 --- a/drivers/video/fbdev/omap2/displays-new/Kconfig
 +++ b/drivers/video/fbdev/omap2/displays-new/Kconfig
 @@ -1,6 +1,12 @@
 menu OMAP Display Device Drivers (new device model)
 depends on OMAP2_DSS
 
 +config DISPLAY_AMPLIFIER_OPA362
 
 Here also use ENCODER instead.
 
 +tristate external analog amplifier with output disable/high-Z 
 (e.g. OPA362)
 +help
 +  Driver to enable an external analog TV amplifier (e.g. OPA362)
 +  through a GPIO.
 
 The indentation above seems funny.
 
 The text looks a bit odd. So is this a driver for OPA362, or is this a
 generic driver for any similar devices? Most of the names and code makes
 me think this is a driver for OPA362, but the text above quite clearly
 gives the impression that this is a driver for any analog video amp,
 with single enable gpio.

Hm. We can imagine that there are other devices with similar functionality
and gpio but we have not tested any. So it is indeed better to describe it as
a pure OPA362 driver.

 
 +
 config DISPLAY_ENCODER_TFP410
 tristate TFP410 DPI to DVI Encoder
  help
 diff --git a/drivers/video/fbdev/omap2/displays-new/Makefile 
 b/drivers/video/fbdev/omap2/displays-new/Makefile
 index 0323a8a..b311542 100644
 --- a/drivers/video/fbdev/omap2/displays-new/Makefile
 +++ b/drivers/video/fbdev/omap2/displays-new/Makefile
 @@ -1,3 +1,4 @@
 +obj-$(CONFIG_DISPLAY_AMPLIFIER_OPA362) += amplifier-opa362.o
 obj-$(CONFIG_DISPLAY_ENCODER_TFP410) += encoder-tfp410.o
 obj-$(CONFIG_DISPLAY_ENCODER_TPD12S015) += encoder-tpd12s015.o
 obj-$(CONFIG_DISPLAY_CONNECTOR_DVI) += connector-dvi.o
 diff --git a/drivers/video/fbdev/omap2/displays-new/amplifier-opa362.c 
 b/drivers/video/fbdev/omap2/displays-new/amplifier-opa362.c
 new file mode 100644
 index 000..8065a28
 --- /dev/null
 +++ b/drivers/video/fbdev/omap2/displays-new/amplifier-opa362.c
 @@ -0,0 +1,343 @@
 +/*
 + * OPA362 analog video amplifier with output/power control
 + *
 + * Copyright (C) 2014 Golden Delicious Computers
 + * Author: H. Nikolaus Schaller h...@goldelico.com
 + *
 + * based on encoder-tfp410
 + *
 + * Copyright (C) 2013 Texas Instruments
 + * Author: Tomi Valkeinen tomi.valkei...@ti.com
 + *
 + * This program is free software; you can redistribute it and/or modify it
 + * under the terms of the GNU General Public License version 2 as published 
 by
 + * the Free Software Foundation.
 + */
 +
 +#include linux/gpio.h
 +#include linux/module.h
 +#include linux/platform_device.h
 +#include linux/slab.h
 +#include linux/of_gpio.h
 +
 +#include video/omapdss.h
 +#include video/omap-panel-data.h
 +
 +struct panel_drv_data {
 +struct omap_dss_device dssdev;
 +struct omap_dss_device *in;
 +
 +int enable_gpio;
 +
 +struct omap_video_timings timings;
 +};
 +
 +#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev)
 +
 +static int opa362_connect(struct omap_dss_device *dssdev,
 +struct omap_dss_device *dst)
 +{
 +struct panel_drv_data *ddata = to_panel_data(dssdev);
 +struct omap_dss_device *in = ddata-in;
 +int r;
 +
 +dev_dbg(dssdev-dev, connect\n);
 +
 +if (omapdss_device_is_connected(dssdev))
 +return -EBUSY;
 +
 +r = in-ops.atv-connect(in, dssdev);
 +if (r)
 +return r;
 +
 +dst-src = dssdev;
 +dssdev-dst = dst;
 +
 +return 0;
 +}
 +
 +static void opa362_disconnect(struct omap_dss_device *dssdev,
 +struct omap_dss_device *dst)
 +{
 +struct panel_drv_data *ddata = to_panel_data(dssdev);
 +struct omap_dss_device *in = ddata-in;
 +
 +dev_dbg(dssdev-dev, disconnect\n);
 +
 +WARN_ON(!omapdss_device_is_connected(dssdev));
 +if (!omapdss_device_is_connected(dssdev))
 +

Re: [Gta04-owner] [PATCH 2/3] ASoC: twl4030: allow voice port to be connected externally.

2014-11-09 Thread Dr. H. Nikolaus Schaller

Am 10.11.2014 um 00:25 schrieb NeilBrown ne...@suse.de:

 On Sat, 8 Nov 2014 09:26:22 + Mark Brown broo...@kernel.org wrote:
 
 On Sat, Nov 08, 2014 at 11:38:03AM +1100, NeilBrown wrote:
 
 If voice port on twl4030 is not connected to a McBSP (or similar)
 then we cannot configure the format the way we normally do for a DAI.
 
 Yes we can, you need to represent the DAI link to whatever else the
 device is connected to in the driver like we do anything else - and in
 any case this isn't a device specific issue so we shouldn't be doing
 something driver specific to solve it.  Look at something like speyside.
 
 Hi Mark,
 thanks for the reply ... I might need a little bit more help though.
 
 I had a look at sound/soc/samsung/speyside.c, but I'm not entirely sure what
 I'm looking for.
 Presumably this is an audio processor not unlike the audio module in the
 twl4030.
 
 I see that there are 3 dai-links:
  CPU-DSP
  DSP-CODEC
  Baseband
 
 Presumably Baseband is similar, in purpose at least, to the voice
 interface on the twl4030.
 
 Each dai-link has a cpu_dai_name and a codec_dai_name, even though it
 appears that only CPU-DSP is connected to the CPU.  Maybe that naming is
 the source of some of my confusion.
 
 Baseband declares
.cpu_dai_name = wm8996-aif2,
 so wm8996 is something with 2 audio interfaces, (aif), and this is the second
 one?  Maybe the  wm8996 is the audio module, so what is the speyside?
 
 http://opensource.wolfsonmicro.com/content/speyside-audio
 
 says it is a reference platform.  Does that mean it is a board with a bunch
 of chips soldered onto it?  If it were a board it should be described by a
 dts file, not by a pile of C code (I thought), so I must be wrong about that.
 
 
 In my case, I have a board with a GSM module and the twl4030 module.  Each
 has an audio interface and these are connected.  I assume that I need to
 express this connection in the dts file.
 The GSM module doesn't currently appear in the dts file as it is usb-attached.
 However I've been thinking that we will need to add it so we can express
 power-on controls (twiddling some GPIOs).  So let's suppose we have the GSM
 module in the dts file (child of a USB interface)

It is a quite complex connection pattern and I am not sure if the modem is 
really
a logical child of the USB interface. Powering up/down the USB interface has 
nothing
to do with the modem power. Rather, it continues to operate if USB is suspended
and the modem notifies USB that it has become active.

The connections on this GTA04 board are:

Modem USB — CPU USB
Modem PCM — TWL4030 Voice — OMAP3 McBSP4 (yes, it is a 3-way connection)
Modem Power control — 1 or 2 GPIOs (depending on board variant)

The reason for the 3-way connection is that user space can chose if the GSM
voice is routed directly to the TWL codec (low latency, independent of CPU) or
goes through the CPU (e.g. for DTAM or voice scrambling by software) and
then through the other PCM link between the CPU and the TWL.

This is why I would make the McBSP4 a separate sound card.

And, this is why it needs some control and tri-state of the TWL4030 and OMAP3
McBSP4 since only one can provide a digital PCM stream to the modem.

One more thing to consider for a general solution is that there are modem 
modules
that communicate data through UART or SPI - but otherwise have a similar 
connection
for digital audio. So forcing the power control driver to be a subnode of USB 
doesn’t
appear general enough to me.

Finally, this connection pattern is not specific to this modem (OPTION GTM601) 
on this
GTA04 board. We plan to use a Gemalto PHS8  in the Pyra-Handheld and the Neo900
devices - but the general connection pattern as defined above remains the same.

So my proposal is to have a specific wwan-power driver for this type of modems.
And power control can and should be kept separately from USB (except the case
where only 1 GPIO exists and USB must be tapped to detect the modem power
state). You can find work in progress for this approach here:

http://git.goldelico.com/?p=gta04-kernel.git;a=blob;f=drivers/misc/wwan-on-off.c;h=e13f47dbd734d14f4e38ea9cf622982dc3550212;hb=154bcd388a8f5bcc7fcf0e57e93b6388daa16980

 and the twl4030 as well
 (beneath an i2c interface).
 
 The twl4030 needs to know the master/polarity of the clk/frm lines.  The GSM
 module declares that these are.  So presumably we need some sort of linkage.
 A... I found Documentation/devicetree/bindings/sound/simple-card.txt
 
 So I need to make the voice port on the twl4030 look like a cpu end of a
 dai-link, and create a codec end in the GSM module, and use sound-dai to
 point from the twl4030 to the GSM module.

What I wonder a little is that we have all these dai-links working since your 
3.7
kernel for GTA04. Is it necessary to re-invent a solution or should we just make
the solution device tree compatible?

 Then I use frame-master, bitclock-master, bitclock-inversion, frame-inversion
 for the 

Re: [PATCH 2/2] Documentation: devicetree: Add bindings for Wi2Wi w2sg0004 gps

2014-11-02 Thread Dr. H. Nikolaus Schaller
ping (questions for directions at the end of the mail).

Am 24.10.2014 um 11:32 schrieb Dr. H. Nikolaus Schaller h...@goldelico.com:

 
 Am 20.10.2014 um 19:26 schrieb Dr. H. Nikolaus Schaller h...@goldelico.com:
 
 Hi,
 
 Am 20.10.2014 um 11:35 schrieb Mark Rutland mark.rutl...@arm.com:
 
 Hi,
 
 On Fri, Oct 17, 2014 at 08:55:50PM +0100, Dr. H. Nikolaus Schaller wrote:
 
 Am 17.10.2014 um 13:00 schrieb Mark Rutland mark.rutl...@arm.com:
 
 On Fri, Oct 17, 2014 at 11:16:42AM +0100, Dr. H. Nikolaus Schaller wrote:
 
 Am 17.10.2014 um 11:37 schrieb Mark Rutland mark.rutl...@arm.com:
 
 On Thu, Oct 16, 2014 at 09:26:23PM +0100, Marek Belisko wrote:
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../devicetree/bindings/misc/wi2wi,w2sg0004.txt| 44 
 ++
 1 file changed, 44 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 
 diff --git a/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt 
 b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 new file mode 100644
 index 000..e11
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 @@ -0,0 +1,44 @@
 +Wi2Wi GPS module connected through UART
 +
 +Required properties:
 +- compatible: wi2wi,w2sg0004 or wi2wi,w2sg0084
 +- pinctrl: specify two states (default and monitor). One is the 
 default (UART) mode
 +  and the other is for monitoring the RX line by an interrupt
 +- on-off-gpio: the GPIO that controls the module's on-off toggle input
 +
 +Optional properties:
 +- lna-suppy: an (optional) LNA regulator that is enabled together 
 with the GPS receiver
 +
 +example:
 +
 +gps_receiver: w2sg0004 {
 +compatible = wi2wi,w2sg0004;
 
 I couldn't spot wi2wi in
 Documentation/devicetree/bindings/vendor-prefixes.txt (in mainline).
 
 Could you please add it?
 
 +gpio-controller;
 +#gpio-cells = 2;
 
 As far as I can see, these properties aren't necessary. This only
 consumes a GPIO, it doesn't provide any.
 
 Well, it provides one GPIO. Sort of a virtual“ GPIO. It is needed so 
 that 
 it can be wired up to the DTR gpio of the UART driver (unfortunately this
 patch was reverted some months ago from mainline and we will reintroduce
 it soon).
 
 If this GPIO doesn't really exist, then it's a Linux internal
 implementation detail rather than a description of the hardware, and
 doesn't really belong in the DT.
 
 Hm. 
 
 Let’s describe it differently.
 
 I can see the Linux driver module as a simple software simulation for a
 piece of hardware that could have been connected between the UART
 and the GPS chip.
 
 Basically it is a pulse-generator and a flip-flop to detect data flow on 
 the RX
 wire. This could be implemented by an external FPGA or uController. Or as
 it is done on our board for saving hardware by a mix of the main CPU 
 hardware
 (Pinmux + GPIO + IRQ) and a kernel driver.
 
 The best of course would have been if the w2sg0004 would have a physical
 „enable“ GPIO (instead of that on-off control input).
 
 Then we would hook up that enable to some physical GPIO of the CPU
 and simply refer to it as e.g. gpio4 12. And would not even need a 
 driver
 for it (unless we want to make rfkill gps work).
 
 Therefore the driver we suggest provides an additional gpio controller 
 with a
 single GPIO so that we can write w2sg 0 to refer to this virtual gpio.
 
 So in fact we try to wrap a non-optimal chip design by the driver and make 
 it
 appear as a standard GPIO interface to the DT and user space and whoever
 needs simply to enable/disable the GPS chip.
 
 The fact remains that this does not accurately represent the hardware,
 and is unnecessarily strongly tied to a particular UART design (where
 the DTR line is a separate UART).
 
 I don’t get that it is tied to a particular UART design (except that our DTR
 patch affects to omap-serial only).
 
 Let’s describe the facts:
 
 The chip has this interface:
 
 GPS-TX (output)
 GPS-RX (input)
 ON/OFF (input) - to toggle the power state of the chip
 
 They are connected to an OMAP3 UART2 as
 
 UART2-TX  GPS-RX
 UART2-RX - GPS-TX
 GPIO145 - ON/OFF
 
 That’s it.
 
 If the chip (or any other serial GPS receiver like a Garmin) were connected
 through real RS232 we would have
 
 UART2-TX - level shifter - cable - level shifter - GPS-RX
 UART2-RX - level shifter - cable - level shifter - GPS-TX
 DTR-GPIO - level shifter (DTR line) - cable - level shifter - 
 power-management logic - ON/OFF
 
 But because it is connected directly, we need to implement the 
 power-management
 logic between the DTR-GPIO and GPIO145:
 
 DTR-GPIO - driver - GPIO145 - ON/OFF
 
 To correctly determine the state we need to tap the RX signal before
 it enters the UART2-RX (it is pinmuxed with GPIO147):
 
 UART2-RX ——+
  OMAP3 pinmux - OMAP3 pad - GPS-TX
  GPIO147 ——+
 
 So if we describe

Re: [PATCH 2/2] Documentation: devicetree: Add bindings for Wi2Wi w2sg0004 gps

2014-10-24 Thread Dr. H. Nikolaus Schaller

Am 20.10.2014 um 19:26 schrieb Dr. H. Nikolaus Schaller h...@goldelico.com:

 Hi,
 
 Am 20.10.2014 um 11:35 schrieb Mark Rutland mark.rutl...@arm.com:
 
 Hi,
 
 On Fri, Oct 17, 2014 at 08:55:50PM +0100, Dr. H. Nikolaus Schaller wrote:
 
 Am 17.10.2014 um 13:00 schrieb Mark Rutland mark.rutl...@arm.com:
 
 On Fri, Oct 17, 2014 at 11:16:42AM +0100, Dr. H. Nikolaus Schaller wrote:
 
 Am 17.10.2014 um 11:37 schrieb Mark Rutland mark.rutl...@arm.com:
 
 On Thu, Oct 16, 2014 at 09:26:23PM +0100, Marek Belisko wrote:
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../devicetree/bindings/misc/wi2wi,w2sg0004.txt| 44 
 ++
 1 file changed, 44 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 
 diff --git a/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt 
 b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 new file mode 100644
 index 000..e11
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 @@ -0,0 +1,44 @@
 +Wi2Wi GPS module connected through UART
 +
 +Required properties:
 +- compatible: wi2wi,w2sg0004 or wi2wi,w2sg0084
 +- pinctrl: specify two states (default and monitor). One is the 
 default (UART) mode
 +  and the other is for monitoring the RX line by an interrupt
 +- on-off-gpio: the GPIO that controls the module's on-off toggle input
 +
 +Optional properties:
 +- lna-suppy: an (optional) LNA regulator that is enabled together with 
 the GPS receiver
 +
 +example:
 +
 +gps_receiver: w2sg0004 {
 +compatible = wi2wi,w2sg0004;
 
 I couldn't spot wi2wi in
 Documentation/devicetree/bindings/vendor-prefixes.txt (in mainline).
 
 Could you please add it?
 
 +gpio-controller;
 +#gpio-cells = 2;
 
 As far as I can see, these properties aren't necessary. This only
 consumes a GPIO, it doesn't provide any.
 
 Well, it provides one GPIO. Sort of a virtual“ GPIO. It is needed so 
 that 
 it can be wired up to the DTR gpio of the UART driver (unfortunately this
 patch was reverted some months ago from mainline and we will reintroduce
 it soon).
 
 If this GPIO doesn't really exist, then it's a Linux internal
 implementation detail rather than a description of the hardware, and
 doesn't really belong in the DT.
 
 Hm. 
 
 Let’s describe it differently.
 
 I can see the Linux driver module as a simple software simulation for a
 piece of hardware that could have been connected between the UART
 and the GPS chip.
 
 Basically it is a pulse-generator and a flip-flop to detect data flow on 
 the RX
 wire. This could be implemented by an external FPGA or uController. Or as
 it is done on our board for saving hardware by a mix of the main CPU 
 hardware
 (Pinmux + GPIO + IRQ) and a kernel driver.
 
 The best of course would have been if the w2sg0004 would have a physical
 „enable“ GPIO (instead of that on-off control input).
 
 Then we would hook up that enable to some physical GPIO of the CPU
 and simply refer to it as e.g. gpio4 12. And would not even need a driver
 for it (unless we want to make rfkill gps work).
 
 Therefore the driver we suggest provides an additional gpio controller with 
 a
 single GPIO so that we can write w2sg 0 to refer to this virtual gpio.
 
 So in fact we try to wrap a non-optimal chip design by the driver and make 
 it
 appear as a standard GPIO interface to the DT and user space and whoever
 needs simply to enable/disable the GPS chip.
 
 The fact remains that this does not accurately represent the hardware,
 and is unnecessarily strongly tied to a particular UART design (where
 the DTR line is a separate UART).
 
 I don’t get that it is tied to a particular UART design (except that our DTR
 patch affects to omap-serial only).
 
 Let’s describe the facts:
 
 The chip has this interface:
 
 GPS-TX (output)
 GPS-RX (input)
 ON/OFF (input) - to toggle the power state of the chip
 
 They are connected to an OMAP3 UART2 as
 
 UART2-TX  GPS-RX
 UART2-RX - GPS-TX
 GPIO145 - ON/OFF
 
 That’s it.
 
 If the chip (or any other serial GPS receiver like a Garmin) were connected
 through real RS232 we would have
 
 UART2-TX - level shifter - cable - level shifter - GPS-RX
 UART2-RX - level shifter - cable - level shifter - GPS-TX
 DTR-GPIO - level shifter (DTR line) - cable - level shifter - 
 power-management logic - ON/OFF
 
 But because it is connected directly, we need to implement the 
 power-management
 logic between the DTR-GPIO and GPIO145:
 
 DTR-GPIO - driver - GPIO145 - ON/OFF
 
 To correctly determine the state we need to tap the RX signal before
 it enters the UART2-RX (it is pinmuxed with GPIO147):
 
 UART2-RX ——+
   OMAP3 pinmux - OMAP3 pad - GPS-TX
   GPIO147 ——+
 
 So if we describe the driver as a box we have
 
 inputs from user space:
 * rfkill for GPS
 * a control that is activated by opening /dev/tty
 
 outputs

Re: [PATCH 1/2] misc: Add Wi2Wi w2sc0004 gps driver

2014-10-22 Thread Dr. H. Nikolaus Schaller
Hi,

Am 21.10.2014 um 12:49 schrieb Pavel Machek pa...@ucw.cz:

 Hi!
 
 --- a/drivers/misc/Kconfig
 +++ b/drivers/misc/Kconfig
 @@ -515,6 +515,16 @@ config VEXPRESS_SYSCFG
bus. System Configuration interface is one of the possible means
of generating transactions on this bus.
 
 +config W2SG0004
 +tristate W2SG0004 on/off control
 
   ~~ insert GPS here.

ok!

 And make it bool if it can’t be a module.
 
 +depends on GPIOLIB
 +help
 +  Enable on/off control of W2SG0004 GPS using a virtual GPIO.
 +  The virtual GPIO can be connected to a DTR line of a serial
 +  interface to allow powering up if the /dev/tty$n is opened.
 +  It also provides a rfkill gps node to control the LNA power.
 +  NOTE: can’t currently be compiled as module, so please choose Y.

Sorry, this is a bug in the description that was coorect before using the 
pinctrl
framework. The driver has been tested to work compiled as a module.

 +
 
 +++ b/drivers/misc/w2sg0004.c
 @@ -0,0 +1,512 @@
 +/*
 + * w2sg0004.c
 + * Virtual GPIO of controlling the w2sg0004 GPS receiver.
 + *
 + * Copyright (C) 2011 Neil Brown n...@brown.name
 + *
 + * This receiver has an ON/OFF pin which must be toggled to
 + * turn the device 'on' or 'off'.  A high-low-high toggle
 + * will switch the device on if it is off, and off if it is on.
 + * It is not possible to directly detect the state of the device.
 + * However when it is on it will send characters on a UART line
 + * regularly.
 + * On the OMAP3, the UART line can also be programmed as a GPIO
 + * on which we can receive interrupts.
 + * So when we want the device to be 'off' we can reprogram
 + * the line, toggle the ON/OFF pin and hope that it is off.
 + * However if an interrupt arrives we know that it is really on
 + * and can toggle again.
 + *
 + * To enable receiving on/off requests we create a gpio_chip
 + * with a single 'output' GPIO.  When it is low, the
 + * GPS is turned off.  When it is high, it is turned on.
 + * This can be configured as the DTR GPIO on the UART which
 + * connects the GPS.  Then whenever the tty is open, the GPS
 + * will be switched on, and whenever it is closed, the GPS will
 + * be switched off.
 + *
 + * In addition we register as a rfkill client so that we can
 + * control the LNA power.
 + *
 + */
 
 GPL?
 
 +/*
 + * There seems to restrictions on how quickly we can toggle the
 + * on/off line.  data sheets says two rtc ticks, whatever that means.
 
 “seems to?

- “seems to be”

 data - Data?

ok!

 
 +enum w2sg_state {
 +W2SG_IDLE,  /* is not changing state */
 +W2SG_PULSE, /* activate on/off impulse */
 +W2SG_NOPULSE/* desctivate on/off impulse */
 +};
 
 deactivate.

ok.

 
 +
 +struct gpio_w2sg {
 +struct  rfkill *rf_kill;
 +struct  regulator *lna_regulator;
 +int lna_blocked;/* rfkill block gps active */
 +int lna_is_off; /* LNA is currently off */
 +int is_on;  /* current state (0/1) */
 +unsigned long   last_toggle;
 +unsigned long   backoff;/* time to wait since last_toggle */
 +int on_off_gpio;
 +int rx_irq;
 +
 +struct pinctrl *p;
 +struct pinctrl_state *default_state;/* should be UART mode */
 +struct pinctrl_state *monitor_state;/* monitor RX as GPIO */
 +enum w2sg_state state;
 +int requested;  /* requested state (0/1) */
 +int suspended;
 +int rx_redirected;
 +spinlock_t  lock;
 +#ifdef CONFIG_GPIOLIB
 +struct gpio_chip gpio;
 +const char  *gpio_name[1];
 +#endif
 
 Depends on gpiolib, why ifdef?

historic…

 
 Array of names?

Yes, that is how it should be defined (usually gpio_chips have more than 1 
entry).
Otherwise we have to provide some  operators when passing to the gpiolib 
functions
where all other similar drivers simply use the array name. So it is a matter of 
taste
where we need to introduce confusion. AFAIK the compiler generated binary code
should be identical.

 
 
 +rf_kill = rfkill_alloc(GPS, pdev-dev, RFKILL_TYPE_GPS,
 +gpio_w2sg0004_rfkill_ops, gw2sg);
 
 Actually, is rfkill interface right one on GPS? GPS is not supposed to
 transmit…

We have not invented RFKILL_TYPE_GPS. We just use it.
And AFAIK no system that transmits GPS runs Linux.

The function here is to stop it from receiving (and allows to power down
any RF amplifiers and active antennas)…

 
 +int gpio_base;  /* (not used by DT) - defines the  gpio.base */
 
 
 Is non-device tree path still usefull?

Probably not. At least we don’t need it in our projects any more.

 
   Pavel

BR,
Nikolaus


--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  

Re: [PATCH 2/2] Documentation: devicetree: Add bindings for Wi2Wi w2sg0004 gps

2014-10-20 Thread Dr. H. Nikolaus Schaller
Hi,

Am 20.10.2014 um 11:35 schrieb Mark Rutland mark.rutl...@arm.com:

 Hi,
 
 On Fri, Oct 17, 2014 at 08:55:50PM +0100, Dr. H. Nikolaus Schaller wrote:
 
 Am 17.10.2014 um 13:00 schrieb Mark Rutland mark.rutl...@arm.com:
 
 On Fri, Oct 17, 2014 at 11:16:42AM +0100, Dr. H. Nikolaus Schaller wrote:
 
 Am 17.10.2014 um 11:37 schrieb Mark Rutland mark.rutl...@arm.com:
 
 On Thu, Oct 16, 2014 at 09:26:23PM +0100, Marek Belisko wrote:
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../devicetree/bindings/misc/wi2wi,w2sg0004.txt| 44 
 ++
 1 file changed, 44 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 
 diff --git a/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt 
 b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 new file mode 100644
 index 000..e11
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 @@ -0,0 +1,44 @@
 +Wi2Wi GPS module connected through UART
 +
 +Required properties:
 +- compatible: wi2wi,w2sg0004 or wi2wi,w2sg0084
 +- pinctrl: specify two states (default and monitor). One is the default 
 (UART) mode
 +  and the other is for monitoring the RX line by an interrupt
 +- on-off-gpio: the GPIO that controls the module's on-off toggle input
 +
 +Optional properties:
 +- lna-suppy: an (optional) LNA regulator that is enabled together with 
 the GPS receiver
 +
 +example:
 +
 +gps_receiver: w2sg0004 {
 +compatible = wi2wi,w2sg0004;
 
 I couldn't spot wi2wi in
 Documentation/devicetree/bindings/vendor-prefixes.txt (in mainline).
 
 Could you please add it?
 
 +gpio-controller;
 +#gpio-cells = 2;
 
 As far as I can see, these properties aren't necessary. This only
 consumes a GPIO, it doesn't provide any.
 
 Well, it provides one GPIO. Sort of a virtual“ GPIO. It is needed so that 
 it can be wired up to the DTR gpio of the UART driver (unfortunately this
 patch was reverted some months ago from mainline and we will reintroduce
 it soon).
 
 If this GPIO doesn't really exist, then it's a Linux internal
 implementation detail rather than a description of the hardware, and
 doesn't really belong in the DT.
 
 Hm. 
 
 Let’s describe it differently.
 
 I can see the Linux driver module as a simple software simulation for a
 piece of hardware that could have been connected between the UART
 and the GPS chip.
 
 Basically it is a pulse-generator and a flip-flop to detect data flow on the 
 RX
 wire. This could be implemented by an external FPGA or uController. Or as
 it is done on our board for saving hardware by a mix of the main CPU hardware
 (Pinmux + GPIO + IRQ) and a kernel driver.
 
 The best of course would have been if the w2sg0004 would have a physical
 „enable“ GPIO (instead of that on-off control input).
 
 Then we would hook up that enable to some physical GPIO of the CPU
 and simply refer to it as e.g. gpio4 12. And would not even need a driver
 for it (unless we want to make rfkill gps work).
 
 Therefore the driver we suggest provides an additional gpio controller with a
 single GPIO so that we can write w2sg 0 to refer to this virtual gpio.
 
 So in fact we try to wrap a non-optimal chip design by the driver and make it
 appear as a standard GPIO interface to the DT and user space and whoever
 needs simply to enable/disable the GPS chip.
 
 The fact remains that this does not accurately represent the hardware,
 and is unnecessarily strongly tied to a particular UART design (where
 the DTR line is a separate UART).

I don’t get that it is tied to a particular UART design (except that our DTR
patch affects to omap-serial only).

Let’s describe the facts:

The chip has this interface:

GPS-TX (output)
GPS-RX (input)
ON/OFF (input) - to toggle the power state of the chip

They are connected to an OMAP3 UART2 as

UART2-TX  GPS-RX
UART2-RX - GPS-TX
GPIO145 - ON/OFF

That’s it.

If the chip (or any other serial GPS receiver like a Garmin) were connected
through real RS232 we would have

UART2-TX - level shifter - cable - level shifter - GPS-RX
UART2-RX - level shifter - cable - level shifter - GPS-TX
DTR-GPIO - level shifter (DTR line) - cable - level shifter - 
power-management logic - ON/OFF

But because it is connected directly, we need to implement the power-management
logic between the DTR-GPIO and GPIO145:

DTR-GPIO - driver - GPIO145 - ON/OFF

To correctly determine the state we need to tap the RX signal before
it enters the UART2-RX (it is pinmuxed with GPIO147):

UART2-RX ——+
   OMAP3 pinmux - OMAP3 pad - GPS-TX
   GPIO147 ——+

So if we describe the driver as a box we have

inputs from user space:
* rfkill for GPS
* a control that is activated by opening /dev/tty

outputs to system:
* a control to switch the pinmux between RX and GPIO (interrupt)
* a control to external hardware

 
 It sounds like what we actually

Re: [PATCH 1/2] misc: Add Wi2Wi w2sc0004 gps driver

2014-10-19 Thread Dr. H. Nikolaus Schaller
Hi,

Am 19.10.2014 um 21:51 schrieb Arnd Bergmann a...@arndb.de:

 On Thursday 16 October 2014 22:26:22 Marek Belisko wrote:
 This is a driver for the Wi2Wi GPS modules connected through an UART.
 The tricky part is that the module is turned on or off by an impulse
 on the control line - but it is only possible to get the real state by 
 monitoring
 the UART RX input. Since the kernel can't know in which status the module
 is brought e.g. by a boot loader or after suspend, we need some logic to 
 handle
 this.
 
 The driver allows two different methods to enable (and power up) GPS:
 a) through rfkill
 b) as a GPIO
 
 The GPIO enable can be plumbed to other drivers that expect to be able to 
 control
 a GPIO. On the GTA04 board this is the DTR-gpio of the connected UART so that
 opening the UART device enables the receiver and closing it shuts the 
 receiver down.
 
 Original implementation by Neil Brown, fixes + DT bindings by H. Nikolaus 
 Schaller
 
 I’m not sure if this is a good way to model the device.

It is the easiest way we have found after ca. 2 years of working on it :)

 You say that it's
 connected to a UART, but the code itself has no reference to the tty layer
 at all.

Yes.

 I assume the actual driver is in user space and it would open the
 UART and this control device as separate instances handles and then try
 to coordinate them. Is that right?

Yes, it is called gpsd.

 
 What is the protocol for the GPS driver itself? Is it standardized?

Yes, NMEA records. Like most GPS receivers provide them.

 Would it help to have a TTY line discipline for the GPS mode instead
 so the power management and startup could be integrated into the serial
 port management instead?

I don’t think line disciplines (as far as I understand them) are helpful and
this chip is not special at all regarding the serial interface data. So it 
needs no
“GPS mode”.

It is very similar to connecting some external handheld GPS receiver by a
RS232 cable or RS232-USB adapter. Or GPS “mouse” receivers through
bluetooth.

They all create/show some /dev/tty that you simply open/read/close. And
there is no special processing of the serial data involved.

The only thing this driver needs to solve is to properly power up/down
the chip on demand.

The DTR line of the tty can enable/disable power of a connected device
(being an external modem or this GPS chip). This is what we have made
the driver compatible to by providing a virtual GPIO to enable/disable.

This is done by a patch to the tty driver that already was in the kernel
but removed in 3.15 because the w2sg driver wasn’t submitted at that
time.

Commit: 985bfd54c826c0ba873ca0adfd5589263e0c6ee2

Basically, if our CPU would have a real RS232 interface and we would
put the chip into an external device, it should look exactly the same if
we look at the serial interface part. Since soldering it on the same PCB
or connecting through a connector should not need different serial drivers.
Just different device tree files.

Therefore we have decided not to touch any serial driver code at all,
because it is not needed (except allowing DTR to control some GPIO)
and keeps it simple and manageable.

BR,
Nikolaus


--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] Documentation: devicetree: Add bindings for Wi2Wi w2sg0004 gps

2014-10-17 Thread Dr. H. Nikolaus Schaller

Am 17.10.2014 um 11:37 schrieb Mark Rutland mark.rutl...@arm.com:

 On Thu, Oct 16, 2014 at 09:26:23PM +0100, Marek Belisko wrote:
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../devicetree/bindings/misc/wi2wi,w2sg0004.txt| 44 
 ++
 1 file changed, 44 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 
 diff --git a/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt 
 b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 new file mode 100644
 index 000..e11
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 @@ -0,0 +1,44 @@
 +Wi2Wi GPS module connected through UART
 +
 +Required properties:
 +- compatible: wi2wi,w2sg0004 or wi2wi,w2sg0084
 +- pinctrl: specify two states (default and monitor). One is the default 
 (UART) mode
 +  and the other is for monitoring the RX line by an interrupt
 +- on-off-gpio: the GPIO that controls the module's on-off toggle input
 +
 +Optional properties:
 +- lna-suppy: an (optional) LNA regulator that is enabled together with the 
 GPS receiver
 +
 +example:
 +
 +gps_receiver: w2sg0004 {
 +compatible = wi2wi,w2sg0004;
 
 I couldn't spot wi2wi in
 Documentation/devicetree/bindings/vendor-prefixes.txt (in mainline).
 
 Could you please add it?
 
 +gpio-controller;
 +#gpio-cells = 2;
 
 As far as I can see, these properties aren't necessary. This only
 consumes a GPIO, it doesn't provide any.

Well, it provides one GPIO. Sort of a virtual“ GPIO. It is needed so that 
it can be wired up to the DTR gpio of the UART driver (unfortunately this
patch was reverted some months ago from mainline and we will reintroduce
it soon).

The reason to solve it that way is that we did not want to have a direct link
between this driver and any serial drivers or other mechanisms how drivers
can detect that their serial port (/dev/tty*) is opened.

It is used to power down the w2sg GPS chip if no user space process is
accessing its serial port (or de-asserts DTR through tcsetattr/ioctl).

 
 +
 +pinctrl-names = default, monitor;
 +pinctrl-0 = uart2_pins;
 +pinctrl-1 = uart2_rx_irq_pins;
 +
 +interrupt-parent = gpio5;
 +interrupts = 19 IRQ_TYPE_EDGE_FALLING;  /* GPIO_147: RX - 
 trigger on arrival of start bit */
 
 While interrupts is a standard property, please describe above how many
 you expect and what their logical function is.
 
 The only part I'm confused about is how the link to the UART is
 described. I assume I'm just ignorant of some existing pattern.

The serial link itself is not described at all because it is assumed to be a 
„must have“.
The driver only needs to monitor the RX line and needs to switch it between 
UART and
GPIO/IRQ mode. So this monitoring switch is described (with two different 
pinctrl states).

We know that it is a little tricky to control this chip correctly - and we 
think this solution
is the most general (no direct dependency on the serial line, and just to 
pinmux states
and an interrupt).

 
 Otherwise this looks ok.
 
 Thanks,
 Mark.

Thanks as well,
Nikolaus

 
 +lna-supply = vsim;   /* LNA regulator */
 +on-off-gpio = gpio5 17 0;/* GPIO_145: trigger 
 for turning on/off w2sg0004 */
 +
 +pinmux {
 +
 +uart2_pins: pinmux_uart2_pins {
 +pinctrl-single,pins = 
 +0x14a (PIN_INPUT | MUX_MODE0)   /* 
 uart2_tx.uart2_rx */
 +0x148 (PIN_OUTPUT | MUX_MODE0)  /* 
 uart2_tx.uart2_tx */
 +;
 +};
 +
 +uart2_rx_irq_pins: pinmux_uart2_rx_irq_pins {
 +pinctrl-single,pins = 
 +/* switch RX to GPIO so that we can get interrupts by 
 the start bit */
 +0x14a (PIN_INPUT | MUX_MODE4)   /* 
 uart2_tx.uart2_rx */
 +;
 +};
 +
 +}
 -- 
 1.9.1

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] Documentation: devicetree: Add bindings for Wi2Wi w2sg0004 gps

2014-10-17 Thread Dr. H. Nikolaus Schaller

Am 17.10.2014 um 13:00 schrieb Mark Rutland mark.rutl...@arm.com:

 On Fri, Oct 17, 2014 at 11:16:42AM +0100, Dr. H. Nikolaus Schaller wrote:
 
 Am 17.10.2014 um 11:37 schrieb Mark Rutland mark.rutl...@arm.com:
 
 On Thu, Oct 16, 2014 at 09:26:23PM +0100, Marek Belisko wrote:
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 Signed-off-by: Marek Belisko ma...@goldelico.com
 ---
 .../devicetree/bindings/misc/wi2wi,w2sg0004.txt| 44 
 ++
 1 file changed, 44 insertions(+)
 create mode 100644 
 Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 
 diff --git a/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt 
 b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 new file mode 100644
 index 000..e11
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/misc/wi2wi,w2sg0004.txt
 @@ -0,0 +1,44 @@
 +Wi2Wi GPS module connected through UART
 +
 +Required properties:
 +- compatible: wi2wi,w2sg0004 or wi2wi,w2sg0084
 +- pinctrl: specify two states (default and monitor). One is the default 
 (UART) mode
 +  and the other is for monitoring the RX line by an interrupt
 +- on-off-gpio: the GPIO that controls the module's on-off toggle input
 +
 +Optional properties:
 +- lna-suppy: an (optional) LNA regulator that is enabled together with 
 the GPS receiver
 +
 +example:
 +
 +gps_receiver: w2sg0004 {
 +compatible = wi2wi,w2sg0004;
 
 I couldn't spot wi2wi in
 Documentation/devicetree/bindings/vendor-prefixes.txt (in mainline).
 
 Could you please add it?
 
 +gpio-controller;
 +#gpio-cells = 2;
 
 As far as I can see, these properties aren't necessary. This only
 consumes a GPIO, it doesn't provide any.
 
 Well, it provides one GPIO. Sort of a virtual“ GPIO. It is needed so that 
 it can be wired up to the DTR gpio of the UART driver (unfortunately this
 patch was reverted some months ago from mainline and we will reintroduce
 it soon).
 
 If this GPIO doesn't really exist, then it's a Linux internal
 implementation detail rather than a description of the hardware, and
 doesn't really belong in the DT.

Hm. 

Let’s describe it differently.

I can see the Linux driver module as a simple software simulation for a
piece of hardware that could have been connected between the UART
and the GPS chip.

Basically it is a pulse-generator and a flip-flop to detect data flow on the RX
wire. This could be implemented by an external FPGA or uController. Or as
it is done on our board for saving hardware by a mix of the main CPU hardware
(Pinmux + GPIO + IRQ) and a kernel driver.

The best of course would have been if the w2sg0004 would have a physical
„enable“ GPIO (instead of that on-off control input).

Then we would hook up that enable to some physical GPIO of the CPU
and simply refer to it as e.g. gpio4 12. And would not even need a driver
for it (unless we want to make rfkill gps work).

Therefore the driver we suggest provides an additional gpio controller with a
single GPIO so that we can write w2sg 0 to refer to this virtual gpio.

So in fact we try to wrap a non-optimal chip design by the driver and make it
appear as a standard GPIO interface to the DT and user space and whoever
needs simply to enable/disable the GPS chip.

 
 It sounds like what we actually need is the ability to describe devices
 attached to UARTs.

Hm. The purpose of the driver is power control of the chip. Not the serial
interface.

 Then you could have a mechanism whereby the UART
 driver can notify the other device driver regarding events (e.g. the
 UART being opened for access), or the other driver could claim ownership
 of the UART and expose its own interface to userspace.
 
 That would be independent of the particular UART or other device, and
 the only description necessary in the DT would be an accurate
 representation of the way the hardware is wired.
 
 There are a few ways that could be done, but I suspect the simplest is
 to just have the device as a sub-node of the UART, like we do for SPI or
 I2C buses:
 
   serial@f00 {
   compatible = vendor,uart;
   reg = 0xf00 0x100;
   ...
 
   gps {
   compatible = wi2wi,w2sg0004;
   ...
   };
   };
 
 That wouldn't work for devices with multiple UART connections. Do those
 exist, and are they common in configurations where out-of-band
 management is necessary (e.g. regulators, clocks)?

UARTs are usually point to point interfaces and not busses. So there is
no need to describe the interface. And I would speculate that in most cases
they simply go to some connector and therefore no connected chip that needs
to be described in the DT at all. Because it has a user-space driver (e.g. AT
commands) and no kernel driver.

But we have no idea how such a solution could be implemented or tested.

If someone adds that to the serial drivers, we would be happy to use it,
but unless

Re: [PATCH 3/3] arm: dts: Add gta04a5 model

2014-07-29 Thread Dr. H. Nikolaus Schaller
Hi,

Am 29.07.2014 um 14:41 schrieb Tony Lindgren:

 * Dr. H. Nikolaus Schaller h...@goldelico.com [140728 13:45]:
 
 Yes,
 the boot loader either loads gta04a3.dtb gta04.dtb or gta05.dtb
 depending on board revision.
 
 Therefore we have multiple device tree files to represent such hardware
 differences. Like Gumstix Overo variants (using a  omap3-overo-base.dtsi)
 
 And, this difference is not the only one. Other are to come later.
 
 Unfortunately we were recommend to submit only DT nodes that already
 have drivers. Therefore, the big picture of the device variants support
 may not yet be visible from this patch.
 
 I hope this gives a little background.
 
 So what's the conclusion? Are changes needed to this patch
 series or not?

I advocate that no changes are needed.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 3/3] arm: dts: Add gta04a5 model

2014-07-28 Thread Dr. H. Nikolaus Schaller
Hi,

Am 28.07.2014 um 22:12 schrieb Michael Trimarchi:

 Hi
 
 Il 28/lug/2014 22:06 Belisko Marek marek.beli...@gmail.com ha scritto:
 
  On Mon, Jul 28, 2014 at 10:04 PM, Michael Trimarchi
  mich...@amarulasolutions.com wrote:
   Hi
  
   Il 28/lug/2014 22:02 Belisko Marek marek.beli...@gmail.com ha scritto:
  
  
  
   Hi Michael,
  
   On Mon, Jul 28, 2014 at 9:56 PM, Michael Trimarchi
   mich...@amarulasolutions.com wrote:
Hi Marek
   
Il 28/lug/2014 21:54 Marek Belisko ma...@goldelico.com ha scritto:
   
   
   
Add model a5 which have additional jack detection.
   
Signed-off-by: Marek Belisko ma...@goldelico.com
---
 arch/arm/boot/dts/Makefile  |  1 +
 arch/arm/boot/dts/omap3-gta04a5.dts | 17 +
 2 files changed, 18 insertions(+)
 create mode 100644 arch/arm/boot/dts/omap3-gta04a5.dts
   
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 7d45fde..576c595 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -285,6 +285,7 @@ dtb-$(CONFIG_ARCH_OMAP3) += am3517-craneboard.dtb 
\
omap3-evm-37xx.dtb \
omap3-gta04a3.dtb \
omap3-gta04a4.dtb \
+   omap3-gta04a5.dtb \
omap3-igep0020.dtb \
omap3-igep0030.dtb \
omap3-ldp.dtb \
diff --git a/arch/arm/boot/dts/omap3-gta04a5.dts
b/arch/arm/boot/dts/omap3-gta04a5.dts
new file mode 100644
index 000..210317c3
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-gta04a5.dts
@@ -0,0 +1,17 @@
+/*
+ * Copyright (C) 2014 H. Nikolaus Schaller h...@goldelico.com
+ *
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include omap3-gta04.dtsi
+
+/ {
+   model = Goldelico GTA04A5;
+
+   sound {
+   ti,jack-det-gpio = twl_gpio 2 0;/* GTA04A5 only
*/
+   };
+};
--
1.9.1
   
   
Can we have only one dts with status enabled/disabled?
   Do you mean to define this node it gta04.dtsi disabled and enable only
   for a5 model?
   
  
   This should be possible in the bootloader
  Sorry I didn't get that. Can you give me some short example (or
  existing board which using it)?
  Thanks.
  
 
 http://www.denx.de/wiki/view/DULG/UBootCmdFDT
 
 I just suggest to not create a dts for each board revision but let it manage 
 by the bootloader. I don't know if there are examples but make sense to me to 
 avoid to add a lot of dts.
 
 

Hm. Why should we dynamically modify the dtb in memory through slow, 
interpreted FDT commands in u-boot, if the DTC can statically compile complete 
.dtb files by using an #include mechanism? It would slow down boot time for no 
other improvement. And debugging is more difficult that looking for compiler 
errors.

And our u-boot does not support the fdt command to avoid bloating it. IMHO boot 
loaders should be as small and fast as possible and contain only what is barely 
necessary. Everything more sophisticated should be done by the kernel and 
device drivers and some init user space process. I.e. boot loader should only 
tell the kernel only which board revision it is but not manage the board 
revisions.

We also have a nice feature that a system on an SD card has the uImage in /boot 
and all existing and relevant .dtb files. U-Boot simply picks and loads the 
right one (by file name). This keeps the boot loader stable (people always have 
difficulties flashing new boot loaders). Therefore we need precompiled DTBs 
that completely and consistently describe each board variant. This mechanism 
allows that we can easily swap the SD card between different boards and 
variants. Implementing this feature using U-Boot scripts with FDT commands to 
patch the DT, appears to become a nightmare. If you are interested, the whole 
concept is described here:

http://projects.goldelico.com/p/gta04-main/downloads/55/

Another aspect to consider: in my understanding, the main reason why DT is 
still maintained within the kernel is that the bindings are not yet stable. 
Therefore if bindings are patched, all device trees using them are also to be 
changed. I don't see how this can work if we have part of the board variations 
managed outside the kernel tree. Therefore each board revision is to be treated 
not differently from a completely new board. And similar parts are treated by a 
common .dtsi. This is how the concept IMHO should be. And the consequence is 
that we need a different .dts file for each board that has differences (even if 
they are or appear to be small).

So I don't see that your suggestion is the right way to go.

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo 

Re: [PATCH 1/5] arm: dts: omap3-gta04: Add missing nodes to fully describe gta04 board

2014-07-19 Thread Dr. H. Nikolaus Schaller
Hi all,

Am 18.07.2014 um 11:21 schrieb Javier Martinez Canillas:

 Hello Marek and Dr. H. Nikolaus,
 
 On Fri, Jul 18, 2014 at 8:55 AM, Joachim Eastwood manab...@gmail.com wrote:
 On 16 July 2014 09:17, Dr. H. Nikolaus Schaller h...@goldelico.com wrote:
 Am 15.07.2014 um 14:45 schrieb Joachim Eastwood:
 
 Hi Marek,
 
 You seem to add some DT nodes for hw that doesn't have drivers in
 mainline. I think you should leave those out until the driver itself
 is upstream and the bindings for it is documented.
 is there some policy for only having nodes for existing drivers in DT files?
 
 
 I strongly agree with Joachim on this regard.
 
 If I understand the device tree concept correctly, it should not describe 
 drivers
 (and hence nothing about the state of them being mainlined), but it should 
 statically
 describe the given hardware in a way that kernel and drivers can read it 
 (or ignore).
 And even other kernels can use it (because they run on the same hardware).
 
 
 Yes, it should describe hardware but that description should be
 previously agreed and properly documented as was mentioned before.

Ok, it is a little a hen and egg problem - who should start with the 
documentation.
The device tree file, more or less describing what the hardware requirements
are. Or the drivers which describe what they support.

And you are right - these two ends must match and that can only be resolved by
discussions and negotiations between both ends.

 
 So unless there is an important reason not to have currently unused nodes
 in the DT source/binary (loading time is IMHO neglectable), I would ask 
 that we
 can keep with the complete DT instead of splitting it up artificially and 
 getting back
 to the same status (because the hardware does not change over time).
 
 
 I understand your motivation since it will allow you to not have to
 maintain a patch-set for your downstream DTS changes but I would like
 to ask you the opposite question. What's the benefit for the kernel
 community to keep in a mainline DTS a bunch of device nodes with DT
 bindings that have not been neither discussed nor documented?

Less patches to review individually. Just a single one instead.
But this might be a weak benefit.

 
 Developers doing a board bring-up usually use the DTS in mainline as a
 reference for their boards and having non-documented/agreed DT binding
 on the upstream DTS will only bring confusion and frustration to them
 IMHO.

Well, my experience (at least for the current status) is that in most times new
boards need new drivers and DT nodes anyways. But this might change.

 
 We already have some issues with Device Trees (bindings that broke
 backward compatibility, drivers implementing custom DT binding instead
 of using standard ones, bindings that don't really reflect the actual
 H/W, etc), please don't make this even more complicated to developers.

Ok, then I think we will do the way as suggested and only submit DT nodes
for already existing drivers. Or submit new ones bundled with driver and
documentation patches.

Marek will update the patches anyways, so that they apply without errors.

 
 Thanks a lot and best regards,
 Javier

BR,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/5] arm: dts: omap3-gta04: Add missing nodes to fully describe gta04 board

2014-07-16 Thread Dr. H. Nikolaus Schaller
Hi Joachim,
is there some policy for only having nodes for existing drivers in DT files?

If I understand the device tree concept correctly, it should not describe 
drivers
(and hence nothing about the state of them being mainlined), but it should 
statically
describe the given hardware in a way that kernel and drivers can read it (or 
ignore).
And even other kernels can use it (because they run on the same hardware).

So unless there is an important reason not to have currently unused nodes
in the DT source/binary (loading time is IMHO neglectable), I would ask that we
can keep with the complete DT instead of splitting it up artificially and 
getting back
to the same status (because the hardware does not change over time).

Regarding bindings documentation I agree that it is a very necessary part of
each driver, i.e. documenting what the driver supports.

BR,
Nikolaus


Am 15.07.2014 um 14:45 schrieb Joachim Eastwood:

 Hi Marek,
 
 You seem to add some DT nodes for hw that doesn't have drivers in
 mainline. I think you should leave those out until the driver itself
 is upstream and the bindings for it is documented.
 
 On 14 July 2014 22:20, Marek Belisko ma...@goldelico.com wrote:
 Signed-off-by: Marek Belisko ma...@goldelico.com
 Signed-off-by: H. Nikolaus Schaller h...@goldelico.com
 ---
 arch/arm/boot/dts/omap3-gta04.dts | 443 
 +++---
 1 file changed, 412 insertions(+), 31 deletions(-)
 
 diff --git a/arch/arm/boot/dts/omap3-gta04.dts 
 b/arch/arm/boot/dts/omap3-gta04.dts
 index 215513b..bd6a71d 100644
 --- a/arch/arm/boot/dts/omap3-gta04.dts
 +++ b/arch/arm/boot/dts/omap3-gta04.dts
 @@ -12,7 +12,7 @@
 #include omap36xx.dtsi
 
 / {
 -   model = OMAP3 GTA04;
 +   model = Goldelico GTA04;
compatible = ti,omap3-gta04, ti,omap36xx, ti,omap3;
 
cpus {
 @@ -26,6 +26,11 @@
reg = 0x8000 0x2000; /* 512 MB */
};
 
 +   aliases {
 +   display0 = lcd;
 +   display1 = tv0;
 +   };
 +
gpio-keys {
compatible = gpio-keys;
 
 @@ -37,15 +42,78 @@
};
};
 
 +   gpio-keys-wwan-wakeup {
 +   compatible = gpio-keys;
 +
 +   wwan_wakeup_button: wwan-wakeup-button {
 +   label = 3G_WOE;
 +   linux,code = 240;
 +   gpios = gpio1 10 GPIO_ACTIVE_HIGH;
 +   gpio-key,wakeup;
 +   };
 +   };
 +
 +   hsusb2_phy: hsusb2_phy {
 +   compatible = usb-nop-xceiv;
 +   reset-gpios = gpio6 14 GPIO_ACTIVE_LOW; /* gpio_174 = 
 reset for USB3322 */
 +   };
 +
 +   antenna-detect {
 +   compatible = linux,extcon-gpio;
 +   label = gps_antenna;
 +   gpios = gpio5 16 0; /* gpio_144 */
 +   debounce-delay-ms = 10;
 +   irq-flags = IRQ_TYPE_EDGE_BOTH;
 +   state-on = external;
 +   state-off = internal;
 +   };
 +
sound {
compatible = ti,omap-twl4030;
ti,model = gta04;
 
ti,mcbsp = mcbsp2;
ti,codec = twl_audio;
 +
 +   ti,mcbsp-voice = mcbsp4;
 +   };
 +
 +   sound_card {
 +   compatible = goldelico,gta04-audio;
 +   gta04,cpu-dai = mcbsp2;
 +   };
 +
 +   gtm601_codec: voice_codec {
 +   compatible = gtm601-codec;
 +   };
 +
 +   sound_voice {
 +   compatible = goldelico,gta04-voice;
 +   gta04,cpu-dai = mcbsp4;
 +   gta04,codec = gtm601_codec;
};
 
 -   spi_lcd {
 +   w2cbw003_codec: headset_codec {
 +   compatible = w2cbw003-codec;
 +   };
 +
 +   sound_headset {
 +   compatible = goldelico,gta04-headset;
 +   gta04,cpu-dai = mcbsp3;
 +   gta04,codec = w2cbw003_codec;
 +   };
 +
 +   sound_fm {
 +   compatible = goldelico,gta04-fm;
 +   gta04,cpu-dai = mcbsp1;
 +   gta04,codec = si4721_codec;
 +   };
 +
 +   madc-hwmon {
 +   compatible = ti,twl4030-madc-hwmon;
 +   };
 +
 +   spi_lcd: spi_lcd {
compatible = spi-gpio;
#address-cells = 0x1;
#size-cells = 0x0;
 @@ -75,7 +143,7 @@
};
};
 
 -   battery {
 +   madc_battery: battery {
compatible = ti,twl4030-madc-battery;
capacity = 120;
charging-calibration-data = 4200 100
 @@ -100,6 +168,83 @@
   ichg,
   vbat;
};
 +
 +   backlight {
 +   compatible = pwm-backlight;
 +   pwms = pwm 0 200;
 +   brightness-levels = 0 11 20 30 40 50 60 70 80 90 100;
 +   default-brightness-level = 10;
 +   pinctrl-names = 

Re: [PATCH] net: rfkill-regulator: Add devicetree support.

2014-02-10 Thread Dr. H. Nikolaus Schaller
Am 10.02.2014 um 09:27 schrieb Johannes Berg:

 On Fri, 2014-02-07 at 20:48 +0100, Marek Belisko wrote:
 
 +#define RFKILL_TYPE_ALL (0)
 +#define RFKILL_TYPE_WLAN(1)
 +#define RFKILL_TYPE_BLUETOOTH   (2)
 +#define RFKILL_TYPE_UWB (3)
 +#define RFKILL_TYPE_WIMAX   (4)
 +#define RFKILL_TYPE_WWAN(5)
 +#define RFKILL_TYPE_GPS (6)
 +#define RFKILL_TYPE_FM  (7)
 +#define RFKILL_TYPE_NFC (8)
 
 This seems like a bad idea since there's an enum elsewhere in userspace
 API already.

Yes,
you are right. It is defined in include/uapi/linux/rfkill.h

Tnx,
Nikolaus

--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 3/3] misc: bmp085: Add missing platform data.

2013-11-16 Thread Dr. H. Nikolaus Schaller

Am 15.11.2013 um 14:58 schrieb Arnd Bergmann:

 On Thursday 14 November 2013, Marek Belisko wrote:
 DT bindings contains more parameters to set so add them to platform data also
 to have possibility to use on arch where DT isn't available yet.
 
 Signed-off-by: Marek Belisko ma...@goldelico.com
 
 Can you give an example of a platform that uses this chip and cannot
 yet use DT in the mainline kernel? 

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/omap3-gta04.dts

exists but is far from being complete, because the transition to DT is really 
complex.

We still need some (private) board file for 3.13 and hope to have everything 
ready
for 3.14. But that depends on speed of acceptance of other drivers because
all DT things are still constantly moving.

So we will have to mix DT+board file for a while.

 If it's only for out-of-tree platforms, I'd prefer to leave this
 patch out of tree as well and put the burden on whoever maintains
 a non-DT platform in a private kernel.
 
 
 diff --git a/include/linux/i2c/bmp085.h b/include/linux/i2c/bmp085.h
 index b66cb98..addb972 100644
 --- a/include/linux/i2c/bmp085.h
 +++ b/include/linux/i2c/bmp085.h
 
 Shouldn't this be in include/linux/platform_data? 
 
   Arnd

-- hns--
To unsubscribe from this list: send the line unsubscribe devicetree in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html