linux-sh.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
To: linux-sh@vger.kernel.org
Subject: Re: [PATCH v3 7/9] rcar-phy: add platform data
Date: Wed, 10 Apr 2013 18:51:45 +0000	[thread overview]
Message-ID: <5165B4C1.80203@cogentembedded.com> (raw)
In-Reply-To: <201304100237.50334.sergei.shtylyov@cogentembedded.com>

On 04/10/2013 10:40 PM, Felipe Balbi wrote:

>
>>>>>> Currently the driver hard-codes USBPCTRL0 register to 0.  It is wrong since this
>>>>>> register contains board-specific USB ports configuration and so its value should
>>>>>> be somehow passed via the platform data.  Add <linux/usb/rcar-phy.h> file with
>>>>>> the USBPCTRL0 bit #define's and 'struct rcar_phy_platform_data' containing the
>>>>>> value to be set by the driver to that register.
>>>>>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
>>>>>> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
>>>>>> Acked-by: Simon Horman <horms+renesas@verge.net.au>
>>>>>> ---
>>>>>> Changes since version 2:
>>>>>> - added #include <linux/types.h>;
>>>>>> - added ACKs from Simon Horman and Kuninori Morimoto.
>>>>>>   include/linux/usb/rcar-phy.h |   40 ++++++++++++++++++++++++++++++++++++++++
>>>>>>   1 file changed, 40 insertions(+)
>>>>>> Index: renesas/include/linux/usb/rcar-phy.h
>>>>>> =================================>>>>>> --- /dev/null
>>>>>> +++ renesas/include/linux/usb/rcar-phy.h
>>>>>> @@ -0,0 +1,40 @@
>>>>>> +/*
>>>>>> + * Copyright (C) 2013 Renesas Solutions Corp.
>>>>>> + * Copyright (C) 2013 Cogent Embedded, Inc.
>>>>>> + *
>>>>>> + * 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.
>>>>>> + */
>>>>>> +
>>>>>> +#ifndef __RCAR_PHY_H
>>>>>> +#define __RCAR_PHY_H
>>>>>> +
>>>>>> +#include <linux/bitops.h>
>>>>>> +#include <linux/types.h>
>>>>>> +
>>>>>> +/* USBPCTRL0 register bits */
>>>>>> +#define USBPCTRL0_OVC2	BIT(10)	/* Switches the OVC input pin for port 2: */
>>>>>> +				/* 1: USB_OVC2, 0: OVC2			*/
>>>>>> +#define USBPCTRL0_OVC1_VBUS1 BIT(9) /* Switches the OVC input pin for port 1: */
>>>>>> +				/* 1: USB_OVC1, 0: OVC1/VBUS1		*/
>>>>>> +#define USBPCTRL0_OVC0	BIT(8)	/* Switches the OVC input pin for port 0: */
>>>>>> +				/* 1: USB_OVC0 pin, 0: OVC0		*/
>>>>>> +#define USBPCTRL0_OVC2_ACT BIT(6) /* Host mode: OVC2 polarity:		*/
>>>>>> +				/* 1: active-high, 0: active-low	*/
>>>>>> +				/* Function mode: be sure to set to 1	*/
>>>>>> +#define USBPCTRL0_PENC	BIT(4)	/* Function mode: output level of PENC1 pin: */
>>>>>> +				/* 1: high, 0: low			*/
>>>>>> +#define USBPCTRL0_OVC0_ACT BIT(3) /* Host mode: OVC0 polarity:		*/
>>>>>> +				/* 1: active-high, 0: active-low	*/
>>>>>> +#define USBPCTRL0_OVC1_ACT BIT(1) /* Host mode: OVC1 polarity:		*/
>>>>>> +				/* 1: active-high, 0: active-low	*/
>>>>>> +				/* Function mode: be sure to set to 1	*/
>>>>>> +#define USBPCTRL0_PORT1	BIT(0)	/* Selects port 1 mode:			*/
>>>>>> +				/* 1: function, 0: host			*/
>>>>>> +
>>>>>> +struct rcar_phy_platform_data {
>>>>>> +	u32 usbpctrl0;		/* USBPCTRL0 register value */
>>>>>> +};
>>>>> looks really wrong to me to pass register contents via pdata. You should
>>>>> pass flags which would aid the driver into figuring out how to program
>>>>> that register.
>>>>     That was my first thought (and implementation) but this didn't
>>>> look good either (and even worse with the device tree approach) as we
>>>> couldn't come up with the clear names for the bitfields. Also, not
>>>> all these bits are present in R8A7778 support for which I'm adding in
>>>> the later patchset.
>>>>     Besides, IMO this little differs from having a flags field with
>>>> the flags bits #define'd beforehand. Or did you mean that I should
>>>> have surely used *bool* bitfields?
>>> How about:
>>      Er, I was asking you about the platform data only, not the DT
>> representation yet. :-)
> easy(-ish) to translate, just needs more fields in your structure.

    That's clear , about more fields. :-)

>
>>> rcar {
>>> 	compatible ...
>>> 	reg...
>>>
>>> 	/* switch OVC for all three ports */
>>> 	renesas,rcar-ovc-port-config = <2 "high",
>>> 					1  "low",
>>> 					0  "high" >;
>>      Hm, 'dtc' allows mixed type properties now?
>>      Also, we need to describe the multiplexing of the OVCn pins (5V
>> or 3.3V input),
>> not only the active level.
> fair enough, it can now be pre-processed so you can have defines, then
> you can:
>
> #define PORT_HIGH	1
> #define PORT_LOW	0
>
> #define MUX_ABC		foo
> #define MUX_XYZ		bar
> #define MUX_MNO		baz
>
> ...-port-config = <2 PORT_HIGH MUX_ABC,
> 		   1 PORT_LOW MUX_XYZ,
> 		   0 PORT_HIGH MUX_MNO>;

    Ah, didn't know about that (although have seen some named entities
like these in the device tree excerpts. OK, it's getting clearer now...

>>> Would this work for you ?
>>      I should try... All this surely looks more complex than we would
>> hope...
> passing register contents will hurt you in the future if some other
> device comes up with more bits

    It's already there: R8A7779 vs R8A7778. An it will hurt anyway, as 
I'll have to
add the new fields for the new bits...

> or a slightly different layout

    Don't think that'll be the case. Though you never know...

> and stuff like that.
>

WBR, Sergei


      parent reply	other threads:[~2013-04-10 18:51 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-09 22:37 [PATCH v3 7/9] rcar-phy: add platform data Sergei Shtylyov
2013-04-10  9:00 ` Felipe Balbi
2013-04-10 14:03 ` Sergei Shtylyov
2013-04-10 17:16 ` Felipe Balbi
2013-04-10 17:44 ` Sergei Shtylyov
2013-04-10 18:40 ` Felipe Balbi
2013-04-10 18:51 ` Sergei Shtylyov [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5165B4C1.80203@cogentembedded.com \
    --to=sergei.shtylyov@cogentembedded.com \
    --cc=linux-sh@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).