Re: [PATCH 1/4] cpuidle: config: Add SOC_EXYNOS5420 entry to select cpuidle-big-little driver

2014-04-23 Thread Chander Kashyap
Hi Daniel,

On 22 April 2014 16:12, Daniel Lezcano daniel.lezc...@linaro.org wrote:
 On 04/21/2014 01:49 PM, Chander Kashyap wrote:

 Exynos5420 is a big-little SoC from Samsung. It has 4 A15 and 4 A7 cores.
 In order to use generic cpuidle-big-little driver, this patch adds
 Exynos5420
 specific check to initialize generic cpuidle driver.

 Signed-off-by: Chander Kashyap chander.kash...@linaro.org
 Signed-off-by: Chander Kashyap k.chan...@samsung.com
 ---
   drivers/cpuidle/Kconfig.arm |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/cpuidle/Kconfig.arm b/drivers/cpuidle/Kconfig.arm
 index 97ccc31..5244d87 100644
 --- a/drivers/cpuidle/Kconfig.arm
 +++ b/drivers/cpuidle/Kconfig.arm
 @@ -4,7 +4,7 @@

   config ARM_BIG_LITTLE_CPUIDLE
 bool Support for ARM big.LITTLE processors
 -   depends on ARCH_VEXPRESS_TC2_PM
 +   depends on ARCH_VEXPRESS_TC2_PM || SOC_EXYNOS5420


 For the sake of consistency, I would prefer:

 depends on ARCH_VEXPRESS_TC2_PM || ARCH_EXYNOS

Yes i will change it.

Thanks

 and let the current code (and future platform driver) to handle the loading
 of the driver.


 select ARM_CPU_SUSPEND
 select CPU_IDLE_MULTIPLE_DRIVERS
 help



 --
  http://www.linaro.org/ Linaro.org │ Open source software for ARM SoCs

 Follow Linaro:  http://www.facebook.com/pages/Linaro Facebook |
 http://twitter.com/#!/linaroorg Twitter |
 http://www.linaro.org/linaro-blog/ Blog




-- 
with warm regards,
Chander Kashyap
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] mmc: dw_mmc: exynos: Turn SDIO interrupts on

2014-04-23 Thread Yuvaraj Cd
On Wed, Apr 23, 2014 at 9:42 AM, Alim Akhtar alim.akh...@gmail.com wrote:
 Hi Yuvaraj,

 On Mon, Mar 24, 2014 at 10:12 AM, Yuvaraj Kumar yuvaraj...@gmail.com wrote:
 On Mon, Mar 24, 2014 at 9:59 AM, Jaehoon Chung jh80.ch...@samsung.com 
 wrote:
 Hi, Yuvaraj.

 NACK. we can use mmc_of_parese().
 Thanks Jaehoon for the pointer.I will use mmc_of_parse().
 Are you planning to re-spin this patch? Now Jaehoon's changes for
 using mmc_of_parse() is landed in mmc-next.
As its already added mmc_of_parse(),no respin of this.
Just we need to use it in DT.
 Thanks!!

 I have sent the patch that use mmc_of_parse().
 https://patchwork.kernel.org/patch/3750681/

 Best Regards,
 Jaehoon Chung

 On 03/24/2014 01:23 PM, Yuvaraj Kumar C D wrote:
 The mmc part in exynos supports SDIO interrupts and they work fine, so
 turn the capability on.  With this I see download speeds increase
 about 10x.

 This V1 of this patch is posted to LKML at
 https://patchwork.kernel.org/patch/2429661/) by Doug Anderson.

 Signed-off-by: Doug Anderson diand...@chromium.org
 Signed-off-by: Yuvaraj Kumar C D yuvaraj...@samsung.com
 ---
  drivers/mmc/host/dw_mmc.c |3 +++
  1 file changed, 3 insertions(+)

 diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
 index 0c56faa..240949d 100644
 --- a/drivers/mmc/host/dw_mmc.c
 +++ b/drivers/mmc/host/dw_mmc.c
 @@ -2417,6 +2417,9 @@ static struct dw_mci_board *dw_mci_parse_dt(struct 
 dw_mci *host)
   if (of_get_property(np, cd-inverted, NULL))
   pdata-caps2 |= MMC_CAP2_CD_ACTIVE_HIGH;

 + if (of_find_property(np, cap-sdio-irq, NULL))
 + pdata-caps |= MMC_CAP_SDIO_IRQ;
 +
   return pdata;
  }



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



 --
 Regards,
 Alim

 ___
 linux-arm-kernel mailing list
 linux-arm-ker...@lists.infradead.org
 http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2] pinctrl: exynos: Add driver data for Exynos3250

2014-04-23 Thread Linus Walleij
On Mon, Apr 14, 2014 at 3:45 AM, Chanwoo Choi cw00.c...@samsung.com wrote:

 From: Tomasz Figa t.f...@samsung.com

 This patch adds driver data (bank list and EINT layout) for Exynos3250
 to pinctrl-exynos driver. Exynos3250 includes 158 multi-functional 
 input/output
 ports. There are 23 general port groups.

 Changes from v1:
 - Add signed-off of sender
 - Post only separated patch for pinctrl from following patchset(v1)
   : https://lkml.org/lkml/2014/4/10/286

 Cc: Thomas Abraham thomas.abra...@linaro.org
 Cc: Linus Walleij linus.wall...@linaro.org
 Cc: Kukjin Kim kgene@samsung.com
 Signed-off-by: Tomasz Figa t.f...@samsung.com
 Signed-off-by: Chanwoo Choi cw00.c...@samsung.com
 Acked-by: Kyungmin Park kyungmin.p...@samsung.com

This v2 patch applied.

Yours,
Linus Walleij
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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/4] drm: Introduce drm_fb_helper_prepare()

2014-04-23 Thread Thierry Reding
On Tue, Apr 22, 2014 at 05:54:06PM +0200, Daniel Vetter wrote:
 On Tue, Apr 22, 2014 at 04:42:20PM +0200, Thierry Reding wrote:
[...]
  diff --git a/drivers/gpu/drm/drm_fb_helper.c 
  b/drivers/gpu/drm/drm_fb_helper.c
[...]
  @@ -502,6 +503,33 @@ static void drm_fb_helper_crtc_free(struct 
  drm_fb_helper *helper)
   }
   
   /**
  + * drm_fb_helper_prepare - setup a drm_fb_helper structure
  + * @dev: DRM device
  + * @helper: driver-allocated fbdev helper structure to set up
  + * @funcs: pointer to structure of functions associate with this helper
  + *
  + * Sets up the bare minimum to make the framebuffer helper usable. This is
  + * useful to implement race-free initialization of the polling helpers. In
  + * that case a typical sequence would be:
  + *
  + *   - call drm_fb_helper_prepare()
  + *   - set dev-mode_config.funcs
 
 This step is done in drm_fb_helper_prepare already.

drm_fb_helper_prepare() sets fb_helper-funcs. dev-mode_config.funcs
needs to be set because it gets called by drm_kms_helper_hotplug_event()
which in turn is called by output_poll_execute(), which can be called at
any point after drm_kms_helper_poll_init(). It could be scheduled
immediately by drm_kms_helper_poll_enable().

I wonder if perhaps we should be wrapping that into a function as well.
Currently this is only documented in code by the drivers that call this.
But since it's only a single step it doesn't seem worth it. Perhaps if
we rolled the min/max_width/height into that function as well it would
be more worth it? That could be difficult to do since a couple of
drivers need to set those depending on the chipset generation.

  + *   - perform driver-specific setup
  + *   - call drm_kms_helper_poll_init()
 
 Maybe mention that after this you can start to handle hpd events using the
 probe helpers?

Isn't that somewhat implied already? The poll helpers call directly the
dev-mode_config.funcs-output_poll_changed() function, which has
already been set up earlier.

  + *   - call drm_fb_helper_init()
  + *   - call drm_fb_helper_single_add_all_connectors()
  + *   - call drm_fb_helper_initial_config()
 
 Does this list look sane in the generated DocBook? Afaik kerneldoc
 unfortunately lacks any form of markup, at least afaik :(

I must admit I didn't check. I'll make sure I do that before sending out
the next version.

Thierry


pgpG3P6CXV81y.pgp
Description: PGP signature


Re: [PATCH V2 2/9] drm/panel: add pre_enable and post_disable routines

2014-04-23 Thread Daniel Vetter
On Tue, Apr 22, 2014 at 08:06:19PM +0530, Ajay kumar wrote:
 Hi Thierry,
 
 
 On Tue, Apr 22, 2014 at 1:49 PM, Thierry Reding thierry.red...@gmail.com
 wrote:
  On Tue, Apr 22, 2014 at 04:09:11AM +0530, Ajay Kumar wrote:
  Most of the panels need an init sequence as mentioned below:
-- poweron LCD unit/LCD_EN
-- start video data
-- poweron LED unit/BL_EN
  And, a de-init sequence as mentioned below:
-- poweroff LED unit/BL_EN
-- stop video data
-- poweroff LCD unit/LCD_EN
  With existing callbacks for drm panel, we cannot accomodate such panels,
  since only two callbacks, i.e panel_enable and panel_disable are
 supported.
 
  This patch adds:
-- pre_enable callback which can be called before
the actual video data is on, and then call the enable
callback after the video data is available.
 
-- post_disable callback which can be called after
the video data is off, and use disable callback
to do something before switching off the video data.
 
  Now, we can easily map the above scenario as shown below:
poweron LCD unit/LCD_EN = pre_enable callback
poweron LED unit/BL_EN = enable callback
poweroff LED unit/BL_EN = disable callback
poweroff LCD unit/LCD_EN = post_disable callback
 
  I don't like this. What happens when the next panel comes around that
  has a yet slightly different requirement? Will we introduce a new
  pre_pre_enable() and post_post_disable() function then?
 
 As I have already explained, these 2 callbacks are sufficient enough to
 take care
 the power up/down sequence for LVDS and eDP panels. And, definitely having
 just 2 callbacks enable and disable is not at all sufficient.
 
 I initially thought of using panel_simple_enable from panel-simple driver.
 But it doesn't go well with case wherein there are 2 regulators(one for LCD
 and one for LED)
 a BL_EN signal etc. And, often(Believe me, I have referred to both eDP
 panel datasheets
 and LVDS panel datasheets) proper powerup sequence for such panels is as
 mentioned below:
 
 powerup:
 -- power up the supply (LCD_VCC).
 -- start video data.
 -- enable backlight.
 
 powerdown
 -- disable backlight.
 -- stop video data.
 -- power off the supply (LCD VCC)
 
 For the above cases, if I have to somehow fit in all the required settings,
 it breaks the sequence and I end up getting glitches during bootup/DPMS.
 
 Also, when the drm_bridge can support pre_enable and post_disable, why not
 drm_panel provide that both should work in tandem?

Imo this makes sense, especially if we go through with the idea talked
about yesterday of creating a drm_bridge to wrap-up a drm_panel with
sufficient isolation between all components.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv2] pinctrl: exynos: Add driver data for Exynos3250

2014-04-23 Thread Chanwoo Choi
On 04/23/2014 04:01 PM, Linus Walleij wrote:
 On Mon, Apr 14, 2014 at 3:45 AM, Chanwoo Choi cw00.c...@samsung.com wrote:
 
 From: Tomasz Figa t.f...@samsung.com

 This patch adds driver data (bank list and EINT layout) for Exynos3250
 to pinctrl-exynos driver. Exynos3250 includes 158 multi-functional 
 input/output
 ports. There are 23 general port groups.

 Changes from v1:
 - Add signed-off of sender
 - Post only separated patch for pinctrl from following patchset(v1)
   : https://lkml.org/lkml/2014/4/10/286

 Cc: Thomas Abraham thomas.abra...@linaro.org
 Cc: Linus Walleij linus.wall...@linaro.org
 Cc: Kukjin Kim kgene@samsung.com
 Signed-off-by: Tomasz Figa t.f...@samsung.com
 Signed-off-by: Chanwoo Choi cw00.c...@samsung.com
 Acked-by: Kyungmin Park kyungmin.p...@samsung.com
 
 This v2 patch applied.
 

Thanks for your apply.

Best regards,
Chanwoo Choi

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


Re: [RFC v2 PATCH v4 09/14] ARM: dts: s6e3fa0: add DT bindings

2014-04-23 Thread Thierry Reding
On Wed, Apr 23, 2014 at 10:26:20AM +0900, YoungJun Cho wrote:
 Hi Andrzej
 
 Thank you for comment.
 
 On 04/22/2014 11:02 PM, Andrzej Hajda wrote:
 On 04/21/2014 02:28 PM, YoungJun Cho wrote:
 This patch adds DT bindings for s6e3fa0 panel.
 The bindings describes panel resources, display timings and cpu timings.
 
 Changelog v2:
 - Adds unit address (commented by Sachin Kamat)
 Changelog v3:
 - Removes optional delay, size properties (commented by Laurent Pinchart)
 - Adds OLED detection, TE gpio properties
 Changelog v4:
 - Moves CPU timings relevant properties from FIMD DT
(commeted by Laurent Pinchart, Andrzej Hajda)
 
 Signed-off-by: YoungJun Cho yj44@samsung.com
 Acked-by: Inki Dae inki@samsung.com
 Acked-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
   .../devicetree/bindings/panel/samsung,s6e3fa0.txt  |   63 
  
   1 file changed, 63 insertions(+)
   create mode 100644 
  Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 
 diff --git a/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt 
 b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 new file mode 100644
 index 000..9eeb38b
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 @@ -0,0 +1,63 @@
 +Samsung S6E3FA0 AMOLED LCD 5.7 inch panel
 +
 +Required properties:
 +  - compatible: samsung,s6e3fa0
 +  - reg: the virtual channel number of a DSI peripheral
 +  - vdd3-supply: core voltage supply
 +  - vci-supply: voltage supply for analog circuits
 +  - reset-gpio: a GPIO spec for the reset pin
 +  - det-gpio: a GPIO spec for the OLED detection pin
 +  - te-gpio: a GPIO spec for the TE pin
 
 Just FYI, according to DT documentation [1] gpio spec should be in form
 [name]-gpios, however there is plenty bindings with -gpio suffix, so I
 am not sure if it is really enforced. On the other side it is enforced
 by descriptor based gpio framework[2]. Integer-based gpio framework
 used in your driver is obsolete according to [2].
 
 Yes, you're right. That is my mistake.
 They should be attached 's'.
 At first I used integer-based gpio framework and replaced to descriptor
 based one, but did not updated DT bindings.

I've been working on a patch to support both *-gpios and *-gpio variants
with the GPIO descriptor framework. *-gpios makes sense if there can
indeed be several, but for something like hotplug detection I don't
think there's a reason to require the plural.

Furthermore some bindings already use the singular *-gpio anyway, so if
we ever want to convert drivers using those bindings to the GPIO
descriptor API we have to support that form too.

Thierry


pgp0WyvpxcSxF.pgp
Description: PGP signature


Re: [PATCH] usb: ohci-exynos: Add facility to use phy provided by the generic phy framework

2014-04-23 Thread Vivek Gautam
Hi,

On Tue, Apr 22, 2014 at 11:29 PM, Alan Stern st...@rowland.harvard.edu wrote:
 On Tue, 22 Apr 2014, Vivek Gautam wrote:

 On Thu, Apr 10, 2014 at 6:54 PM, Vivek Gautam gautam.vi...@samsung.com 
 wrote:
  Add support to consume phy provided by Generic phy framework.
  Keeping the support for older usb-phy intact right now, in order
  to prevent any functionality break in absence of relevant
  device tree side change for ohci-exynos.
  Once we move to new phy in the device nodes for ohci, we can
  remove the support for older phys.

 Any comments on this please.
 I think whatever the approach we follow, that can be common to both
 ehci-exynos[1], and ohci-exynos, since
 both are needed to move to the new generic phy framework, keeping
 support for older usb-phy
 so as to have smooth transition, in order to avoid any regression.

 I lost my copies of the ehci-exynos patch, but probably the same
 comments apply as for the ohci-exynos patch.

Ok, i will be reworking on the ehci-exynos patch also (which was
earlier posted by Kamil [1]),
after addressing the review comments on that, and will post the same.

[1] [PATCH v6 8/8] usb: ehci-exynos: Change to use phy provided by the
generic phy framework
https://lkml.org/lkml/2014/1/29/298
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 2/9] drm/panel: add pre_enable and post_disable routines

2014-04-23 Thread Thierry Reding
On Wed, Apr 23, 2014 at 09:29:15AM +0200, Daniel Vetter wrote:
 On Tue, Apr 22, 2014 at 08:06:19PM +0530, Ajay kumar wrote:
  Hi Thierry,
  
  
  On Tue, Apr 22, 2014 at 1:49 PM, Thierry Reding thierry.red...@gmail.com
  wrote:
   On Tue, Apr 22, 2014 at 04:09:11AM +0530, Ajay Kumar wrote:
   Most of the panels need an init sequence as mentioned below:
 -- poweron LCD unit/LCD_EN
 -- start video data
 -- poweron LED unit/BL_EN
   And, a de-init sequence as mentioned below:
 -- poweroff LED unit/BL_EN
 -- stop video data
 -- poweroff LCD unit/LCD_EN
   With existing callbacks for drm panel, we cannot accomodate such panels,
   since only two callbacks, i.e panel_enable and panel_disable are
  supported.
  
   This patch adds:
 -- pre_enable callback which can be called before
 the actual video data is on, and then call the enable
 callback after the video data is available.
  
 -- post_disable callback which can be called after
 the video data is off, and use disable callback
 to do something before switching off the video data.
  
   Now, we can easily map the above scenario as shown below:
 poweron LCD unit/LCD_EN = pre_enable callback
 poweron LED unit/BL_EN = enable callback
 poweroff LED unit/BL_EN = disable callback
 poweroff LCD unit/LCD_EN = post_disable callback
  
   I don't like this. What happens when the next panel comes around that
   has a yet slightly different requirement? Will we introduce a new
   pre_pre_enable() and post_post_disable() function then?
  
  As I have already explained, these 2 callbacks are sufficient enough to
  take care
  the power up/down sequence for LVDS and eDP panels. And, definitely having
  just 2 callbacks enable and disable is not at all sufficient.
  
  I initially thought of using panel_simple_enable from panel-simple driver.
  But it doesn't go well with case wherein there are 2 regulators(one for LCD
  and one for LED)
  a BL_EN signal etc. And, often(Believe me, I have referred to both eDP
  panel datasheets
  and LVDS panel datasheets) proper powerup sequence for such panels is as
  mentioned below:
  
  powerup:
  -- power up the supply (LCD_VCC).
  -- start video data.
  -- enable backlight.
  
  powerdown
  -- disable backlight.
  -- stop video data.
  -- power off the supply (LCD VCC)
  
  For the above cases, if I have to somehow fit in all the required settings,
  it breaks the sequence and I end up getting glitches during bootup/DPMS.
  
  Also, when the drm_bridge can support pre_enable and post_disable, why not
  drm_panel provide that both should work in tandem?
 
 Imo this makes sense, especially if we go through with the idea talked
 about yesterday of creating a drm_bridge to wrap-up a drm_panel with
 sufficient isolation between all components.

I'm not at all comfortable with these. The names are totally confusing.
Next somebody will need to do something after the panel has been enabled
and we'll have to introduce .post_enable() and .pre_disable() functions.
And worse, what if somebody needs something to be done between
.pre_enable() and .enable()? .post_pre_enable()? Where does it end?

According to the above description the only reason why we need this is
to avoid visible glitches when the panel is already on, but the video
stream hasn't started yet. If that's the only reason why we need this,
then perhaps adding a way for a panel to expose the associated backlight
would be better?

Thierry


pgpnxv94ZOMpr.pgp
Description: PGP signature


[PATCH] ASoC: SAMSUNG: Don't clear clock setting during i2s_startup

2014-04-23 Thread Tushar Behera
In exiting kernel, if DAIFMT flags are set in dai_link and I2S is
set to run in master mode, the I2S clocks are not getting configured
resulting in no output.

Existing code clears the current I2S clock settings during i2s_startup
and requires that the clocks are reconfigured. It then assumes that
sound-card driver would call snd_soc_dai_{set_sysclk/set_fmt} to
configure the root clock.

1. Since I2S clock settings remain fixed for a board, it would be better
to set the clocks once during sound-card probe.

2. Also if the DAIFMT flags are set in dai_link, snd_soc_dai_set_fmt is
called during DAI probe.

If both these conditions are true, then I2S clock remains unconfigured
during audio playback. Fix this by removing the code to clear
rclk_srcrate in i2s_startup. Instead, reset this during DAI probe.

Signed-off-by: Tushar Behera tushar.beh...@linaro.org
---
The patch is based on v3.15-rc2.

 sound/soc/samsung/i2s.c |4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
index 048ead9..6e61db7 100644
--- a/sound/soc/samsung/i2s.c
+++ b/sound/soc/samsung/i2s.c
@@ -724,9 +724,6 @@ static int i2s_startup(struct snd_pcm_substream *substream,
else
i2s-mode |= DAI_MANAGER;
 
-   /* Enforce set_sysclk in Master mode */
-   i2s-rclk_srcrate = 0;
-
if (!any_active(i2s)  (i2s-quirks  QUIRK_NEED_RSTCLR))
writel(CON_RSTCLR, i2s-addr + I2SCON);
 
@@ -984,6 +981,7 @@ probe_exit:
/* Reset any constraint on RFS and BFS */
i2s-rfs = 0;
i2s-bfs = 0;
+   i2s-rclk_srcrate = 0;
i2s_txctrl(i2s, 0);
i2s_rxctrl(i2s, 0);
i2s_fifo(i2s, FIC_TXFLUSH);
-- 
1.7.9.5

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


Re: [PATCH] mmc: dw_mmc: Don't print data errors

2014-04-23 Thread Ulf Hansson
On 23 April 2014 01:51, Doug Anderson diand...@chromium.org wrote:
 Data errors are completely expected during tuning.  Printing them out
 is confusing people looking at the kernel logs.  They see things like:

  [3.613296] dwmmc_exynos 1220.dwmmc0: data error, status 0x0088

 ...and they think something is wrong with their hardware.

 Remove the printouts.  We'll leave it up to a higher level to report
 about errors.

 Signed-off-by: Doug Anderson diand...@chromium.org
 ---
  drivers/mmc/host/dw_mmc.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
 index cced599..4c8d423 100644
 --- a/drivers/mmc/host/dw_mmc.c
 +++ b/drivers/mmc/host/dw_mmc.c
 @@ -1248,7 +1248,7 @@ static int dw_mci_data_complete(struct dw_mci *host, 
 struct mmc_data *data)
 data-error = -EIO;
 }

 -   dev_err(host-dev, data error, status 0x%08x\n, status);
 +   dev_dbg(host-dev, data error, status 0x%08x\n, status);


The status here could be useful information about the status
register, which is not considered while printing errors by the higher
levels. An option could be to print the error, but not when you
perform tuning.

No big deal though, just a thought.

 /*
  * After an error, there may be data lingering
 --
 1.9.1.423.g4596e3a


Kind regards
Ulf Hansson
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/4] mcpm: exynos: populate suspend and powered_up callbacks

2014-04-23 Thread Chander Kashyap
On 22 April 2014 16:21, Daniel Lezcano daniel.lezc...@linaro.org wrote:
 On 04/21/2014 01:49 PM, Chander Kashyap wrote:

 In order to support cpuidle through mcpm, suspend and powered-up
 callbacks are required in mcpm platform code.
 Hence populate the same callbacks.

 Signed-off-by: Chander Kashyap chander.kash...@linaro.org
 Signed-off-by: Chander Kashyap k.chan...@samsung.com
 ---
   arch/arm/mach-exynos/mcpm-exynos.c |   53
 
   1 file changed, 53 insertions(+)

 diff --git a/arch/arm/mach-exynos/mcpm-exynos.c
 b/arch/arm/mach-exynos/mcpm-exynos.c
 index 46d4968..16af0bd 100644
 --- a/arch/arm/mach-exynos/mcpm-exynos.c
 +++ b/arch/arm/mach-exynos/mcpm-exynos.c
 @@ -318,10 +318,63 @@ static int exynos_power_down_finish(unsigned int
 cpu, unsigned int cluster)
 return 0; /* success: the CPU is halted */
   }

 +static void enable_coherency(void)
 +{
 +   unsigned long v, u;
 +
 +   asm volatile(
 +   mrcp15, 0, %0, c1, c0, 1\n
 +   orr%0, %0, %2\n
 +   ldr%1, [%3]\n
 +   and%1, %1, #0\n
 +   orr%0, %0, %1\n
 +   mcrp15, 0, %0, c1, c0, 1\n
 +   : =r (v), =r (u)
 +   : Ir (0x40), Ir (S5P_INFORM0)
 +   : cc);
 +}


 Shouldn't this function to be used from hotplug.c also ?

Hotplug.c already taking care for this. And anyhow that will go away
for mcpm dependent SoCs



 +
 +void exynos_powered_up(void)
 +{
 +   unsigned int mpidr, cpu, cluster;
 +
 +   mpidr = read_cpuid_mpidr();
 +   cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
 +   cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
 +
 +   arch_spin_lock(bl_lock);
 +   if (cpu_use_count[cpu][cluster] == 0)
 +   cpu_use_count[cpu][cluster] = 1;
 +   arch_spin_unlock(bl_lock);
 +}
 +
 +static void exynos_suspend(u64 residency)
 +{
 +   unsigned int mpidr, cpunr;
 +
 +   mpidr = read_cpuid_mpidr();
 +   cpunr = enynos_pmu_cpunr(mpidr);


 *enynos*_pmu_cpunr ?

oops, I will fix typo



 +
 +   __raw_writel(virt_to_phys(mcpm_entry_point), REG_ENTRY_ADDR);
 +
 +   exynos_power_down();
 +
 +   /*
 +* Execution reaches here only if cpu did not power down.
 +* Hence roll back the changes done in exynos_power_down function.
 +   */
 +   __raw_writel(EXYNOS_CORE_LOCAL_PWR_EN,
 +   EXYNOS_ARM_CORE_CONFIGURATION(cpunr));


 Why don't you use the functions defined in the

 patch 5/5 arm: exynos: Add MCPM call-back functions

In exynos_core_power_control it powerup the alreay powered down core.
But here i need to simply set this value as core never powered down.


 exynos_core_power_control() ?


 +   set_cr(get_cr() | CR_C);
 +   enable_coherency();
 +}
 +
   static const struct mcpm_platform_ops exynos_power_ops = {
 .power_up   = exynos_power_up,
 .power_down = exynos_power_down,
 .power_down_finish  = exynos_power_down_finish,
 +   .suspend= exynos_suspend,
 +   .powered_up = exynos_powered_up,
   };

   static void __init exynos_mcpm_usage_count_init(void)



 --
  http://www.linaro.org/ Linaro.org │ Open source software for ARM SoCs

 Follow Linaro:  http://www.facebook.com/pages/Linaro Facebook |
 http://twitter.com/#!/linaroorg Twitter |
 http://www.linaro.org/linaro-blog/ Blog




-- 
with warm regards,
Chander Kashyap
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC v2 PATCH 08/14] drm/exynos: dsi: add driver data to support Exynos5420

2014-04-23 Thread Andrzej Hajda
On 04/21/2014 02:28 PM, YoungJun Cho wrote:
 The offset of register DSIM_PLLTMR_REG in Exynos5420 is different
 from the one in Exynos4 SoC.

 In case of Exynos5420 SoC, there is no frequency band bit in DSIM_PLLCTRL_REG,
 and it uses DSIM_PHYCTRL_REG and DSIM_PHYTIMING*_REG instead.
 So this patch adds driver data to distinguish it.

 Signed-off-by: YoungJun Cho yj44@samsung.com
 Acked-by: Inki Dae inki@samsung.com
 Acked-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  drivers/gpu/drm/exynos/exynos_drm_dsi.c |  101 
 ---
  1 file changed, 80 insertions(+), 21 deletions(-)

 diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c 
 b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
 index 179f2fa..fcd577f 100644
 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
 +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
 @@ -17,6 +17,7 @@
  
  #include linux/clk.h
  #include linux/irq.h
 +#include linux/of_device.h
  #include linux/phy/phy.h
  #include linux/regulator/consumer.h
  
 @@ -54,9 +55,12 @@
  
  /* FIFO memory AC characteristic register */
  #define DSIM_PLLCTRL_REG 0x4c/* PLL control register */
 -#define DSIM_PLLTMR_REG  0x50/* PLL timer register */
  #define DSIM_PHYACCHR_REG0x54/* D-PHY AC characteristic register */
  #define DSIM_PHYACCHR1_REG   0x58/* D-PHY AC characteristic register1 */
 +#define DSIM_PHYCTRL_REG 0x5c
 +#define DSIM_PHYTIMING_REG   0x64
 +#define DSIM_PHYTIMING1_REG  0x68
 +#define DSIM_PHYTIMING2_REG  0x6c
  
  /* DSIM_STATUS */
  #define DSIM_STOP_STATE_DAT(x)   (((x)  0xf)  0)
 @@ -233,6 +237,12 @@ struct exynos_dsi_transfer {
  #define DSIM_STATE_INITIALIZED   BIT(1)
  #define DSIM_STATE_CMD_LPM   BIT(2)
  
 +struct exynos_dsi_driver_data {
 + unsigned int plltmr_reg;
 +
 + unsigned int has_freqband:1;
 +};
 +
  struct exynos_dsi {
   struct mipi_dsi_host dsi_host;
   struct drm_connector connector;
 @@ -262,11 +272,39 @@ struct exynos_dsi {
  
   spinlock_t transfer_lock; /* protects transfer_list */
   struct list_head transfer_list;
 +
 + struct exynos_dsi_driver_data *driver_data;
  };
  
  #define host_to_dsi(host) container_of(host, struct exynos_dsi, dsi_host)
  #define connector_to_dsi(c) container_of(c, struct exynos_dsi, connector)
  
 +static struct exynos_dsi_driver_data exynos4_dsi_driver_data = {
 + .plltmr_reg = 0x50,
 + .has_freqband = 1,
 +};
 +
 +static struct exynos_dsi_driver_data exynos5_dsi_driver_data = {
 + .plltmr_reg = 0x58,
 +};
 +
 +static struct of_device_id exynos_dsi_of_match[] = {
 + { .compatible = samsung,exynos4210-mipi-dsi,
 +   .data = exynos4_dsi_driver_data },
 + { .compatible = samsung,exynos5420-mipi-dsi,
 +   .data = exynos5_dsi_driver_data },
 + { }
 +};

I wonder if it wouldn't be better to use samsung,exynos5410-mipi-dsi
compatible and distinguish 5410 and 5420 by DSIM_VERSION register.


 +
 +static inline struct exynos_dsi_driver_data *exynos_dsi_get_driver_data(
 + struct platform_device *pdev)
 +{
 + const struct of_device_id *of_id =
 + of_match_device(exynos_dsi_of_match, pdev-dev);
 +
 + return (struct exynos_dsi_driver_data *)of_id-data;
 +}
 +
  static void exynos_dsi_wait_for_reset(struct exynos_dsi *dsi)
  {
   if (wait_for_completion_timeout(dsi-completed, msecs_to_jiffies(300)))
 @@ -340,14 +378,9 @@ static unsigned long exynos_dsi_pll_find_pms(struct 
 exynos_dsi *dsi,
  static unsigned long exynos_dsi_set_pll(struct exynos_dsi *dsi,
   unsigned long freq)
  {
 - static const unsigned long freq_bands[] = {
 - 100 * MHZ, 120 * MHZ, 160 * MHZ, 200 * MHZ,
 - 270 * MHZ, 320 * MHZ, 390 * MHZ, 450 * MHZ,
 - 510 * MHZ, 560 * MHZ, 640 * MHZ, 690 * MHZ,
 - 770 * MHZ, 870 * MHZ, 950 * MHZ,
 - };
 + struct exynos_dsi_driver_data *driver_data = dsi-driver_data;
   unsigned long fin, fout;
 - int timeout, band;
 + int timeout;
   u8 p, s;
   u16 m;
   u32 reg;
 @@ -368,18 +401,30 @@ static unsigned long exynos_dsi_set_pll(struct 
 exynos_dsi *dsi,
   failed to find PLL PMS for requested frequency\n);
   return -EFAULT;
   }
 + dev_dbg(dsi-dev, PLL freq %lu, (p %d, m %d, s %d)\n, fout, p, m, s);
  
 - for (band = 0; band  ARRAY_SIZE(freq_bands); ++band)
 - if (fout  freq_bands[band])
 - break;
 + writel(500, dsi-reg_base + driver_data-plltmr_reg);
 +
 + reg = DSIM_PLL_EN | DSIM_PLL_P(p) | DSIM_PLL_M(m) | DSIM_PLL_S(s);
 +
 + if (driver_data-has_freqband) {
 + static const unsigned long freq_bands[] = {
 + 100 * MHZ, 120 * MHZ, 160 * MHZ, 200 * MHZ,
 + 270 * MHZ, 320 * MHZ, 390 * MHZ, 450 * MHZ,
 + 510 * MHZ, 560 * MHZ, 640 * MHZ, 690 

Re: [RFC v2 PATCH v4 09/14] ARM: dts: s6e3fa0: add DT bindings

2014-04-23 Thread Andrzej Hajda
On 04/21/2014 02:28 PM, YoungJun Cho wrote:
 This patch adds DT bindings for s6e3fa0 panel.
 The bindings describes panel resources, display timings and cpu timings.
 
 Changelog v2:
 - Adds unit address (commented by Sachin Kamat)
 Changelog v3:
 - Removes optional delay, size properties (commented by Laurent Pinchart)
 - Adds OLED detection, TE gpio properties
 Changelog v4:
 - Moves CPU timings relevant properties from FIMD DT
   (commeted by Laurent Pinchart, Andrzej Hajda)
 
 Signed-off-by: YoungJun Cho yj44@samsung.com
 Acked-by: Inki Dae inki@samsung.com
 Acked-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  .../devicetree/bindings/panel/samsung,s6e3fa0.txt  |   63 
 
  1 file changed, 63 insertions(+)
  create mode 100644 
 Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 
 diff --git a/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt 
 b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 new file mode 100644
 index 000..9eeb38b
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 @@ -0,0 +1,63 @@
 +Samsung S6E3FA0 AMOLED LCD 5.7 inch panel
 +
 +Required properties:
 +  - compatible: samsung,s6e3fa0
 +  - reg: the virtual channel number of a DSI peripheral
 +  - vdd3-supply: core voltage supply
 +  - vci-supply: voltage supply for analog circuits
 +  - reset-gpio: a GPIO spec for the reset pin
 +  - det-gpio: a GPIO spec for the OLED detection pin
 +  - te-gpio: a GPIO spec for the TE pin
 +  - display-timings: timings for the connected panel as described by [1]

Which properties of display-timings are relevant for CPU mode?
I guess width and height. Anything more?

 +  - cpu-timings: CPU interface timings for the connected panel, and it 
 contains
 +following optional properties.
 +  - cs-setup: clock cycles for the active period of address signal
 +enable until chip select is enable in CPU interface
 +  - wr-setup: clock cycles for the active period of CS signal enable
 +until write signal is enable in CPU interface
 +  - wr-act: clock cycles for the active period of CS enable in CPU
 +interface
 +  - wr-hold: clock cycles for the active period of CS disable until
 +write signal is disable in CPU interface

cpu-timings name does not sound to be related to display.
I wonder if it would not be better to merge cpu-timings into
display-timings but this will require more discussion I guess.

If you want to stay with separate node please consider to make it
optional as whole node or make some properties required. Making node
required with all sub-properties optional is weird.
By the way I hope all timings properties are generic for CPU mode,
if not they should be prefixed by vendor or model.

Regards
Andrzej

 +
 +Optional properties:
 +
 +The device node can contain one 'port' child node with one child
 +'endpoint' node, according to the bindings defined in [2]. This
 +node should describe panel's video bus.
 +
 +[1]: Documentation/devicetree/bindings/video/display-timing.txt
 +[2]: Documentation/devicetree/bindings/media/video-interfaces.txt
 +
 +Example:
 +
 + panel@0 {
 + compatible = samsung,s6e3fa0;
 + reg = 0;
 + vdd3-supply = vcclcd_reg;
 + vci-supply = vlcd_reg;
 + reset-gpio = gpy7 4 0;
 + det-gpio = gpg0 6 0;
 + te-gpio = gpd1 7 0;
 +
 + display-timings {
 + timing0: timing-0 {
 + clock-frequency = 0;
 + hactive = 1080;
 + vactive = 1920;
 + hfront-porch = 2;
 + hback-porch = 2;
 + hsync-len = 1;
 + vfront-porch = 1;
 + vback-porch = 4;
 + vsync-len = 1;
 + };
 + };
 +
 + cpu-timings {
 + cs-setup = 0;
 + wr-setup = 0;
 + wr-act = 1;
 + wr-hold = 0;
 + };
 + };
 

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


[Patch v2 0/4] add cpuidle support for Exynos5420

2014-04-23 Thread Chander Kashyap
Exynos5420 is a big-little Soc from Samsung. It has 4 A15 and 4 A7 cores.

This patchset adds cpuidle support for Exynos5420 SoC based on
generic big.little cpuidle driver.

Tested on SMDK5420.

This patch set depends on:
1. [PATCH 0/5] MCPM backend for Exynos5420
   http://www.spinics.net/lists/arm-kernel/msg321666.html

2. [PATCH v4] arm: exynos: generalize power register address calculation
   http://www.spinics.net/lists/arm-kernel/msg324024.html

Changelog is in respective patches.
Chander Kashyap (4):
  cpuidle: config: Add SOC_EXYNOS5420 entry to select
cpuidle-big-little driver
  driver: cpuidle: cpuidle-big-little: init driver for Exynos5420
  exynos: cpuidle: do not allow cpuidle registration for Exynos5420
  mcpm: exynos: populate suspend and powered_up callbacks

 arch/arm/mach-exynos/cpuidle.c   |3 ++
 arch/arm/mach-exynos/mcpm-exynos.c   |   53 ++
 drivers/cpuidle/Kconfig.arm  |2 +-
 drivers/cpuidle/cpuidle-big_little.c |3 +-
 4 files changed, 59 insertions(+), 2 deletions(-)

-- 
1.7.9.5

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


RE: [PATCH] i2c: s3c2410: resume race fix

2014-04-23 Thread Kukjin Kim
Doug Anderson wrote:
 
 From: Olof Johansson o...@lixom.net
 
 Don't unmark the device as suspended until after it's been re-setup.
 
 The main race would be w.r.t. an i2c driver that gets resumed at the same
 time (asyncronously), that is allowed to do a transfer since suspended
 is set to 0 before reinit, but really should have seen the -EIO return
 instead.
 
 Signed-off-by: Olof Johansson o...@lixom.net
 Signed-off-by: Doug Anderson diand...@chromium.org

Acked-by: Kukjin Kim kgene@samsung.com

Thanks,
Kukjin

 ---
  drivers/i2c/busses/i2c-s3c2410.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-
 s3c2410.c
 index ae44910..bb3a996 100644
 --- a/drivers/i2c/busses/i2c-s3c2410.c
 +++ b/drivers/i2c/busses/i2c-s3c2410.c
 @@ -1276,10 +1276,10 @@ static int s3c24xx_i2c_resume(struct device *dev)
   struct platform_device *pdev = to_platform_device(dev);
   struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
 
 - i2c-suspended = 0;
   clk_prepare_enable(i2c-clk);
   s3c24xx_i2c_init(i2c);
   clk_disable_unprepare(i2c-clk);
 + i2c-suspended = 0;
 
   return 0;
  }
 --
 1.9.1.423.g4596e3a

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] usb: dwc3-exynos: Make provision for vdd regulators

2014-04-23 Thread Vivek Gautam
Hi Anton,


On Wed, Apr 23, 2014 at 2:56 PM, Anton Tikhomirov
av.tikhomi...@samsung.com wrote:
 Hello,

 -Original Message-
 From: Vivek Gautam [mailto:gautamvivek1...@gmail.com] On Behalf Of
 Vivek Gautam
 Sent: Monday, April 21, 2014 9:17 PM
 To: linux-...@vger.kernel.org; linux-samsung-soc@vger.kernel.org
 Cc: linux-ker...@vger.kernel.org; linux-o...@vger.kernel.org; linux-
 arm-ker...@lists.infradead.org; gre...@linuxfoundation.org;
 st...@rowland.harvard.edu; ba...@ti.com; kgene@samsung.com; Vivek
 Gautam; Anton Tikhomirov
 Subject: [PATCH 3/3] usb: dwc3-exynos: Make provision for vdd
 regulators

 Facilitate getting required 3.3V and 1.0V VDD supply for
 DWC3 controller on Exynos.

 With patches for regulators' nodes merged in 3.15:
 c8c253f ARM: dts: Add regulator entries to smdk5420
 275dcd2 ARM: dts: add max77686 pmic node for smdk5250,

 certain perripherals will now need to ensure that,
 they request VDD regulators in their drivers, and enable
 them so as to make them working.

 Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
 Cc: Anton Tikhomirov av.tikhomi...@samsung.com
 ---

 Based on 'usb-next' branch of Greg's USB tree.
 Also cleanly applies on 'next' branch of Balbi's USB tree.

  drivers/usb/dwc3/dwc3-exynos.c |   51
 ++--
  1 file changed, 49 insertions(+), 2 deletions(-)

 diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-
 exynos.c
 index 28c8ad7..c9d9102 100644
 --- a/drivers/usb/dwc3/dwc3-exynos.c
 +++ b/drivers/usb/dwc3/dwc3-exynos.c
 @@ -27,6 +27,7 @@
  #include linux/usb/usb_phy_gen_xceiv.h
  #include linux/of.h
  #include linux/of_platform.h
 +#include linux/regulator/consumer.h

  struct dwc3_exynos {
   struct platform_device  *usb2_phy;
 @@ -34,6 +35,8 @@ struct dwc3_exynos {
   struct device   *dev;

   struct clk  *clk;
 + struct regulator*vdd33;
 + struct regulator*vdd10;
  };

  static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos)
 @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct
 platform_device *pdev)

   clk_prepare_enable(exynos-clk);

 + exynos-vdd33 = devm_regulator_get(dev, vdd33);
 + if (IS_ERR(exynos-vdd33)) {
 + ret = PTR_ERR(exynos-vdd33);
 + goto err2;

 Is regulator property mandatory for dwc3-exynos? If it is not
 and device tree doesn't provide it, dwc3-exynos driver probe shouldn't
 fail here.

These are the VDD regulators (from PMIC ldo supplies), in absence of
which the controller will not be powered up.
So doesn't it make sense to stop the probe when these are not supplied
by device tree ?

[snip]
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 0/4] add cpuidle support for Exynos5420

2014-04-23 Thread Rafael J. Wysocki
On Wednesday, April 23, 2014 02:55:50 PM Chander Kashyap wrote:
 Exynos5420 is a big-little Soc from Samsung. It has 4 A15 and 4 A7 cores.
 
 This patchset adds cpuidle support for Exynos5420 SoC based on
 generic big.little cpuidle driver.
 
 Tested on SMDK5420.
 
 This patch set depends on:
   1. [PATCH 0/5] MCPM backend for Exynos5420
  http://www.spinics.net/lists/arm-kernel/msg321666.html
 
   2. [PATCH v4] arm: exynos: generalize power register address calculation
  http://www.spinics.net/lists/arm-kernel/msg324024.html
   
 Changelog is in respective patches.
 Chander Kashyap (4):
   cpuidle: config: Add SOC_EXYNOS5420 entry to select
 cpuidle-big-little driver
   driver: cpuidle: cpuidle-big-little: init driver for Exynos5420
   exynos: cpuidle: do not allow cpuidle registration for Exynos5420
   mcpm: exynos: populate suspend and powered_up callbacks
 
  arch/arm/mach-exynos/cpuidle.c   |3 ++
  arch/arm/mach-exynos/mcpm-exynos.c   |   53 
 ++
  drivers/cpuidle/Kconfig.arm  |2 +-
  drivers/cpuidle/cpuidle-big_little.c |3 +-
  4 files changed, 59 insertions(+), 2 deletions(-)

I'm assuming that the Exynos maintainers will take care of this, correct?

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] ARM: dts: Remove mau_pd node for Exynos5420

2014-04-23 Thread Kukjin Kim
Tushar Behera wrote:
 
 On 22 April 2014 13:08, Alim Akhtar alim.akh...@gmail.com wrote:
  Hi Tushar
 
  On Tue, Apr 22, 2014 at 11:09 AM, Tushar Behera
  tushar.beh...@linaro.org wrote:
  MAU powerdomain provides clocks for Audio sub-system block. This block
  comprises of the I2S audio controller, audio DMA blocks and Audio
  sub-system clock registers.
 
  Right now, there is no way to hook up power-domains with clock
 providers.
  During late boot when this power-domain gets disabled, we get following
  external abort.

+ Jonghwan Choi

Well, this is not a perfect solution to support MAU power domain, it's true it 
is a problem right now though.

In other words, this is just temporal fix for the problem.

How about accessing clock stuff for audio sub-system with handling MAU power 
domain via generic IO power domain?

  ?? which abort?? Can you please mention it here?
 
 
 Thanks Alim for spotting this ... I somehow missed adding this.
 
 
 Unhandled fault: imprecise external abort (0x1406) at 0x
 Kernel panic - not syncing: Attempted to kill init! exitcode=0x0007
 
 
 Kukjin,
 
 Let me know if I need to resend the patch.

- Kukjin

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


Re: [RFC v2 PATCH v3 10/14] drm/panel: add S6E3FA0 driver

2014-04-23 Thread Andrzej Hajda
Hi YoungJun,


On 04/21/2014 02:28 PM, YoungJun Cho wrote:
 This patch adds MIPI-DSI command mode based S6E3FA0 AMOLED LCD Panel driver.
 
 Changelog v2:
 - Declares delay, size properties in probe routine instead of DT
 Changelog v3:
 - Moves CPU timings relevant properties from FIMD DT
   (commented by Laurent Pinchart, Andrzej Hajda)
 
 Signed-off-by: YoungJun Cho yj44@samsung.com
 Acked-by: Inki Dae inki@samsung.com
 Acked-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  drivers/gpu/drm/panel/Kconfig |7 +
  drivers/gpu/drm/panel/Makefile|1 +
  drivers/gpu/drm/panel/panel-s6e3fa0.c |  569 
 +
  3 files changed, 577 insertions(+)
  create mode 100644 drivers/gpu/drm/panel/panel-s6e3fa0.c
 
 diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
 index 4ec874d..be1392e 100644
 --- a/drivers/gpu/drm/panel/Kconfig
 +++ b/drivers/gpu/drm/panel/Kconfig
 @@ -30,4 +30,11 @@ config DRM_PANEL_S6E8AA0
   select DRM_MIPI_DSI
   select VIDEOMODE_HELPERS
  
 +config DRM_PANEL_S6E3FA0
 + tristate S6E3FA0 DSI command mode panel
 + depends on DRM  DRM_PANEL
 + depends on OF
 + select DRM_MIPI_DSI
 + select VIDEOMODE_HELPERS
 +
  endmenu
 diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
 index 8b92921..85c6738 100644
 --- a/drivers/gpu/drm/panel/Makefile
 +++ b/drivers/gpu/drm/panel/Makefile
 @@ -1,3 +1,4 @@
  obj-$(CONFIG_DRM_PANEL_SIMPLE) += panel-simple.o
  obj-$(CONFIG_DRM_PANEL_LD9040) += panel-ld9040.o
  obj-$(CONFIG_DRM_PANEL_S6E8AA0) += panel-s6e8aa0.o
 +obj-$(CONFIG_DRM_PANEL_S6E3FA0) += panel-s6e3fa0.o
 diff --git a/drivers/gpu/drm/panel/panel-s6e3fa0.c 
 b/drivers/gpu/drm/panel/panel-s6e3fa0.c
 new file mode 100644
 index 000..1282678
 --- /dev/null
 +++ b/drivers/gpu/drm/panel/panel-s6e3fa0.c
 @@ -0,0 +1,569 @@
 +/*
 + * MIPI-DSI based s6e3fa0 AMOLED LCD 5.7 inch panel driver.
 + *
 + * Copyright (c) 2014 Samsung Electronics Co., Ltd
 + *
 + * YoungJun Cho yj44@samsung.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 drm/drmP.h
 +#include drm/drm_mipi_dsi.h
 +#include drm/drm_panel.h
 +
 +#include linux/gpio.h
 +#include linux/of_gpio.h


#include linux/gpio/consumer.h should be enough.


 +#include linux/regulator/consumer.h
 +
 +#include video/mipi_display.h
 +#include video/of_videomode.h
 +#include video/videomode.h
 +
 +#define MTP_ID_LEN   3
 +#define GAMMA_LEVEL_NUM  30
 +
 +struct s6e3fa0 {
 + struct device   *dev;
 + struct drm_panelpanel;
 +
 + struct regulator_bulk_data  supplies[2];
 + struct gpio_desc*reset_gpio;
 + struct gpio_desc*det_gpio;
 + struct gpio_desc*te_gpio;
 + struct videomodevm;
 + struct drm_panel_cpu_timingscpu_timings;
 +
 + unsigned intpower_on_delay;
 + unsigned intreset_delay;
 + unsigned intinit_delay;
 + unsigned intwidth_mm;
 + unsigned intheight_mm;
 +
 + unsigned char   id;
 + unsigned char   vddm;
 + unsigned intbrightness;
 +};
 +
 +#define panel_to_s6e3fa0(p) container_of(p, struct s6e3fa0, panel)
 +
 +static const unsigned char s6e3fa0_vddm_lut[][2] = {
 + {0x00, 0x0d}, {0x01, 0x0d}, {0x02, 0x0e}, {0x03, 0x0f}, {0x04, 0x10},
 + {0x05, 0x11}, {0x06, 0x12}, {0x07, 0x13}, {0x08, 0x14}, {0x09, 0x15},
 + {0x0a, 0x16}, {0x0b, 0x17}, {0x0c, 0x18}, {0x0d, 0x19}, {0x0e, 0x1a},
 + {0x0f, 0x1b}, {0x10, 0x1c}, {0x11, 0x1d}, {0x12, 0x1e}, {0x13, 0x1f},
 + {0x14, 0x20}, {0x15, 0x21}, {0x16, 0x22}, {0x17, 0x23}, {0x18, 0x24},
 + {0x19, 0x25}, {0x1a, 0x26}, {0x1b, 0x27}, {0x1c, 0x28}, {0x1d, 0x29},
 + {0x1e, 0x2a}, {0x1f, 0x2b}, {0x20, 0x2c}, {0x21, 0x2d}, {0x22, 0x2e},
 + {0x23, 0x2f}, {0x24, 0x30}, {0x25, 0x31}, {0x26, 0x32}, {0x27, 0x33},
 + {0x28, 0x34}, {0x29, 0x35}, {0x2a, 0x36}, {0x2b, 0x37}, {0x2c, 0x38},
 + {0x2d, 0x39}, {0x2e, 0x3a}, {0x2f, 0x3b}, {0x30, 0x3c}, {0x31, 0x3d},
 + {0x32, 0x3e}, {0x33, 0x3f}, {0x34, 0x3f}, {0x35, 0x3f}, {0x36, 0x3f},
 + {0x37, 0x3f}, {0x38, 0x3f}, {0x39, 0x3f}, {0x3a, 0x3f}, {0x3b, 0x3f},
 + {0x3c, 0x3f}, {0x3d, 0x3f}, {0x3e, 0x3f}, {0x3f, 0x3f}, {0x40, 0x0c},
 + {0x41, 0x0b}, {0x42, 0x0a}, {0x43, 0x09}, {0x44, 0x08}, {0x45, 0x07},
 + {0x46, 0x06}, {0x47, 0x05}, {0x48, 0x04}, {0x49, 0x03}, {0x4a, 0x02},
 + {0x4b, 0x01}, {0x4c, 0x40}, {0x4d, 0x41}, {0x4e, 0x42}, {0x4f, 0x43},
 + {0x50, 0x44}, {0x51, 0x45}, {0x52, 0x46}, {0x53, 0x47}, {0x54, 0x48},
 + {0x55, 0x49}, {0x56, 0x4a}, {0x57, 0x4b}, {0x58, 0x4c}, {0x59, 0x4d},
 +   

Re: [RESEND PATCH v3 3/5] mfd: tps65090: Stop caching most registers

2014-04-23 Thread Lee Jones
  Nearly all of the registers in tps65090 combine control bits and
  status bits.  Turn off caching of all registers except the select few
  that can be cached.
 
 Lee, I don't mind if I apply this and send a pull request to you or I
 pull a tag from you with this in - what's easiest for you?

I'm happy to do it.

Doug,
  Can you send the patch-set again with all of the *-bys and ensure
  I'm on TO or CC please?

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] usb: dwc3-exynos: Make provision for vdd regulators

2014-04-23 Thread Anton Tikhomirov
Hi,

 Hi Anton,
 
 
 On Wed, Apr 23, 2014 at 2:56 PM, Anton Tikhomirov
 av.tikhomi...@samsung.com wrote:
  Hello,
 
  -Original Message-
  From: Vivek Gautam [mailto:gautamvivek1...@gmail.com] On Behalf Of
  Vivek Gautam
  Sent: Monday, April 21, 2014 9:17 PM
  To: linux-...@vger.kernel.org; linux-samsung-soc@vger.kernel.org
  Cc: linux-ker...@vger.kernel.org; linux-o...@vger.kernel.org; linux-
  arm-ker...@lists.infradead.org; gre...@linuxfoundation.org;
  st...@rowland.harvard.edu; ba...@ti.com; kgene@samsung.com;
 Vivek
  Gautam; Anton Tikhomirov
  Subject: [PATCH 3/3] usb: dwc3-exynos: Make provision for vdd
  regulators
 
  Facilitate getting required 3.3V and 1.0V VDD supply for
  DWC3 controller on Exynos.
 
  With patches for regulators' nodes merged in 3.15:
  c8c253f ARM: dts: Add regulator entries to smdk5420
  275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
 
  certain perripherals will now need to ensure that,
  they request VDD regulators in their drivers, and enable
  them so as to make them working.
 
  Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
  Cc: Anton Tikhomirov av.tikhomi...@samsung.com
  ---
 
  Based on 'usb-next' branch of Greg's USB tree.
  Also cleanly applies on 'next' branch of Balbi's USB tree.
 
   drivers/usb/dwc3/dwc3-exynos.c |   51
  ++--
   1 file changed, 49 insertions(+), 2 deletions(-)
 
  diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-
  exynos.c
  index 28c8ad7..c9d9102 100644
  --- a/drivers/usb/dwc3/dwc3-exynos.c
  +++ b/drivers/usb/dwc3/dwc3-exynos.c
  @@ -27,6 +27,7 @@
   #include linux/usb/usb_phy_gen_xceiv.h
   #include linux/of.h
   #include linux/of_platform.h
  +#include linux/regulator/consumer.h
 
   struct dwc3_exynos {
struct platform_device  *usb2_phy;
  @@ -34,6 +35,8 @@ struct dwc3_exynos {
struct device   *dev;
 
struct clk  *clk;
  + struct regulator*vdd33;
  + struct regulator*vdd10;
   };
 
   static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos)
  @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct
  platform_device *pdev)
 
clk_prepare_enable(exynos-clk);
 
  + exynos-vdd33 = devm_regulator_get(dev, vdd33);
  + if (IS_ERR(exynos-vdd33)) {
  + ret = PTR_ERR(exynos-vdd33);
  + goto err2;
 
  Is regulator property mandatory for dwc3-exynos? If it is not
  and device tree doesn't provide it, dwc3-exynos driver probe
 shouldn't
  fail here.
 
 These are the VDD regulators (from PMIC ldo supplies), in absence of
 which the controller will not be powered up.
 So doesn't it make sense to stop the probe when these are not supplied
 by device tree ?

Agree. Just curious, is there special reason for this change except making
things right?


--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] usb: dwc3-exynos: Make provision for vdd regulators

2014-04-23 Thread Vivek Gautam
Hi,


On Wed, Apr 23, 2014 at 4:27 PM, Anton Tikhomirov
av.tikhomi...@samsung.com wrote:
 Hi,

 Hi Anton,


 On Wed, Apr 23, 2014 at 2:56 PM, Anton Tikhomirov
 av.tikhomi...@samsung.com wrote:
  Hello,
 
  -Original Message-
  From: Vivek Gautam [mailto:gautamvivek1...@gmail.com] On Behalf Of
  Vivek Gautam
  Sent: Monday, April 21, 2014 9:17 PM
  To: linux-...@vger.kernel.org; linux-samsung-soc@vger.kernel.org
  Cc: linux-ker...@vger.kernel.org; linux-o...@vger.kernel.org; linux-
  arm-ker...@lists.infradead.org; gre...@linuxfoundation.org;
  st...@rowland.harvard.edu; ba...@ti.com; kgene@samsung.com;
 Vivek
  Gautam; Anton Tikhomirov
  Subject: [PATCH 3/3] usb: dwc3-exynos: Make provision for vdd
  regulators
 
  Facilitate getting required 3.3V and 1.0V VDD supply for
  DWC3 controller on Exynos.
 
  With patches for regulators' nodes merged in 3.15:
  c8c253f ARM: dts: Add regulator entries to smdk5420
  275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
 
  certain perripherals will now need to ensure that,
  they request VDD regulators in their drivers, and enable
  them so as to make them working.
 
  Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
  Cc: Anton Tikhomirov av.tikhomi...@samsung.com
  ---
 
  Based on 'usb-next' branch of Greg's USB tree.
  Also cleanly applies on 'next' branch of Balbi's USB tree.
 
   drivers/usb/dwc3/dwc3-exynos.c |   51
  ++--
   1 file changed, 49 insertions(+), 2 deletions(-)
 
  diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-
  exynos.c
  index 28c8ad7..c9d9102 100644
  --- a/drivers/usb/dwc3/dwc3-exynos.c
  +++ b/drivers/usb/dwc3/dwc3-exynos.c
  @@ -27,6 +27,7 @@
   #include linux/usb/usb_phy_gen_xceiv.h
   #include linux/of.h
   #include linux/of_platform.h
  +#include linux/regulator/consumer.h
 
   struct dwc3_exynos {
struct platform_device  *usb2_phy;
  @@ -34,6 +35,8 @@ struct dwc3_exynos {
struct device   *dev;
 
struct clk  *clk;
  + struct regulator*vdd33;
  + struct regulator*vdd10;
   };
 
   static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos)
  @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct
  platform_device *pdev)
 
clk_prepare_enable(exynos-clk);
 
  + exynos-vdd33 = devm_regulator_get(dev, vdd33);
  + if (IS_ERR(exynos-vdd33)) {
  + ret = PTR_ERR(exynos-vdd33);
  + goto err2;
 
  Is regulator property mandatory for dwc3-exynos? If it is not
  and device tree doesn't provide it, dwc3-exynos driver probe
 shouldn't
  fail here.

 These are the VDD regulators (from PMIC ldo supplies), in absence of
 which the controller will not be powered up.
 So doesn't it make sense to stop the probe when these are not supplied
 by device tree ?

 Agree. Just curious, is there special reason for this change except making
 things right?

Yea, actually after the patch (which got merged in 3.15 rc1)
275dcd2 ARM: dts: add max77686 pmic node for smdk5250,

the USB stops working, and that's because the regulators related to
usb are not turned on by default (ldo12 and ldo15 to be specific).
So we need to enable those regulators, which ofcourse the driver
should be doing, if i am not wrong.
Similar is the reason for EHCI, and OHCI exynos patches in this series.

I shall be sending the dt patch for this soon.


-- 
Best Regards
Vivek Gautam
Samsung RD Institute, Bangalore
India
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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/5] mfd: tps65090: Stop caching most registers

2014-04-23 Thread Lee Jones
Anton,

 Nearly all of the registers in tps65090 combine control bits and
 status bits.  Turn off caching of all registers except the select few
 that can be cached.
 
 In order to avoid adding more duplicate #defines, we also move some
 register offset definitions to the mfd driver (and resolve
 inconsistent names).
 
 Signed-off-by: Doug Anderson diand...@chromium.org
 ---
 Changes in v3: None
 Changes in v2:
 - Leave cache on for the registers that can be cached.
 - Move register offsets to mfd header file.
 
  drivers/mfd/tps65090.c   | 27 ++-
  drivers/power/tps65090-charger.c | 11 ---

This patch still requires your Ack.

  include/linux/mfd/tps65090.h | 14 ++
  3 files changed, 28 insertions(+), 24 deletions(-)
 
 diff --git a/drivers/mfd/tps65090.c b/drivers/mfd/tps65090.c
 index c3cddb4..1c3e6e2 100644
 --- a/drivers/mfd/tps65090.c
 +++ b/drivers/mfd/tps65090.c
 @@ -32,14 +32,6 @@
  #define NUM_INT_REG 2
  #define TOTAL_NUM_REG 0x18
  
 -/* interrupt status registers */
 -#define TPS65090_INT_STS 0x0
 -#define TPS65090_INT_STS20x1
 -
 -/* interrupt mask registers */
 -#define TPS65090_INT_MSK 0x2
 -#define TPS65090_INT_MSK20x3
 -
  #define TPS65090_INT1_MASK_VAC_STATUS_CHANGE 1
  #define TPS65090_INT1_MASK_VSYS_STATUS_CHANGE2
  #define TPS65090_INT1_MASK_BAT_STATUS_CHANGE 3
 @@ -144,17 +136,26 @@ static struct regmap_irq_chip tps65090_irq_chip = {
   .irqs = tps65090_irqs,
   .num_irqs = ARRAY_SIZE(tps65090_irqs),
   .num_regs = NUM_INT_REG,
 - .status_base = TPS65090_INT_STS,
 - .mask_base = TPS65090_INT_MSK,
 + .status_base = TPS65090_REG_INTR_STS,
 + .mask_base = TPS65090_REG_INTR_MASK,
   .mask_invert = true,
  };
  
  static bool is_volatile_reg(struct device *dev, unsigned int reg)
  {
 - if ((reg == TPS65090_INT_STS) || (reg == TPS65090_INT_STS2))
 - return true;
 - else
 + /* Nearly all registers have status bits mixed in, except a few */
 + switch (reg) {
 + case TPS65090_REG_INTR_MASK:
 + case TPS65090_REG_INTR_MASK2:
 + case TPS65090_REG_CG_CTRL0:
 + case TPS65090_REG_CG_CTRL1:
 + case TPS65090_REG_CG_CTRL2:
 + case TPS65090_REG_CG_CTRL3:
 + case TPS65090_REG_CG_CTRL4:
 + case TPS65090_REG_CG_CTRL5:
   return false;
 + }
 + return true;
  }
  
  static const struct regmap_config tps65090_regmap_config = {
 diff --git a/drivers/power/tps65090-charger.c 
 b/drivers/power/tps65090-charger.c
 index cc26c12..31a3ba4 100644
 --- a/drivers/power/tps65090-charger.c
 +++ b/drivers/power/tps65090-charger.c
 @@ -30,17 +30,6 @@
  
  #include linux/mfd/tps65090.h
  
 -#define TPS65090_REG_INTR_STS0x00
 -#define TPS65090_REG_INTR_MASK   0x02
 -#define TPS65090_REG_CG_CTRL00x04
 -#define TPS65090_REG_CG_CTRL10x05
 -#define TPS65090_REG_CG_CTRL20x06
 -#define TPS65090_REG_CG_CTRL30x07
 -#define TPS65090_REG_CG_CTRL40x08
 -#define TPS65090_REG_CG_CTRL50x09
 -#define TPS65090_REG_CG_STATUS1  0x0a
 -#define TPS65090_REG_CG_STATUS2  0x0b
 -
  #define TPS65090_CHARGER_ENABLE  BIT(0)
  #define TPS65090_VACGBIT(1)
  #define TPS65090_NOITERM BIT(5)
 diff --git a/include/linux/mfd/tps65090.h b/include/linux/mfd/tps65090.h
 index 3f43069..45f0f9d 100644
 --- a/include/linux/mfd/tps65090.h
 +++ b/include/linux/mfd/tps65090.h
 @@ -64,6 +64,20 @@ enum {
   TPS65090_REGULATOR_MAX,
  };
  
 +/* Register addresses */
 +#define TPS65090_REG_INTR_STS0x00
 +#define TPS65090_REG_INTR_STS2   0x01
 +#define TPS65090_REG_INTR_MASK   0x02
 +#define TPS65090_REG_INTR_MASK2  0x03
 +#define TPS65090_REG_CG_CTRL00x04
 +#define TPS65090_REG_CG_CTRL10x05
 +#define TPS65090_REG_CG_CTRL20x06
 +#define TPS65090_REG_CG_CTRL30x07
 +#define TPS65090_REG_CG_CTRL40x08
 +#define TPS65090_REG_CG_CTRL50x09
 +#define TPS65090_REG_CG_STATUS1  0x0a
 +#define TPS65090_REG_CG_STATUS2  0x0b
 +
  struct tps65090 {
   struct device   *dev;
   struct regmap   *rmap;

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] ASoC: SAMSUNG: Don't clear clock setting during i2s_startup

2014-04-23 Thread Mark Brown
On Wed, Apr 23, 2014 at 01:34:24PM +0530, Tushar Behera wrote:
 In exiting kernel, if DAIFMT flags are set in dai_link and I2S is
 set to run in master mode, the I2S clocks are not getting configured
 resulting in no output.

Applied, thanks.


signature.asc
Description: Digital signature


Re: [RFC v2 PATCH v4 09/14] ARM: dts: s6e3fa0: add DT bindings

2014-04-23 Thread Laurent Pinchart
Hi Andrzej,

On Wednesday 23 April 2014 11:02:21 Andrzej Hajda wrote:
 On 04/21/2014 02:28 PM, YoungJun Cho wrote:
  This patch adds DT bindings for s6e3fa0 panel.
  The bindings describes panel resources, display timings and cpu timings.
  
  Changelog v2:
  - Adds unit address (commented by Sachin Kamat)
  Changelog v3:
  - Removes optional delay, size properties (commented by Laurent Pinchart)
  - Adds OLED detection, TE gpio properties
  Changelog v4:
  - Moves CPU timings relevant properties from FIMD DT
  
(commeted by Laurent Pinchart, Andrzej Hajda)
  
  Signed-off-by: YoungJun Cho yj44@samsung.com
  Acked-by: Inki Dae inki@samsung.com
  Acked-by: Kyungmin Park kyungmin.p...@samsung.com
  ---
  
   .../devicetree/bindings/panel/samsung,s6e3fa0.txt  |   63 +++
  1 file changed, 63 insertions(+)
   create mode 100644
   Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt 
  diff --git a/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
  b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt new file
  mode 100644
  index 000..9eeb38b
  --- /dev/null
  +++ b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
  @@ -0,0 +1,63 @@
  +Samsung S6E3FA0 AMOLED LCD 5.7 inch panel
  +
  +Required properties:
  +  - compatible: samsung,s6e3fa0
  +  - reg: the virtual channel number of a DSI peripheral
  +  - vdd3-supply: core voltage supply
  +  - vci-supply: voltage supply for analog circuits
  +  - reset-gpio: a GPIO spec for the reset pin
  +  - det-gpio: a GPIO spec for the OLED detection pin
  +  - te-gpio: a GPIO spec for the TE pin
  +  - display-timings: timings for the connected panel as described by [1]
 
 Which properties of display-timings are relevant for CPU mode?
 I guess width and height. Anything more?
 
  +  - cpu-timings: CPU interface timings for the connected panel, and it
  contains
  +following optional properties.
  +  - cs-setup: clock cycles for the active period of address
  signal
  +enable until chip select is enable in CPU interface
  +  - wr-setup: clock cycles for the active period of CS signal
  enable
  +until write signal is enable in CPU interface
  +  - wr-act: clock cycles for the active period of CS enable in
  CPU
  +interface

What about calling this property wr-active ? I had called this wr-cycle in a 
previous implementation, that could be an option as well.

  +  - wr-hold: clock cycles for the active period of CS disable
  until
  +write signal is disable in CPU interface
 
 cpu-timings name does not sound to be related to display.
 I wonder if it would not be better to merge cpu-timings into
 display-timings but this will require more discussion I guess.

The panel has a memory-like interface with chip select, read/write and access 
strobe, address (1 bit) and data signals. The interface is defined in the MIPI 
DBI specification (a quick search turned up 
http://www.scribd.com/doc/206899854/MIPI-DPI-Specification-v2, there might be 
direct PDF downloads available), even if some panels implement a similar 
interface that predates MIPI DBI (with names such as i80 or SYS-80 probably 
due to the similarities with the 8051 external bus).

The cpu-timings properties describe the read and write access timings for 
those signals, unrelated to the display video timings. I thus believe that 
they should be separate from the display timings. We will probably need to add 
properties for the read signal as well, but that can be done later.

 If you want to stay with separate node please consider to make it
 optional as whole node or make some properties required. Making node
 required with all sub-properties optional is weird.
 By the way I hope all timings properties are generic for CPU mode,
 if not they should be prefixed by vendor or model.

The timings description should be pretty generic I believe, especially given 
that the interface is standardized by the MIPI alliance. Could you have a 
quick look at the spec and share your opinion ?

  +
  +Optional properties:
  +
  +The device node can contain one 'port' child node with one child
  +'endpoint' node, according to the bindings defined in [2]. This
  +node should describe panel's video bus.
  +
  +[1]: Documentation/devicetree/bindings/video/display-timing.txt
  +[2]: Documentation/devicetree/bindings/media/video-interfaces.txt
  +
  +Example:
  +
  +   panel@0 {
  +   compatible = samsung,s6e3fa0;
  +   reg = 0;
  +   vdd3-supply = vcclcd_reg;
  +   vci-supply = vlcd_reg;
  +   reset-gpio = gpy7 4 0;
  +   det-gpio = gpg0 6 0;
  +   te-gpio = gpd1 7 0;
  +
  +   display-timings {
  +   timing0: timing-0 {
  +   clock-frequency = 0;
  +   hactive = 1080;
  +   vactive = 1920;
  +   

Re: [PATCH v3 1/5] mfd: tps65090: Don't tell child devices we have an IRQ if we don't

2014-04-23 Thread Lee Jones
 If we weren't given an interrupt we shouldn't tell child devices (like
 the tps65090 charger) that they have an interrupt.  This is needed so
 that we can support polling mode in the tps65090 charger driver.
 
 See also (charger: tps65090: Allow charger module to be used when no
 irq).
 
 Signed-off-by: Doug Anderson diand...@chromium.org
 Acked-by: Lee Jones lee.jo...@linaro.org
 ---
 Changes in v3: None
 Changes in v2:
 - Split noirq (polling mode) changes into MFD and charger
 
  drivers/mfd/tps65090.c | 14 +++---
  1 file changed, 11 insertions(+), 3 deletions(-)

Applied, thanks.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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/5] mfd: tps65090: Stop caching most registers

2014-04-23 Thread Lee Jones
 Nearly all of the registers in tps65090 combine control bits and
 status bits.  Turn off caching of all registers except the select few
 that can be cached.
 
 In order to avoid adding more duplicate #defines, we also move some
 register offset definitions to the mfd driver (and resolve
 inconsistent names).
 
 Signed-off-by: Doug Anderson diand...@chromium.org
 ---
 Changes in v3: None
 Changes in v2:
 - Leave cache on for the registers that can be cached.
 - Move register offsets to mfd header file.
 
  drivers/mfd/tps65090.c   | 27 ++-
  drivers/power/tps65090-charger.c | 11 ---
  include/linux/mfd/tps65090.h | 14 ++
  3 files changed, 28 insertions(+), 24 deletions(-)

Applied now, thanks.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 4/5] regulator: tps65090: Allow setting the overcurrent wait time

2014-04-23 Thread Lee Jones
 The tps65090 regulator allows you to specify how long you want it to
 wait before detecting an overcurrent condition.  Allow specifying that
 through the device tree (or through platform data).
 
 Signed-off-by: Doug Anderson diand...@chromium.org
 Signed-off-by: Simon Glass s...@chromium.org
 Signed-off-by: Michael Spang sp...@chromium.org
 Signed-off-by: Sean Paul seanp...@chromium.org
 ---
 Changes in v3:
 - Fixed kernel-doc notation for return
 
 Changes in v2:
 - Separated the overcurrent and retries changes into two patches.
 - Now set overcurrent at probe time since it doesn't change.
 
  .../devicetree/bindings/regulator/tps65090.txt |  4 ++
  drivers/regulator/tps65090-regulator.c | 56 
 ++
  include/linux/mfd/tps65090.h   |  5 ++
  3 files changed, 65 insertions(+)

Applied, thanks.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 resend] clk: s2mps11: Add support for S2MPS14 clocks

2014-04-23 Thread Krzysztof Kozlowski
Hi,

Mike, can you apply this patch? Actually you acked it already [1] but I
forgot to put it in the commit message.

The patch wasn't applied in that time because of multiple concurrent
changes in sec-core drivers.

[1]http://thread.gmane.org/gmane.linux.kernel.samsung-soc/28039/focus=310279

Best regards,
Krzysztof



On pon, 2014-04-14 at 09:55 +0200, Krzysztof Kozlowski wrote:
 This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the
 s2mps11 clock driver.
 
 Signed-off-by: Krzysztof Kozlowski k.kozlow...@samsung.com
 Cc: Kyungmin Park kyungmin.p...@samsung.com
 Reviewed-by: Yadwinder Singh Brar yadi.b...@samsung.com
 Reviewed-by: Tomasz Figa t.f...@samsung.com
 ---
  drivers/clk/Kconfig   |  8 +++
  drivers/clk/clk-s2mps11.c | 61 
 +++
  2 files changed, 50 insertions(+), 19 deletions(-)
 
 diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
 index 6f56d3a4f010..8f9ce8ba036d 100644
 --- a/drivers/clk/Kconfig
 +++ b/drivers/clk/Kconfig
 @@ -65,12 +65,12 @@ config COMMON_CLK_SI570
 clock generators.
  
  config COMMON_CLK_S2MPS11
 - tristate Clock driver for S2MPS11/S5M8767 MFD
 + tristate Clock driver for S2MPS1X/S5M8767 MFD
   depends on MFD_SEC_CORE
   ---help---
 -   This driver supports S2MPS11/S5M8767 crystal oscillator clock. These
 -   multi-function devices have 3 fixed-rate oscillators, clocked at
 -   32KHz each.
 +   This driver supports S2MPS11/S2MPS14/S5M8767 crystal oscillator
 +   clock. These multi-function devices have two (S2MPS14) or three
 +   (S2MPS11, S5M8767) fixed-rate oscillators, clocked at 32KHz each.
  
  config CLK_TWL6040
   tristate External McPDM functional clock from twl6040
 diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
 index f2f62a1bf61a..b78eafeab038 100644
 --- a/drivers/clk/clk-s2mps11.c
 +++ b/drivers/clk/clk-s2mps11.c
 @@ -1,7 +1,7 @@
  /*
   * clk-s2mps11.c - Clock driver for S2MPS11.
   *
 - * Copyright (C) 2013 Samsung Electornics
 + * Copyright (C) 2013,2014 Samsung Electornics
   *
   * This program is free software; you can redistribute  it and/or modify it
   * under  the terms of  the GNU General  Public License as published by the
 @@ -13,10 +13,6 @@
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
 - * You should have received a copy of the GNU General Public License
 - * along with this program; if not, write to the Free Software
 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 - *
   */
  
  #include linux/module.h
 @@ -27,6 +23,7 @@
  #include linux/clk-provider.h
  #include linux/platform_device.h
  #include linux/mfd/samsung/s2mps11.h
 +#include linux/mfd/samsung/s2mps14.h
  #include linux/mfd/samsung/s5m8767.h
  #include linux/mfd/samsung/core.h
  
 @@ -125,7 +122,21 @@ static struct clk_init_data 
 s2mps11_clks_init[S2MPS11_CLKS_NUM] = {
   },
  };
  
 -static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev)
 +static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = {
 + [S2MPS11_CLK_AP] = {
 + .name = s2mps14_ap,
 + .ops = s2mps11_clk_ops,
 + .flags = CLK_IS_ROOT,
 + },
 + [S2MPS11_CLK_BT] = {
 + .name = s2mps14_bt,
 + .ops = s2mps11_clk_ops,
 + .flags = CLK_IS_ROOT,
 + },
 +};
 +
 +static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev,
 + struct clk_init_data *clks_init)
  {
   struct sec_pmic_dev *iodev = dev_get_drvdata(pdev-dev.parent);
   struct device_node *clk_np;
 @@ -145,9 +156,12 @@ static struct device_node *s2mps11_clk_parse_dt(struct 
 platform_device *pdev)
   if (!clk_table)
   return ERR_PTR(-ENOMEM);
  
 - for (i = 0; i  S2MPS11_CLKS_NUM; i++)
 + for (i = 0; i  S2MPS11_CLKS_NUM; i++) {
 + if (!clks_init[i].name)
 + continue; /* Skip clocks not present in some devices */
   of_property_read_string_index(clk_np, clock-output-names, i,
 - s2mps11_clks_init[i].name);
 + clks_init[i].name);
 + }
  
   return clk_np;
  }
 @@ -158,6 +172,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
   struct s2mps11_clk *s2mps11_clks, *s2mps11_clk;
   struct device_node *clk_np = NULL;
   unsigned int s2mps11_reg;
 + struct clk_init_data *clks_init;
   int i, ret = 0;
   u32 val;
  
 @@ -168,25 +183,33 @@ static int s2mps11_clk_probe(struct platform_device 
 *pdev)
  
   s2mps11_clk = s2mps11_clks;
  
 - clk_np = s2mps11_clk_parse_dt(pdev);
 - if (IS_ERR(clk_np))
 - return PTR_ERR(clk_np);
 -
   switch(platform_get_device_id(pdev)-driver_data) {
   case S2MPS11X:
   s2mps11_reg = S2MPS11_REG_RTC_CTRL;
 + clks_init = 

Re: [PATCH 3/3] usb: dwc3-exynos: Make provision for vdd regulators

2014-04-23 Thread Jingoo Han
On Wednesday, April 23, 2014 8:06 PM, Vivek Gautam wrote:
 On Wednesday, April 23, 2014 7:58 PM, Anton Tikhomirov wrote:
  On Wednesday, April 23, 2014 6:52 PM, Vivek Gautam wrote:
  On Wednesday, April 23, 2014 6:27 PM, Anton Tikhomirov wrote:
   On Monday, April 21, 2014 9:17 PM, Vivek Gautam wrote:
  
   Facilitate getting required 3.3V and 1.0V VDD supply for
   DWC3 controller on Exynos.
  
   With patches for regulators' nodes merged in 3.15:
   c8c253f ARM: dts: Add regulator entries to smdk5420
   275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
  
   certain perripherals will now need to ensure that,
   they request VDD regulators in their drivers, and enable
   them so as to make them working.
  
   Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
   Cc: Anton Tikhomirov av.tikhomi...@samsung.com
   ---
  
   Based on 'usb-next' branch of Greg's USB tree.
   Also cleanly applies on 'next' branch of Balbi's USB tree.
  
drivers/usb/dwc3/dwc3-exynos.c |   51
   ++--
1 file changed, 49 insertions(+), 2 deletions(-)
  
   diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-
   exynos.c
   index 28c8ad7..c9d9102 100644
   --- a/drivers/usb/dwc3/dwc3-exynos.c
   +++ b/drivers/usb/dwc3/dwc3-exynos.c
   @@ -27,6 +27,7 @@
#include linux/usb/usb_phy_gen_xceiv.h
#include linux/of.h
#include linux/of_platform.h
   +#include linux/regulator/consumer.h
  
struct dwc3_exynos {
 struct platform_device  *usb2_phy;
   @@ -34,6 +35,8 @@ struct dwc3_exynos {
 struct device   *dev;
  
 struct clk  *clk;
   + struct regulator*vdd33;
   + struct regulator*vdd10;
};
  
static int dwc3_exynos_register_phys(struct dwc3_exynos *exynos)
   @@ -144,20 +147,46 @@ static int dwc3_exynos_probe(struct
   platform_device *pdev)
  
 clk_prepare_enable(exynos-clk);
  
   + exynos-vdd33 = devm_regulator_get(dev, vdd33);
   + if (IS_ERR(exynos-vdd33)) {
   + ret = PTR_ERR(exynos-vdd33);
   + goto err2;
  
   Is regulator property mandatory for dwc3-exynos? If it is not
   and device tree doesn't provide it, dwc3-exynos driver probe
  shouldn't
   fail here.
 
  These are the VDD regulators (from PMIC ldo supplies), in absence of
  which the controller will not be powered up.
  So doesn't it make sense to stop the probe when these are not supplied
  by device tree ?
 
  Agree. Just curious, is there special reason for this change except making
  things right?
 
 Yea, actually after the patch (which got merged in 3.15 rc1)
 275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
 
 the USB stops working, and that's because the regulators related to
 usb are not turned on by default (ldo12 and ldo15 to be specific).
 So we need to enable those regulators, which ofcourse the driver
 should be doing, if i am not wrong.
 Similar is the reason for EHCI, and OHCI exynos patches in this series.

Oh, I see. Thank you for your explanation.

 
 I shall be sending the dt patch for this soon.

OK, I will wait for your patch.

Best regards,
Jingoo Han

 
 
 --
 Best Regards
 Vivek Gautam
 Samsung RD Institute, Bangalore
 India


--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 0/7] Add cros_ec changes for newer boards

2014-04-23 Thread Lee Jones
On Tue, 22 Apr 2014, Doug Anderson wrote:

 This series adds the most critical cros_ec changes for newer boards
 using cros_ec.  Specifically:
 * Fixes timing/locking issues with the previously upstreamed (but
   never used upstream) cros_ec_spi driver.
 * Updates the cros_ec header file to the latest version which allows
   us to use newer EC features like i2c tunneling.
 * Adds an i2c tunnel driver to allow communication to the EC's i2c
   devices.
 
 This _doesn't_ get the EC driver fully up to speed with what's in the
 current Chromium OS trees.  There are a whole slew of cleanup patches
 there, an addition of an LPC transport mode, and exports of functions
 to userspace.  Once these patches land and we have functionality we
 can continue to pick more cleanup patches.
 
 Changes in v2:
 - Update tunnel binding as per swarren
 - Removed i2c20 alias for i2c tunnel
 
 Bill Richardson (1):
   mfd: cros_ec: Sync to the latest cros_ec_commands.h from EC sources
 
 David Hendricks (1):
   mfd: cros_ec: spi: calculate delay between transfers correctly
 
 Doug Anderson (5):
   mfd: cros_ec: spi: Add mutex to cros_ec_spi
   mfd: cros_ec: spi: Make the cros_ec_spi timeout more reliable
   mfd: cros_ec: spi: Increase cros_ec_spi deadline from 5ms to 100ms
   i2c: ChromeOS EC tunnel driver
   ARM: tegra: Add the EC i2c tunnel to tegra124-venice2
 
  .../devicetree/bindings/i2c/i2c-cros-ec-tunnel.txt |   39 +
  arch/arm/boot/dts/tegra124-venice2.dts |   26 +
  drivers/i2c/busses/Kconfig |9 +
  drivers/i2c/busses/Makefile|1 +
  drivers/i2c/busses/i2c-cros-ec-tunnel.c|  304 ++
  drivers/mfd/cros_ec.c  |7 +-
  drivers/mfd/cros_ec_spi.c  |   67 +-
  include/linux/mfd/cros_ec.h|4 +-
  include/linux/mfd/cros_ec_commands.h   | 1128 
 ++--
  9 files changed, 1493 insertions(+), 92 deletions(-)
  create mode 100644 
 Documentation/devicetree/bindings/i2c/i2c-cros-ec-tunnel.txt
  create mode 100644 drivers/i2c/busses/i2c-cros-ec-tunnel.c

Need to wait for the ARM, DT and I2C guys to review, at which point
I'll be happy to take in and supply a branch for them to pull from if
required. If there are no _true_ dependencies and the MFD changes can
be added independently without fear of build breakages, let me know
and I'll apply them separately.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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/7] mfd: cros_ec: spi: calculate delay between transfers correctly

2014-04-23 Thread Lee Jones
 From: David Hendricks dhend...@chromium.org
 
 To avoid spamming the EC we calculate the time between the previous
 transfer and the current transfer and force a delay if the time delta
 is too small.
 
 However, a small miscalculation causes the delay period to be
 far too short. Most noticably this impacts commands with a long
 turnaround time such as EC firmware reads and writes.
 
 Signed-off-by: David Hendricks dhend...@chromium.org
 Signed-off-by: Doug Anderson diand...@chromium.org
 Reviewed-by: Simon Glass s...@chromium.org
 Tested-by: Andrew Bresticker abres...@chromium.org
 Tested-by: Stephen Warren swar...@nvidia.com
 ---
 Changes in v2: None
 
  drivers/mfd/cros_ec_spi.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

Waiting for other subsystems to Ack, so for now:
  Acked-by: Lee Jones lee.jo...@linaro.org

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 4/7] mfd: cros_ec: spi: Increase cros_ec_spi deadline from 5ms to 100ms

2014-04-23 Thread Lee Jones
On Tue, 22 Apr 2014, Doug Anderson wrote:

 We're adding i2c tunneling to the list of things that goes over
 cros_ec.  i2c tunneling can be slooow, so increase our deadline to
 100ms to account for that.
 
 Signed-off-by: Doug Anderson diand...@chromium.org
 Reviewed-by: Simon Glass s...@chromium.org
 Tested-by: Andrew Bresticker abres...@chromium.org
 Tested-by: Stephen Warren swar...@nvidia.com
 ---
 Changes in v2: None
 
  drivers/mfd/cros_ec_spi.c | 24 
  1 file changed, 16 insertions(+), 8 deletions(-)

Waiting for other subsystems to Ack, so for now:
  Acked-by: Lee Jones lee.jo...@linaro.org

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 6/7] i2c: ChromeOS EC tunnel driver

2014-04-23 Thread Lee Jones
On Tue, 22 Apr 2014, Doug Anderson wrote:

 On ARM Chromebooks we have a few devices that are accessed by both the
 AP (the main Application Processor) and the EC (the Embedded
 Controller).  These are:
 * The battery (sbs-battery).
 * The power management unit tps65090.
 
 On the original Samsung ARM Chromebook these devices were on an I2C
 bus that was shared between the AP and the EC and arbitrated using
 some extranal GPIOs (see i2c-arb-gpio-challenge).
 
 The original arbitration scheme worked well enough but had some
 downsides:
 * It was nonstandard (not using standard I2C multimaster)
 * It only worked if the EC-AP communication was I2C
 * It was relatively hard to debug problems (hard to tell if i2c issues
   were caused by the EC, the AP, or some device on the bus).
 
 On the HP Chromebook 11 the design was changed to:
 * The AP/EC comms were still i2c, but the battery/tps65090 were no
   longer on the bus used for AP/EC communication.  The battery was
   exposed to the AP through a limited i2c tunnel and tps65090 was
   exposed to the AP through a custom Linux driver.
 
 On the Samsung ARM Chromebook 2 the scheme is changed yet again, now:
 * The AP/EC comms are now using SPI for faster speeds.
 * The EC's i2c bus is exposed to the AP through a full i2c tunnel.
 
 The upstream tegra124-venice2 uses the same scheme as the Samsung
 ARM Chromebook 2, though it has a different set of components on the
 other side of the bus.
 
 This driver supports the scheme used by the Samsung ARM Chromebook 2.
 Future patches to this driver could add support for the battery tunnel
 on the HP Chromebook 11 (and perhaps could even be used to access
 tps65090 on the HP Chromebook 11 instead of using a special driver,
 but I haven't researched that enough).
 
 Signed-off-by: Vincent Palatin vpala...@chromium.org
 Signed-off-by: Simon Glass s...@chromium.org
 Signed-off-by: Doug Anderson diand...@chromium.org
 Tested-by: Andrew Bresticker abres...@chromium.org
 Tested-by: Stephen Warren swar...@nvidia.com
 ---
 Changes in v2:
 - Update tunnel binding as per swarren
 
  .../devicetree/bindings/i2c/i2c-cros-ec-tunnel.txt |  39 +++
  drivers/i2c/busses/Kconfig |   9 +
  drivers/i2c/busses/Makefile|   1 +
  drivers/i2c/busses/i2c-cros-ec-tunnel.c| 304 
 +
  drivers/mfd/cros_ec.c  |   5 +

For the MFD changes:
  Acked-by: Lee Jones lee.jo...@linaro.org

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 5/7] mfd: cros_ec: Sync to the latest cros_ec_commands.h from EC sources

2014-04-23 Thread Lee Jones
On Tue, 22 Apr 2014, Doug Anderson wrote:

 From: Bill Richardson wfric...@chromium.org
 
 This just updates include/linux/mfd/cros_ec_commands.h to match the
 latest EC version (which is the One True Source for such things).  See
 https://chromium.googlesource.com/chromiumos/platform/ec
 
 [dianders: took today's ToT version from the Chromium OS EC; deleted
 references to cros_ec_dev and cros_ec_lpc since those aren't upstream
 yet]
 
 Signed-off-by: Bill Richardson wfric...@chromium.org
 Signed-off-by: Doug Anderson diand...@chromium.org
 Reviewed-by: Simon Glass s...@chromium.org
 Tested-by: Andrew Bresticker abres...@chromium.org
 Tested-by: Stephen Warren swar...@nvidia.com
 ---
 Changes in v2: None
 
  drivers/mfd/cros_ec.c|2 +-
  include/linux/mfd/cros_ec.h  |4 +-
  include/linux/mfd/cros_ec_commands.h | 1128 
 +++---
  3 files changed, 1059 insertions(+), 75 deletions(-)

Waiting for other subsystems to Ack, so for now:
  Acked-by: Lee Jones lee.jo...@linaro.org

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] usb: ohci-exynos: Make provision for vdd regulators

2014-04-23 Thread Jingoo Han
On Monday, April 21, 2014 9:17 PM, Vivek Gautam wrote:
 
 Facilitate getting required 3.3V and 1.0V VDD supply for
 OHCI controller on Exynos.
 
 With patches for regulators' nodes merged in 3.15:
 c8c253f ARM: dts: Add regulator entries to smdk5420
 275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
 
 certain perripherals will now need to ensure that,
 they request VDD regulators in their drivers, and enable
 them so as to make them working.
 
 Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
 Cc: Jingoo Han jg1@samsung.com

Acked-by: Jingoo Han jg1@samsung.com

Best regards,
Jingoo Han

 ---
 
 Based on 'usb-next' branch of Greg's usb tree.
 
  drivers/usb/host/ohci-exynos.c |   47 
 
  1 file changed, 47 insertions(+)
 
 diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c
 index 68588d8..e2e72a8 100644
 --- a/drivers/usb/host/ohci-exynos.c
 +++ b/drivers/usb/host/ohci-exynos.c
 @@ -18,6 +18,7 @@
  #include linux/module.h
  #include linux/of.h
  #include linux/platform_device.h
 +#include linux/regulator/consumer.h
  #include linux/usb/phy.h
  #include linux/usb/samsung_usb_phy.h
  #include linux/usb.h
 @@ -37,6 +38,8 @@ struct exynos_ohci_hcd {
   struct clk *clk;
   struct usb_phy *phy;
   struct usb_otg *otg;
 + struct regulator *vdd33;
 + struct regulator *vdd10;
  };
 
  static void exynos_ohci_phy_enable(struct platform_device *pdev)
 @@ -98,6 +101,28 @@ static int exynos_ohci_probe(struct platform_device *pdev)
   exynos_ohci-otg = phy-otg;
   }
 
 + exynos_ohci-vdd33 = devm_regulator_get(pdev-dev, vdd33);
 + if (IS_ERR(exynos_ohci-vdd33)) {
 + err = PTR_ERR(exynos_ohci-vdd33);
 + goto fail_regulator1;
 + }
 + err = regulator_enable(exynos_ohci-vdd33);
 + if (err) {
 + dev_err(pdev-dev, Failed to enable VDD33 supply\n);
 + goto fail_regulator1;
 + }
 +
 + exynos_ohci-vdd10 = devm_regulator_get(pdev-dev, vdd10);
 + if (IS_ERR(exynos_ohci-vdd10)) {
 + err = PTR_ERR(exynos_ohci-vdd10);
 + goto fail_regulator2;
 + }
 + err = regulator_enable(exynos_ohci-vdd10);
 + if (err) {
 + dev_err(pdev-dev, Failed to enable VDD10 supply\n);
 + goto fail_regulator2;
 + }
 +
  skip_phy:
   exynos_ohci-clk = devm_clk_get(pdev-dev, usbhost);
 
 @@ -154,6 +179,10 @@ fail_add_hcd:
  fail_io:
   clk_disable_unprepare(exynos_ohci-clk);
  fail_clk:
 + regulator_disable(exynos_ohci-vdd10);
 +fail_regulator2:
 + regulator_disable(exynos_ohci-vdd33);
 +fail_regulator1:
   usb_put_hcd(hcd);
   return err;
  }
 @@ -172,6 +201,9 @@ static int exynos_ohci_remove(struct platform_device 
 *pdev)
 
   clk_disable_unprepare(exynos_ohci-clk);
 
 + regulator_disable(exynos_ohci-vdd10);
 + regulator_disable(exynos_ohci-vdd33);
 +
   usb_put_hcd(hcd);
 
   return 0;
 @@ -208,6 +240,9 @@ static int exynos_ohci_suspend(struct device *dev)
 
   clk_disable_unprepare(exynos_ohci-clk);
 
 + regulator_disable(exynos_ohci-vdd10);
 + regulator_disable(exynos_ohci-vdd33);
 +
   spin_unlock_irqrestore(ohci-lock, flags);
 
   return 0;
 @@ -218,6 +253,18 @@ static int exynos_ohci_resume(struct device *dev)
   struct usb_hcd *hcd = dev_get_drvdata(dev);
   struct exynos_ohci_hcd *exynos_ohci = to_exynos_ohci(hcd);
   struct platform_device *pdev= to_platform_device(dev);
 + int ret;
 +
 + ret = regulator_enable(exynos_ohci-vdd33);
 + if (ret) {
 + dev_err(dev, Failed to enable VDD33 supply\n);
 + return ret;
 + }
 + ret = regulator_enable(exynos_ohci-vdd10);
 + if (ret) {
 + dev_err(dev, Failed to enable VDD10 supply\n);
 + return ret;
 + }
 
   clk_prepare_enable(exynos_ohci-clk);
 
 --
 1.7.10.4

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 3/7] mfd: cros_ec: spi: Make the cros_ec_spi timeout more reliable

2014-04-23 Thread Lee Jones
On Tue, 22 Apr 2014, Doug Anderson wrote:

 The cros_ec_spi transfer had two problems with its timeout code:
 
 1. It looked at the timeout even in the case that it found valid data.
 2. If the cros_ec_spi code got switched out for a while, it's possible
it could get a timeout after a single loop.  Let's be paranoid and
make sure we do one last transfer after the timeout expires.
 
 Signed-off-by: Doug Anderson diand...@chromium.org
 Reviewed-by: Simon Glass s...@chromium.org
 Tested-by: Andrew Bresticker abres...@chromium.org
 Tested-by: Stephen Warren swar...@nvidia.com
 ---
 Changes in v2: None
 
  drivers/mfd/cros_ec_spi.c | 15 ---
  1 file changed, 12 insertions(+), 3 deletions(-)

Waiting for other subsystems to Ack, so for now:
  Acked-by: Lee Jones lee.jo...@linaro.org

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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/3] usb: ehci-exynos: Make provision for vdd regulators

2014-04-23 Thread Jingoo Han
On Monday, April 21, 2014 9:17 PM, Vivek Gautam wrote:
 
 Facilitate getting required 3.3V and 1.0V VDD supply for
 EHCI controller on Exynos.
 
 With patches for regulators' nodes merged in 3.15:
 c8c253f ARM: dts: Add regulator entries to smdk5420
 275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
 
 certain perripherals will now need to ensure that,
 they request VDD regulators in their drivers, and enable
 them so as to make them working.
 
 Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
 Cc: Jingoo Han jg1@samsung.com

Acked-by: Jingoo Han jg1@samsung.com

Best regards,
Jingoo Han

 ---
 
 Based on 'usb-next' branch of Greg's usb tree.
 
  drivers/usb/host/ehci-exynos.c |   47 
 
  1 file changed, 47 insertions(+)
 
 diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c
 index d1d8c47..a3ca8cc 100644
 --- a/drivers/usb/host/ehci-exynos.c
 +++ b/drivers/usb/host/ehci-exynos.c
 @@ -20,6 +20,7 @@
  #include linux/of.h
  #include linux/of_gpio.h
  #include linux/platform_device.h
 +#include linux/regulator/consumer.h
  #include linux/usb/phy.h
  #include linux/usb/samsung_usb_phy.h
  #include linux/usb.h
 @@ -46,6 +47,8 @@ struct exynos_ehci_hcd {
   struct clk *clk;
   struct usb_phy *phy;
   struct usb_otg *otg;
 + struct regulator *vdd33;
 + struct regulator *vdd10;
  };
 
  #define to_exynos_ehci(hcd) (struct exynos_ehci_hcd 
 *)(hcd_to_ehci(hcd)-priv)
 @@ -112,6 +115,28 @@ static int exynos_ehci_probe(struct platform_device 
 *pdev)
   exynos_ehci-otg = phy-otg;
   }
 
 + exynos_ehci-vdd33 = devm_regulator_get(pdev-dev, vdd33);
 + if (IS_ERR(exynos_ehci-vdd33)) {
 + err = PTR_ERR(exynos_ehci-vdd33);
 + goto fail_regulator1;
 + }
 + err = regulator_enable(exynos_ehci-vdd33);
 + if (err) {
 + dev_err(pdev-dev, Failed to enable VDD33 supply\n);
 + goto fail_regulator1;
 + }
 +
 + exynos_ehci-vdd10 = devm_regulator_get(pdev-dev, vdd10);
 + if (IS_ERR(exynos_ehci-vdd10)) {
 + err = PTR_ERR(exynos_ehci-vdd10);
 + goto fail_regulator2;
 + }
 + err = regulator_enable(exynos_ehci-vdd10);
 + if (err) {
 + dev_err(pdev-dev, Failed to enable VDD10 supply\n);
 + goto fail_regulator2;
 + }
 +
  skip_phy:
 
   exynos_ehci-clk = devm_clk_get(pdev-dev, usbhost);
 @@ -178,6 +203,10 @@ fail_add_hcd:
  fail_io:
   clk_disable_unprepare(exynos_ehci-clk);
  fail_clk:
 + regulator_disable(exynos_ehci-vdd10);
 +fail_regulator2:
 + regulator_disable(exynos_ehci-vdd33);
 +fail_regulator1:
   usb_put_hcd(hcd);
   return err;
  }
 @@ -197,6 +226,9 @@ static int exynos_ehci_remove(struct platform_device 
 *pdev)
 
   clk_disable_unprepare(exynos_ehci-clk);
 
 + regulator_disable(exynos_ehci-vdd10);
 + regulator_disable(exynos_ehci-vdd33);
 +
   usb_put_hcd(hcd);
 
   return 0;
 @@ -221,6 +253,9 @@ static int exynos_ehci_suspend(struct device *dev)
 
   clk_disable_unprepare(exynos_ehci-clk);
 
 + regulator_disable(exynos_ehci-vdd10);
 + regulator_disable(exynos_ehci-vdd33);
 +
   return rc;
  }
 
 @@ -228,6 +263,18 @@ static int exynos_ehci_resume(struct device *dev)
  {
   struct usb_hcd *hcd = dev_get_drvdata(dev);
   struct exynos_ehci_hcd *exynos_ehci = to_exynos_ehci(hcd);
 + int ret;
 +
 + ret = regulator_enable(exynos_ehci-vdd33);
 + if (ret) {
 + dev_err(dev, Failed to enable VDD33 supply\n);
 + return ret;
 + }
 + ret = regulator_enable(exynos_ehci-vdd10);
 + if (ret) {
 + dev_err(dev, Failed to enable VDD10 supply\n);
 + return ret;
 + }
 
   clk_prepare_enable(exynos_ehci-clk);
 
 --
 1.7.10.4

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 2/7] mfd: cros_ec: spi: Add mutex to cros_ec_spi

2014-04-23 Thread Lee Jones
On Tue, 22 Apr 2014, Doug Anderson wrote:

 The main transfer function for cros_ec_spi can be called by more than
 one client at a time.  Make sure that those clients don't stomp on
 each other by locking the bus for the duration of the transfer
 function.
 
 Signed-off-by: Doug Anderson diand...@chromium.org
 Reviewed-by: Simon Glass s...@chromium.org
 Tested-by: Andrew Bresticker abres...@chromium.org
 Tested-by: Stephen Warren swar...@nvidia.com
 ---
 Changes in v2: None
 
  drivers/mfd/cros_ec_spi.c | 26 +-
  1 file changed, 21 insertions(+), 5 deletions(-)

Waiting for other subsystems to Ack, so for now:
  Acked-by: Lee Jones lee.jo...@linaro.org

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC v2 PATCH v4 09/14] ARM: dts: s6e3fa0: add DT bindings

2014-04-23 Thread Andrzej Hajda
On 04/23/2014 01:34 PM, Laurent Pinchart wrote:
 Hi Andrzej,

 On Wednesday 23 April 2014 11:02:21 Andrzej Hajda wrote:
 On 04/21/2014 02:28 PM, YoungJun Cho wrote:
 This patch adds DT bindings for s6e3fa0 panel.
 The bindings describes panel resources, display timings and cpu timings.

 Changelog v2:
 - Adds unit address (commented by Sachin Kamat)
 Changelog v3:
 - Removes optional delay, size properties (commented by Laurent Pinchart)
 - Adds OLED detection, TE gpio properties
 Changelog v4:
 - Moves CPU timings relevant properties from FIMD DT

   (commeted by Laurent Pinchart, Andrzej Hajda)

 Signed-off-by: YoungJun Cho yj44@samsung.com
 Acked-by: Inki Dae inki@samsung.com
 Acked-by: Kyungmin Park kyungmin.p...@samsung.com
 ---

  .../devicetree/bindings/panel/samsung,s6e3fa0.txt  |   63 +++
 1 file changed, 63 insertions(+)
  create mode 100644
  Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt 
 diff --git a/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt new file
 mode 100644
 index 000..9eeb38b
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 @@ -0,0 +1,63 @@
 +Samsung S6E3FA0 AMOLED LCD 5.7 inch panel
 +
 +Required properties:
 +  - compatible: samsung,s6e3fa0
 +  - reg: the virtual channel number of a DSI peripheral
 +  - vdd3-supply: core voltage supply
 +  - vci-supply: voltage supply for analog circuits
 +  - reset-gpio: a GPIO spec for the reset pin
 +  - det-gpio: a GPIO spec for the OLED detection pin
 +  - te-gpio: a GPIO spec for the TE pin
 +  - display-timings: timings for the connected panel as described by [1]
 Which properties of display-timings are relevant for CPU mode?
 I guess width and height. Anything more?

 +  - cpu-timings: CPU interface timings for the connected panel, and it
 contains
 +following optional properties.
 +  - cs-setup: clock cycles for the active period of address
 signal
 +enable until chip select is enable in CPU interface
 +  - wr-setup: clock cycles for the active period of CS signal
 enable
 +until write signal is enable in CPU interface
 +  - wr-act: clock cycles for the active period of CS enable in
 CPU
 +interface
 What about calling this property wr-active ? I had called this wr-cycle in a 
 previous implementation, that could be an option as well.

 +  - wr-hold: clock cycles for the active period of CS disable
 until
 +write signal is disable in CPU interface
 cpu-timings name does not sound to be related to display.
 I wonder if it would not be better to merge cpu-timings into
 display-timings but this will require more discussion I guess.
 The panel has a memory-like interface with chip select, read/write and access 
 strobe, address (1 bit) and data signals. The interface is defined in the 
 MIPI 
 DBI specification (a quick search turned up 
 http://www.scribd.com/doc/206899854/MIPI-DPI-Specification-v2, there might be 
 direct PDF downloads available), even if some panels implement a similar 
 interface that predates MIPI DBI (with names such as i80 or SYS-80 probably 
 due to the similarities with the 8051 external bus).

 The cpu-timings properties describe the read and write access timings for 
 those signals, unrelated to the display video timings. I thus believe that 
 they should be separate from the display timings. We will probably need to 
 add 
 properties for the read signal as well, but that can be done later.

cpu-timings suggests these timings are for CPU, but they are for display
panel in CPU mode.
I though rather about something like display-cpu-timings or i80-timings,
just to avoid confusion.

Regards
Andrzej

 If you want to stay with separate node please consider to make it
 optional as whole node or make some properties required. Making node
 required with all sub-properties optional is weird.
 By the way I hope all timings properties are generic for CPU mode,
 if not they should be prefixed by vendor or model.
 The timings description should be pretty generic I believe, especially given 
 that the interface is standardized by the MIPI alliance. Could you have a 
 quick look at the spec and share your opinion ?

 +
 +Optional properties:
 +
 +The device node can contain one 'port' child node with one child
 +'endpoint' node, according to the bindings defined in [2]. This
 +node should describe panel's video bus.
 +
 +[1]: Documentation/devicetree/bindings/video/display-timing.txt
 +[2]: Documentation/devicetree/bindings/media/video-interfaces.txt
 +
 +Example:
 +
 +   panel@0 {
 +   compatible = samsung,s6e3fa0;
 +   reg = 0;
 +   vdd3-supply = vcclcd_reg;
 +   vci-supply = vlcd_reg;
 +   reset-gpio = gpy7 4 0;
 +   det-gpio = gpg0 6 0;
 +   te-gpio = gpd1 7 0;
 +
 +   display-timings {
 +   

[PATCH 0/3] Add MFCv8 support

2014-04-23 Thread Arun Kumar K
This patchset adds MFCv8 support to the s5p-mfc driver.
MFCv8 has the same operation sequence as that of v6+, but
there is some shuffling of the registers happened. So to
re-use the exisiting code, register access uses context
variables instead of macros.
The patchset modifies opr_v6 file to use register variables
and is tested on mfc v6, v7 and v8 based boards.

The patchset is based on the following set of patches
posted for MFC which are currently under review:

[media] s5p-mfc: Add support for resolution change event
v4l: Add resolution change event.
[media] s5p-mfc: Don't allocate codec buffers on STREAMON.
[media] s5p-mfc: Extract open/close MFC instance commands.
[media] s5p-mfc: Fixes for decode REQBUFS.
[media] s5p-mfc: Copy timestamps only when a frame is produced.
[media] s5p-mfc: add init buffer cmd to MFCV6
[media] s5p-mfc: Don't try to resubmit VP8 bitstream buffer for decode.
[media] s5p-mfc: Add a control for IVF format for VP8 encoder

Arun Kumar K (1):
  [media] s5p-mfc: Rename IS_MFCV7 macro

Kiran AVND (2):
  [media] s5p-mfc: Add variants to access mfc registers
  [media] s5p-mfc: Core support to add v8 decoder

 .../devicetree/bindings/media/s5p-mfc.txt  |3 +-
 drivers/media/platform/s5p-mfc/regs-mfc-v8.h   |   93 +++
 drivers/media/platform/s5p-mfc/s5p_mfc.c   |   31 +
 drivers/media/platform/s5p-mfc/s5p_mfc_common.h|7 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_dec.c   |4 +
 drivers/media/platform/s5p-mfc/s5p_mfc_enc.c   |2 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_opr.c   |6 +
 drivers/media/platform/s5p-mfc/s5p_mfc_opr.h   |  254 +++
 drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c|  792 +---
 drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.h|7 +-
 10 files changed, 926 insertions(+), 273 deletions(-)
 create mode 100644 drivers/media/platform/s5p-mfc/regs-mfc-v8.h

-- 
1.7.9.5

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


[PATCH 2/3] [media] s5p-mfc: Core support to add v8 decoder

2014-04-23 Thread Arun Kumar K
From: Kiran AVND avnd.ki...@samsung.com

This patch adds variant data and core support for
V8 decoder. This patch also adds the register definition
file for new firmware version v8 for MFC.

Signed-off-by: Kiran AVND avnd.ki...@samsung.com
Signed-off-by: Pawel Osciak posc...@chromium.org
Signed-off-by: Arun Kumar K arun...@samsung.com
---
 .../devicetree/bindings/media/s5p-mfc.txt  |3 +-
 drivers/media/platform/s5p-mfc/regs-mfc-v8.h   |   93 
 drivers/media/platform/s5p-mfc/s5p_mfc.c   |   30 +++
 drivers/media/platform/s5p-mfc/s5p_mfc_common.h|4 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_dec.c   |4 +
 drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c|   85 --
 6 files changed, 209 insertions(+), 10 deletions(-)
 create mode 100644 drivers/media/platform/s5p-mfc/regs-mfc-v8.h

diff --git a/Documentation/devicetree/bindings/media/s5p-mfc.txt 
b/Documentation/devicetree/bindings/media/s5p-mfc.txt
index f418168..3e3c5f3 100644
--- a/Documentation/devicetree/bindings/media/s5p-mfc.txt
+++ b/Documentation/devicetree/bindings/media/s5p-mfc.txt
@@ -10,7 +10,8 @@ Required properties:
   - compatible : value should be either one among the following
(a) samsung,mfc-v5 for MFC v5 present in Exynos4 SoCs
(b) samsung,mfc-v6 for MFC v6 present in Exynos5 SoCs
-   (b) samsung,mfc-v7 for MFC v7 present in Exynos5420 SoC
+   (c) samsung,mfc-v7 for MFC v7 present in Exynos5420 SoC
+   (d) samsung,mfc-v8 for MFC v8 present in Exynos5800 SoC
 
   - reg : Physical base address of the IP registers and length of memory
  mapped region.
diff --git a/drivers/media/platform/s5p-mfc/regs-mfc-v8.h 
b/drivers/media/platform/s5p-mfc/regs-mfc-v8.h
new file mode 100644
index 000..747907c
--- /dev/null
+++ b/drivers/media/platform/s5p-mfc/regs-mfc-v8.h
@@ -0,0 +1,93 @@
+/*
+ * Register definition file for Samsung MFC V8.x Interface (FIMV) driver
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * http://www.samsung.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.
+ */
+
+#ifndef _REGS_MFC_V8_H
+#define _REGS_MFC_V8_H
+
+#include regs-mfc-v7.h
+
+/* Additional registers for v8 */
+#define S5P_FIMV_D_MVC_NUM_VIEWS_V80xf104
+#define S5P_FIMV_D_FIRST_PLANE_DPB_SIZE_V8 0xf144
+#define S5P_FIMV_D_SECOND_PLANE_DPB_SIZE_V80xf148
+#define S5P_FIMV_D_MV_BUFFER_SIZE_V8   0xf150
+
+#define S5P_FIMV_D_FIRST_PLANE_DPB_STRIDE_SIZE_V8  0xf138
+#define S5P_FIMV_D_SECOND_PLANE_DPB_STRIDE_SIZE_V8 0xf13c
+
+#define S5P_FIMV_D_FIRST_PLANE_DPB_V8  0xf160
+#define S5P_FIMV_D_SECOND_PLANE_DPB_V8 0xf260
+#define S5P_FIMV_D_MV_BUFFER_V80xf460
+
+#define S5P_FIMV_D_NUM_MV_V8   0xf134
+#define S5P_FIMV_D_INIT_BUFFER_OPTIONS_V8  0xf154
+
+#define S5P_FIMV_D_SCRATCH_BUFFER_ADDR_V8  0xf560
+#define S5P_FIMV_D_SCRATCH_BUFFER_SIZE_V8  0xf564
+
+#define S5P_FIMV_D_CPB_BUFFER_ADDR_V8  0xf5b0
+#define S5P_FIMV_D_CPB_BUFFER_SIZE_V8  0xf5b4
+#define S5P_FIMV_D_AVAILABLE_DPB_FLAG_LOWER_V8 0xf5bc
+#define S5P_FIMV_D_CPB_BUFFER_OFFSET_V80xf5c0
+#define S5P_FIMV_D_SLICE_IF_ENABLE_V8  0xf5c4
+#define S5P_FIMV_D_STREAM_DATA_SIZE_V8 0xf5d0
+
+/* Display information register */
+#define S5P_FIMV_D_DISPLAY_FRAME_WIDTH_V8  0xf600
+#define S5P_FIMV_D_DISPLAY_FRAME_HEIGHT_V8 0xf604
+
+/* Display status */
+#define S5P_FIMV_D_DISPLAY_STATUS_V8   0xf608
+
+#define S5P_FIMV_D_DISPLAY_FIRST_PLANE_ADDR_V8 0xf60c
+#define S5P_FIMV_D_DISPLAY_SECOND_PLANE_ADDR_V80xf610
+
+#define S5P_FIMV_D_DISPLAY_FRAME_TYPE_V8   0xf618
+#define S5P_FIMV_D_DISPLAY_CROP_INFO1_V8   0xf61c
+#define S5P_FIMV_D_DISPLAY_CROP_INFO2_V8   0xf620
+#define S5P_FIMV_D_DISPLAY_PICTURE_PROFILE_V8  0xf624
+
+/* Decoded picture information register */
+#define S5P_FIMV_D_DECODED_STATUS_V8   0xf644
+#define S5P_FIMV_D_DECODED_FIRST_PLANE_ADDR_V8 0xf648
+#define S5P_FIMV_D_DECODED_SECOND_PLANE_ADDR_V80xf64c
+#define S5P_FIMV_D_DECODED_THIRD_PLANE_ADDR_V8 0xf650
+#define S5P_FIMV_D_DECODED_FRAME_TYPE_V8   0xf654
+#define S5P_FIMV_D_DECODED_NAL_SIZE_V8  0xf664
+
+/* Returned value register for specific setting */
+#define S5P_FIMV_D_RET_PICTURE_TAG_TOP_V8  0xf674
+#define S5P_FIMV_D_RET_PICTURE_TAG_BOT_V8  0xf678
+#define S5P_FIMV_D_MVC_VIEW_ID_V8  0xf6d8
+
+/* SEI related information */
+#define S5P_FIMV_D_FRAME_PACK_SEI_AVAIL_V8 0xf6dc
+
+/* MFCv8 Context buffer sizes */
+#define MFC_CTX_BUF_SIZE_V8(30 * SZ_1K)/*  30KB */
+#define MFC_H264_DEC_CTX_BUF_SIZE_V8   (2 * SZ_1M) /*  2MB */
+#define MFC_OTHER_DEC_CTX_BUF_SIZE_V8  (20 * SZ_1K)/*  20KB */
+
+/* Buffer size defines */

Re: [PATCH 06/10] ARM: EXYNOS: Add support for mapping PMU base address via DT

2014-04-23 Thread Vikas Sajjan
Hi,

On Wed, Apr 2, 2014 at 1:20 PM, Pankaj Dubey pankaj.du...@samsung.com wrote:
 From: Young-Gun Jang yg1004.j...@samsung.com

 Add support for mapping Exynos Power Management Unit (PMU) base address
 from device tree. Code will use existing samsung pmu binding information.
 This patch also adds get_exynos_pmubase a helper function to return mapped 
 base
 address to various other files under mach-exynos.

 Signed-off-by: Young-Gun Jang yg1004.j...@samsung.com
 Signed-off-by: Pankaj Dubey pankaj.du...@samsung.com
 ---
  arch/arm/mach-exynos/common.h |2 ++
  arch/arm/mach-exynos/exynos.c |   44 
 +
  2 files changed, 46 insertions(+)

 diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h
 index ff28334..9a55cf6 100644
 --- a/arch/arm/mach-exynos/common.h
 +++ b/arch/arm/mach-exynos/common.h
 @@ -61,4 +61,6 @@ struct exynos_pmu_conf {

  extern void exynos_sys_powerdown_conf(enum sys_powerdown mode);

 +extern void __iomem *get_exynos_pmubase(void);
 +
  #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */
 diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c
 index a5e1349..a5127fb 100644
 --- a/arch/arm/mach-exynos/exynos.c
 +++ b/arch/arm/mach-exynos/exynos.c
 @@ -35,6 +35,8 @@
  #define L2_AUX_VAL 0x7C470001
  #define L2_AUX_MASK 0xC200

 +static void __iomem *exynos_pmu_base __initdata;

Are you sure you want to keep exynos_pmu_base in .init section.
I am seeing a crash in platform_do_lowpower()
I think you should remove __initdata.

 +
  static struct map_desc exynos4_iodesc[] __initdata = {
 {
 .virtual= (unsigned long)S3C_VA_SYS,
 @@ -245,6 +247,47 @@ void __init exynos_init_late(void)
 exynos_pm_init();
  }

 +static char const *exynos_dt_pmu_match[] __initconst = {
 +   samsung,exynos4210-pmu,
 +   samsung,exynos4212-pmu,
 +   samsung,exynos4412-pmu,
 +   samsung,exynos5250-pmu,
 +   NULL
 +};
 +
 +static int __init exynos_fdt_map_pmu(unsigned long node,
 +   const char *uname, int depth, void *data)
 +{
 +   struct map_desc iodesc;
 +   __be32 *reg;
 +   unsigned long len;
 +
 +   if (of_flat_dt_match(node, exynos_dt_pmu_match)) {
 +   phys_addr_t phys_addr;
 +   reg = of_get_flat_dt_prop(node, reg, len);
 +   if (reg == NULL || len != (sizeof(unsigned long) * 2))
 +   return 0;
 +
 +   phys_addr = be32_to_cpu(reg[0]);
 +   iodesc.pfn = __phys_to_pfn(phys_addr);
 +   iodesc.length = be32_to_cpu(reg[1]) - 1;
 +   iodesc.virtual = (unsigned long)S5P_VA_PMU;
 +   iodesc.type = MT_DEVICE;
 +   iotable_init(iodesc, 1);
 +
 +   exynos_pmu_base = ioremap(phys_addr, be32_to_cpu(reg[1]));
 +   if (WARN_ON(!exynos_pmu_base))
 +   return -EFAULT;
 +   }
 +
 +   return 0;
 +}
 +
 +inline void __iomem *get_exynos_pmubase()
 +{
 +   return exynos_pmu_base;
 +}
 +
  static int __init exynos_fdt_map_chipid(unsigned long node, const char 
 *uname,
 int depth, void *data)
  {
 @@ -301,6 +344,7 @@ void __init exynos_init_io(void)
 debug_ll_io_init();

 of_scan_flat_dt(exynos_fdt_map_chipid, NULL);
 +   of_scan_flat_dt(exynos_fdt_map_pmu, NULL);

 /* detect cpu id and rev. */
 s5p_init_cpu(S5P_VA_CHIPID);
 --
 1.7.10.4

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


Re: [RFC v2 PATCH v4 09/14] ARM: dts: s6e3fa0: add DT bindings

2014-04-23 Thread Andrzej Hajda
On 04/23/2014 02:55 PM, Laurent Pinchart wrote:
 Hi Andrzej,

 On Wednesday 23 April 2014 14:48:31 Andrzej Hajda wrote:
 On 04/23/2014 01:34 PM, Laurent Pinchart wrote:
 On Wednesday 23 April 2014 11:02:21 Andrzej Hajda wrote:
 On 04/21/2014 02:28 PM, YoungJun Cho wrote:
 This patch adds DT bindings for s6e3fa0 panel.
 The bindings describes panel resources, display timings and cpu timings.

 Changelog v2:
 - Adds unit address (commented by Sachin Kamat)
 Changelog v3:
 - Removes optional delay, size properties (commented by Laurent
 Pinchart)
 - Adds OLED detection, TE gpio properties
 Changelog v4:
 - Moves CPU timings relevant properties from FIMD DT

   (commeted by Laurent Pinchart, Andrzej Hajda)

 Signed-off-by: YoungJun Cho yj44@samsung.com
 Acked-by: Inki Dae inki@samsung.com
 Acked-by: Kyungmin Park kyungmin.p...@samsung.com
 ---

  .../devicetree/bindings/panel/samsung,s6e3fa0.txt  |   63
  +++

 1 file changed, 63 insertions(+)

  create mode 100644
  Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt

 diff --git a/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt new file
 mode 100644
 index 000..9eeb38b
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/panel/samsung,s6e3fa0.txt
 @@ -0,0 +1,63 @@
 +Samsung S6E3FA0 AMOLED LCD 5.7 inch panel
 +
 +Required properties:
 +  - compatible: samsung,s6e3fa0
 +  - reg: the virtual channel number of a DSI peripheral
 +  - vdd3-supply: core voltage supply
 +  - vci-supply: voltage supply for analog circuits
 +  - reset-gpio: a GPIO spec for the reset pin
 +  - det-gpio: a GPIO spec for the OLED detection pin
 +  - te-gpio: a GPIO spec for the TE pin
 +  - display-timings: timings for the connected panel as described by
 [1]
 Which properties of display-timings are relevant for CPU mode?
 I guess width and height. Anything more?

 +  - cpu-timings: CPU interface timings for the connected panel, and it
 contains
 +following optional properties.
 +  - cs-setup: clock cycles for the active period of address
 signal
 +enable until chip select is enable in CPU interface
 +  - wr-setup: clock cycles for the active period of CS signal
 enable
 +until write signal is enable in CPU interface
 +  - wr-act: clock cycles for the active period of CS enable in
 CPU
 +interface
 What about calling this property wr-active ? I had called this wr-cycle in
 a previous implementation, that could be an option as well.

 +  - wr-hold: clock cycles for the active period of CS disable
 until
 +write signal is disable in CPU interface
 cpu-timings name does not sound to be related to display.
 I wonder if it would not be better to merge cpu-timings into
 display-timings but this will require more discussion I guess.
 The panel has a memory-like interface with chip select, read/write and
 access strobe, address (1 bit) and data signals. The interface is defined
 in the MIPI DBI specification (a quick search turned up
 http://www.scribd.com/doc/206899854/MIPI-DPI-Specification-v2, there might
 be direct PDF downloads available), even if some panels implement a
 similar interface that predates MIPI DBI (with names such as i80 or
 SYS-80 probably due to the similarities with the 8051 external bus).

 The cpu-timings properties describe the read and write access timings for
 those signals, unrelated to the display video timings. I thus believe that
 they should be separate from the display timings. We will probably need to
 add properties for the read signal as well, but that can be done later.
 cpu-timings suggests these timings are for CPU, but they are for display
 panel in CPU mode.
 I though rather about something like display-cpu-timings or i80-timings,
 just to avoid confusion.
 mipi-dbi-timings maybe ?

It looks OK.

I guess only hactive, and vactive props of display-timings are used,
maybe some flags?
I wonder if it would not be better to drop display-timings node
and place all props into mipi-dbi-timings or mipi-dbi-settings node.
Or rather all timings props should be put into port/endpoint node with
or without
any container node.

Regards
Andrzej


 If you want to stay with separate node please consider to make it
 optional as whole node or make some properties required. Making node
 required with all sub-properties optional is weird.
 By the way I hope all timings properties are generic for CPU mode,
 if not they should be prefixed by vendor or model.
 The timings description should be pretty generic I believe, especially
 given that the interface is standardized by the MIPI alliance. Could you
 have a quick look at the spec and share your opinion ?

 +
 +Optional properties:
 +
 +The device node can contain one 'port' child node with one child
 +'endpoint' node, according to the bindings defined in [2]. This
 +node should describe panel's video bus.
 +
 +[1]: 

Re: [PATCH 3/4] drm: Introduce drm_fb_helper_prepare()

2014-04-23 Thread Thierry Reding
On Wed, Apr 23, 2014 at 09:35:48AM +0200, Daniel Vetter wrote:
 On Wed, Apr 23, 2014 at 09:14:41AM +0200, Thierry Reding wrote:
  On Tue, Apr 22, 2014 at 05:54:06PM +0200, Daniel Vetter wrote:
   On Tue, Apr 22, 2014 at 04:42:20PM +0200, Thierry Reding wrote:
  [...]
diff --git a/drivers/gpu/drm/drm_fb_helper.c 
b/drivers/gpu/drm/drm_fb_helper.c
  [...]
@@ -502,6 +503,33 @@ static void drm_fb_helper_crtc_free(struct 
drm_fb_helper *helper)
 }
 
 /**
+ * drm_fb_helper_prepare - setup a drm_fb_helper structure
+ * @dev: DRM device
+ * @helper: driver-allocated fbdev helper structure to set up
+ * @funcs: pointer to structure of functions associate with this helper
+ *
+ * Sets up the bare minimum to make the framebuffer helper usable. 
This is
+ * useful to implement race-free initialization of the polling 
helpers. In
+ * that case a typical sequence would be:
+ *
+ *   - call drm_fb_helper_prepare()
+ *   - set dev-mode_config.funcs
   
   This step is done in drm_fb_helper_prepare already.
  
  drm_fb_helper_prepare() sets fb_helper-funcs. dev-mode_config.funcs
  needs to be set because it gets called by drm_kms_helper_hotplug_event()
  which in turn is called by output_poll_execute(), which can be called at
  any point after drm_kms_helper_poll_init(). It could be scheduled
  immediately by drm_kms_helper_poll_enable().
  
  I wonder if perhaps we should be wrapping that into a function as well.
  Currently this is only documented in code by the drivers that call this.
  But since it's only a single step it doesn't seem worth it. Perhaps if
  we rolled the min/max_width/height into that function as well it would
  be more worth it? That could be difficult to do since a couple of
  drivers need to set those depending on the chipset generation.
 
 Oh I've misread this step for the fb_helper-funcs assignment. Makes sense
 and I don't think we need to augment your kerneldoc more to explain this.
 
+ *   - perform driver-specific setup
 
 Hm, maybe clarify this as initialize modeset objects like crtcs, encoders
 and connectors? Since that's the important part we need to get done here.
 
+ *   - call drm_kms_helper_poll_init()
   
   Maybe mention that after this you can start to handle hpd events using the
   probe helpers?
  
  Isn't that somewhat implied already? The poll helpers call directly the
  dev-mode_config.funcs-output_poll_changed() function, which has
  already been set up earlier.
 
 I've more meant that after this it's save for drivers to enable hpd
 interrupts and start to process them. I.e.
 
   - enable interrupts and start processing hpd events
 
 as an additional step to make it really cleear how it all fits together.
 Otherwise driver authors are left wondering wtf this isn't just one
 function call to do it all for them ;-)
 
+ *   - call drm_fb_helper_init()
+ *   - call drm_fb_helper_single_add_all_connectors()
+ *   - call drm_fb_helper_initial_config()
   
   Does this list look sane in the generated DocBook? Afaik kerneldoc
   unfortunately lacks any form of markup, at least afaik :(
  
  I must admit I didn't check. I'll make sure I do that before sending out
  the next version.
 
 If it looks ugly I'm ok as-is, just wondered. Kerneldoc is a bit
 simplistic ime.

In the second version I just sent out I ended up moving the description
of this sequence into the fbdev helper section rather than keeping it in
the description of the drm_fb_helper_prepare() function, since the new
function is really just a part of the whole sequence, so it seemed to
fit more nicely. And I've dropped the list formatting and turned it into
prose instead.

Thierry


pgpeZGgpUcAm7.pgp
Description: PGP signature


Re: [PATCH resend] mfd/rtc: s5m: Do not allocate RTC I2C dummy and regmap for unsupported chipsets

2014-04-23 Thread Lee Jones
 The rtc-s5m driver does not support all of S2M and S5M chipsets
 supported by main MFD sec-core driver. For such chipsets unsupported by
 rtc-s5m, the MFD sec-core driver initialized regmap with default config.
 This config in such cases wouldn't work at all.
 
 The main MFD sec-core driver shouldn't initialize regmap for child
 drivers which is not used by them and even not valid.
 
 Move the allocation of RTC I2C dummy device and initialization of RTC
 regmap from main MFD sec-core driver to the rtc-s5m driver. The rtc-s5m
 driver will use proper regmap config for supported devices.
 
 Signed-off-by: Krzysztof Kozlowski k.kozlow...@samsung.com
 ---
  drivers/mfd/sec-core.c   | 53 +---
  drivers/rtc/rtc-s5m.c| 75 
 +---
  include/linux/mfd/samsung/core.h |  3 --
  3 files changed, 71 insertions(+), 60 deletions(-)

Applied, thanks.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 0/9] Enable USB 3.0 support on Exynos5 systems

2014-04-23 Thread Vivek Gautam
Based on 'for-next' branch of Kgene's linux-samsung tree.
Tested with phy-driver[1] patches and peach-pit dts[2].

This is the DT split part of the patch-series[3].

Patches:  usb-phy: samsung-usb3: Remove older phy-samsung-usb3 driver
  ARM: exynos_defconfig: Remove SAMSUNG_USB3PHY config
are removing the older phy-samsung-usb3 driver. Have included this driver patch
in this series since we are moving the device tree of DWC3 controller to new
phy driver, so we wouldn't be needing this older driver anymore.

[1]: [PATCH v6 1/2] phy: Add new Exynos5 USB 3.0 PHY driver
 http://www.spinics.net/lists/linux-usb/msg106185.html
 [PATCH v6 2/2] phy: exynos5-usbdrd: Add facility for VBUS supply
 http://www.spinics.net/lists/linux-usb/msg106184.html

[2]: [PATCH] ARM: dts: Add peach-pit board support
 http://www.mail-archive.com/linux-samsung-soc@vger.kernel.org/msg28846.html

[3]: [PATCH V4 0/5] Add Exynos5 USB 3.0 phy driver based on generic PHY 
framework
 https://lkml.org/lkml/2014/4/8/247

Vivek Gautam (9):
  dt: exynos5420: Enable support for USB 3.0 PHY controller
  dt: exynos5420: Enable support for DWC3 controller
  dt: exynos5250: Enable support for generic USB DRD phy
  dts: exynos5250: Update DWC3 usb controller to use new phy driver
  dts: exynos5250-snow: Add Vbus regulator for USB 3.0
  dts: exynos5420-peach-pit: Add Vbus regulator for USB 3.0
  dts: exynos5420-smdk5420: Add Vbus regulator for USB 3.0
  usb-phy: samsung-usb3: Remove older phy-samsung-usb3 driver
  ARM: exynos_defconfig: Remove SAMSUNG_USB3PHY config

 arch/arm/boot/dts/exynos5250-snow.dts  |   22 ++
 arch/arm/boot/dts/exynos5250.dtsi  |   21 +-
 arch/arm/boot/dts/exynos5420-peach-pit.dts |   44 
 arch/arm/boot/dts/exynos5420-smdk5420.dts  |   46 
 arch/arm/boot/dts/exynos5420.dtsi  |   54 +
 arch/arm/configs/exynos_defconfig  |1 -
 drivers/usb/phy/Kconfig|8 -
 drivers/usb/phy/Makefile   |1 -
 drivers/usb/phy/phy-samsung-usb.h  |   80 ---
 drivers/usb/phy/phy-samsung-usb3.c |  350 
 10 files changed, 175 insertions(+), 452 deletions(-)
 delete mode 100644 drivers/usb/phy/phy-samsung-usb3.c

-- 
1.7.10.4

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


[PATCH v5 8/9] usb-phy: samsung-usb3: Remove older phy-samsung-usb3 driver

2014-04-23 Thread Vivek Gautam
Removing this older USB 3.0 DRD controller PHY driver, since
a new driver based on generic phy framework is now available.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
Reviewed-by: Tomasz Figa t.f...@samsung.com
---

This is reworked version for the patch :
[PATCH V4 5/5] usb-phy: samsung-usb3: Remove older phy-samsung-usb3 driver
https://lkml.org/lkml/2014/4/8/231

Changes from V4:
 - Removed phy-samsung-usb3.c references in the Makefile and Kconfig.

 drivers/usb/phy/Kconfig|8 -
 drivers/usb/phy/Makefile   |1 -
 drivers/usb/phy/phy-samsung-usb.h  |   80 -
 drivers/usb/phy/phy-samsung-usb3.c |  350 
 4 files changed, 439 deletions(-)
 delete mode 100644 drivers/usb/phy/phy-samsung-usb3.c

diff --git a/drivers/usb/phy/Kconfig b/drivers/usb/phy/Kconfig
index 416e0c8..45c10f2 100644
--- a/drivers/usb/phy/Kconfig
+++ b/drivers/usb/phy/Kconfig
@@ -103,14 +103,6 @@ config SAMSUNG_USB2PHY
  Enable this to support Samsung USB 2.0 (High Speed) PHY controller
  driver for Samsung SoCs.
 
-config SAMSUNG_USB3PHY
-   tristate Samsung USB 3.0 PHY controller Driver
-   select SAMSUNG_USBPHY
-   select USB_PHY
-   help
- Enable this to support Samsung USB 3.0 (Super Speed) phy controller
- for samsung SoCs.
-
 config TWL6030_USB
tristate TWL6030 USB Transceiver Driver
depends on TWL4030_CORE  OMAP_USB2  USB_MUSB_OMAP2PLUS
diff --git a/drivers/usb/phy/Makefile b/drivers/usb/phy/Makefile
index f8fa719..d836ef0 100644
--- a/drivers/usb/phy/Makefile
+++ b/drivers/usb/phy/Makefile
@@ -18,7 +18,6 @@ obj-$(CONFIG_AM335X_PHY_USB)  += phy-am335x.o
 obj-$(CONFIG_OMAP_OTG) += phy-omap-otg.o
 obj-$(CONFIG_SAMSUNG_USBPHY)   += phy-samsung-usb.o
 obj-$(CONFIG_SAMSUNG_USB2PHY)  += phy-samsung-usb2.o
-obj-$(CONFIG_SAMSUNG_USB3PHY)  += phy-samsung-usb3.o
 obj-$(CONFIG_TWL6030_USB)  += phy-twl6030-usb.o
 obj-$(CONFIG_USB_EHCI_TEGRA)   += phy-tegra-usb.o
 obj-$(CONFIG_USB_GPIO_VBUS)+= phy-gpio-vbus-usb.o
diff --git a/drivers/usb/phy/phy-samsung-usb.h 
b/drivers/usb/phy/phy-samsung-usb.h
index 68771bf..dd2a0b5 100644
--- a/drivers/usb/phy/phy-samsung-usb.h
+++ b/drivers/usb/phy/phy-samsung-usb.h
@@ -155,86 +155,6 @@
 
 #define EXYNOS5_PHY_OTG_TUNE   (0x40)
 
-/* EXYNOS5: USB 3.0 DRD */
-#define EXYNOS5_DRD_LINKSYSTEM (0x04)
-
-#define LINKSYSTEM_FLADJ_MASK  (0x3f  1)
-#define LINKSYSTEM_FLADJ(_x)   ((_x)  1)
-#define LINKSYSTEM_XHCI_VERSION_CONTROL(0x1  27)
-
-#define EXYNOS5_DRD_PHYUTMI(0x08)
-
-#define PHYUTMI_OTGDISABLE (0x1  6)
-#define PHYUTMI_FORCESUSPEND   (0x1  1)
-#define PHYUTMI_FORCESLEEP (0x1  0)
-
-#define EXYNOS5_DRD_PHYPIPE(0x0c)
-
-#define EXYNOS5_DRD_PHYCLKRST  (0x10)
-
-#define PHYCLKRST_SSC_REFCLKSEL_MASK   (0xff  23)
-#define PHYCLKRST_SSC_REFCLKSEL(_x)((_x)  23)
-
-#define PHYCLKRST_SSC_RANGE_MASK   (0x03  21)
-#define PHYCLKRST_SSC_RANGE(_x)((_x)  21)
-
-#define PHYCLKRST_SSC_EN   (0x1  20)
-#define PHYCLKRST_REF_SSP_EN   (0x1  19)
-#define PHYCLKRST_REF_CLKDIV2  (0x1  18)
-
-#define PHYCLKRST_MPLL_MULTIPLIER_MASK (0x7f  11)
-#define PHYCLKRST_MPLL_MULTIPLIER_100MHZ_REF   (0x19  11)
-#define PHYCLKRST_MPLL_MULTIPLIER_50M_REF  (0x02  11)
-#define PHYCLKRST_MPLL_MULTIPLIER_24MHZ_REF(0x68  11)
-#define PHYCLKRST_MPLL_MULTIPLIER_20MHZ_REF(0x7d  11)
-#define PHYCLKRST_MPLL_MULTIPLIER_19200KHZ_REF (0x02  11)
-
-#define PHYCLKRST_FSEL_MASK(0x3f  5)
-#define PHYCLKRST_FSEL(_x) ((_x)  5)
-#define PHYCLKRST_FSEL_PAD_100MHZ  (0x27  5)
-#define PHYCLKRST_FSEL_PAD_24MHZ   (0x2a  5)
-#define PHYCLKRST_FSEL_PAD_20MHZ   (0x31  5)
-#define PHYCLKRST_FSEL_PAD_19_2MHZ (0x38  5)
-
-#define PHYCLKRST_RETENABLEN   (0x1  4)
-
-#define PHYCLKRST_REFCLKSEL_MASK   (0x03  2)
-#define PHYCLKRST_REFCLKSEL_PAD_REFCLK (0x2  2)
-#define PHYCLKRST_REFCLKSEL_EXT_REFCLK (0x3  2)
-
-#define PHYCLKRST_PORTRESET(0x1  1)
-#define PHYCLKRST_COMMONONN(0x1  0)
-
-#define EXYNOS5_DRD_PHYREG0(0x14)
-#define EXYNOS5_DRD_PHYREG1(0x18)
-
-#define EXYNOS5_DRD_PHYPARAM0  (0x1c)
-
-#define PHYPARAM0_REF_USE_PAD  (0x1  31)
-#define PHYPARAM0_REF_LOSLEVEL_MASK(0x1f  26)
-#define PHYPARAM0_REF_LOSLEVEL (0x9  26)
-
-#define EXYNOS5_DRD_PHYPARAM1  (0x20)
-
-#define PHYPARAM1_PCS_TXDEEMPH_MASK(0x1f  0)
-#define PHYPARAM1_PCS_TXDEEMPH   

[PATCH v5 9/9] ARM: exynos_defconfig: Remove SAMSUNG_USB3PHY config

2014-04-23 Thread Vivek Gautam
After removing the phy-samsung-usb3 driver, this config
should be removed.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
---
 arch/arm/configs/exynos_defconfig |1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm/configs/exynos_defconfig 
b/arch/arm/configs/exynos_defconfig
index 4ce7b70..22cfc75 100644
--- a/arch/arm/configs/exynos_defconfig
+++ b/arch/arm/configs/exynos_defconfig
@@ -99,7 +99,6 @@ CONFIG_USB_STORAGE=y
 CONFIG_USB_DWC3=y
 CONFIG_USB_PHY=y
 CONFIG_SAMSUNG_USB2PHY=y
-CONFIG_SAMSUNG_USB3PHY=y
 CONFIG_MMC=y
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_S3C=y
-- 
1.7.10.4

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


[PATCH v5 7/9] dts: exynos5420-smdk5420: Add Vbus regulator for USB 3.0

2014-04-23 Thread Vivek Gautam
Add required fixed-regulator for VBUS supply for USB 3.0
controller phy.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
---

This is first version of the patch for VBUS support for USB3DRD phy.
v5 is just and indicative of the patch-series.

 arch/arm/boot/dts/exynos5420-smdk5420.dts |   46 +
 1 file changed, 46 insertions(+)

diff --git a/arch/arm/boot/dts/exynos5420-smdk5420.dts 
b/arch/arm/boot/dts/exynos5420-smdk5420.dts
index 6910485..96d99e1 100644
--- a/arch/arm/boot/dts/exynos5420-smdk5420.dts
+++ b/arch/arm/boot/dts/exynos5420-smdk5420.dts
@@ -147,6 +147,52 @@
pinctrl-0 = hdmi_hpd_irq;
};
 
+   pinctrl@1400 {
+   usb300_vbus_en: usb300-vbus-en {
+   samsung,pins = gpg0-5;
+   samsung,pin-function = 1;
+   samsung,pin-pud = 0;
+   samsung,pin-drv = 0;
+   };
+
+   usb301_vbus_en: usb301-vbus-en {
+   samsung,pins = gpg1-4;
+   samsung,pin-function = 1;
+   samsung,pin-pud = 0;
+   samsung,pin-drv = 0;
+   };
+   };
+
+   usb300_vbus_reg: regulator-usb300 {
+   compatible = regulator-fixed;
+   regulator-name = VBUS0;
+   regulator-min-microvolt = 500;
+   regulator-max-microvolt = 500;
+   gpio = gpg0 5 0;
+   pinctrl-names = default;
+   pinctrl-0 = usb300_vbus_en;
+   enable-active-high;
+   };
+
+   usb301_vbus_reg: regulator-usb301 {
+   compatible = regulator-fixed;
+   regulator-name = VBUS1;
+   regulator-min-microvolt = 500;
+   regulator-max-microvolt = 500;
+   gpio = gpg1 4 0;
+   pinctrl-names = default;
+   pinctrl-0 = usb301_vbus_en;
+   enable-active-high;
+   };
+
+   phy@1210 {
+   vbus-supply = usb300_vbus_reg;
+   };
+
+   phy@1250 {
+   vbus-supply = usb301_vbus_reg;
+   };
+
i2c_2: i2c@12C8 {
samsung,i2c-sda-delay = 100;
samsung,i2c-max-bus-freq = 66000;
-- 
1.7.10.4

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


[PATCH v5 6/9] dts: exynos5420-peach-pit: Add Vbus regulator for USB 3.0

2014-04-23 Thread Vivek Gautam
Add required fixed-regulator for VBUS supply for USB 3.0
controller phy.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
---

This is first version of the patch for VBUS support for USB3DRD phy.
v5 is just and indicative of the patch-series.

 arch/arm/boot/dts/exynos5420-peach-pit.dts |   44 
 1 file changed, 44 insertions(+)

diff --git a/arch/arm/boot/dts/exynos5420-peach-pit.dts 
b/arch/arm/boot/dts/exynos5420-peach-pit.dts
index 4d61a5e..45c0fef 100644
--- a/arch/arm/boot/dts/exynos5420-peach-pit.dts
+++ b/arch/arm/boot/dts/exynos5420-peach-pit.dts
@@ -70,6 +70,20 @@
samsung,pin-pud = 0;
samsung,pin-drv = 0;
};
+
+   usb300_vbus_en: usb300-vbus-en {
+   samsung,pins = gph0-0;
+   samsung,pin-function = 1;
+   samsung,pin-pud = 0;
+   samsung,pin-drv = 0;
+   };
+
+   usb301_vbus_en: usb301-vbus-en {
+   samsung,pins = gph0-1;
+   samsung,pin-function = 1;
+   samsung,pin-pud = 0;
+   samsung,pin-drv = 0;
+   };
};
 
gpio-keys {
@@ -103,6 +117,36 @@
status = okay;
};
 
+   usb300_vbus_reg: regulator-usb300 {
+   compatible = regulator-fixed;
+   regulator-name = P5.0V_USB3CON0;
+   regulator-min-microvolt = 500;
+   regulator-max-microvolt = 500;
+   gpio = gph0 0 0;
+   pinctrl-names = default;
+   pinctrl-0 = usb300_vbus_en;
+   enable-active-high;
+   };
+
+   usb301_vbus_reg: regulator-usb301 {
+   compatible = regulator-fixed;
+   regulator-name = P5.0V_USB3CON1;
+   regulator-min-microvolt = 500;
+   regulator-max-microvolt = 500;
+   gpio = gph0 1 0;
+   pinctrl-names = default;
+   pinctrl-0 = usb301_vbus_en;
+   enable-active-high;
+   };
+
+   phy@1210 {
+   vbus-supply = usb300_vbus_reg;
+   };
+
+   phy@1250 {
+   vbus-supply = usb301_vbus_reg;
+   };
+
mmc@1220 {
status = okay;
num-slots = 1;
-- 
1.7.10.4

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


[PATCH v5 4/9] dts: exynos5250: Update DWC3 usb controller to use new phy driver

2014-04-23 Thread Vivek Gautam
Removing the dt node for older usb3 phy driver from Exynos5250
device tree and updating the dt node for DWC3 controller to
use new phy driver based on generic phy framework.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/boot/dts/exynos5250.dtsi |   17 ++---
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/arch/arm/boot/dts/exynos5250.dtsi 
b/arch/arm/boot/dts/exynos5250.dtsi
index d4254c0..d7c65e6 100644
--- a/arch/arm/boot/dts/exynos5250.dtsi
+++ b/arch/arm/boot/dts/exynos5250.dtsi
@@ -533,21 +533,8 @@
compatible = synopsys,dwc3;
reg = 0x1200 0x1;
interrupts = 0 72 0;
-   usb-phy = usb2_phy usb3_phy;
-   };
-   };
-
-   usb3_phy: usbphy@1210 {
-   compatible = samsung,exynos5250-usb3phy;
-   reg = 0x1210 0x100;
-   clocks = clock CLK_FIN_PLL, clock CLK_USB3;
-   clock-names = ext_xtal, usbdrd30;
-   #address-cells = 1;
-   #size-cells = 1;
-   ranges;
-
-   usbphy-sys {
-   reg = 0x10040704 0x8;
+   phys = usbdrd_phy 0, usbdrd_phy 1;
+   phy-names = usb2-phy, usb3-phy;
};
};
 
-- 
1.7.10.4

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


[PATCH v5 2/9] dt: exynos5420: Enable support for DWC3 controller

2014-04-23 Thread Vivek Gautam
Add device tree nodes for DWC3 controller present on
Exynos 5420 SoC, to enable support for USB 3.0.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/boot/dts/exynos5420.dtsi |   34 ++
 1 file changed, 34 insertions(+)

diff --git a/arch/arm/boot/dts/exynos5420.dtsi 
b/arch/arm/boot/dts/exynos5420.dtsi
index f69745f..e808d1b 100644
--- a/arch/arm/boot/dts/exynos5420.dtsi
+++ b/arch/arm/boot/dts/exynos5420.dtsi
@@ -733,6 +733,23 @@
samsung,power-domain = g2d_pd;
};
 
+   usb@1200 {
+   compatible = samsung,exynos5250-dwusb3;
+   clocks = clock CLK_USBD300;
+   clock-names = usbdrd30;
+   #address-cells = 1;
+   #size-cells = 1;
+   ranges;
+
+   dwc3 {
+   compatible = synopsys,dwc3;
+   reg = 0x1200 0x1;
+   interrupts = 0 72 0;
+   phys = usbdrd_phy0 0, usbdrd_phy0 1;
+   phy-names = usb2-phy, usb3-phy;
+   };
+   };
+
usbdrd_phy0: phy@1210 {
compatible = samsung,exynos5420-usbdrd-phy;
reg = 0x1210 0x100;
@@ -743,6 +760,23 @@
#phy-cells = 1;
};
 
+   usb@1240 {
+   compatible = samsung,exynos5250-dwusb3;
+   clocks = clock CLK_USBD301;
+   clock-names = usbdrd30;
+   #address-cells = 1;
+   #size-cells = 1;
+   ranges;
+
+   dwc3 {
+   compatible = synopsys,dwc3;
+   reg = 0x1240 0x1;
+   interrupts = 0 73 0;
+   phys = usbdrd_phy1 0, usbdrd_phy1 1;
+   phy-names = usb2-phy, usb3-phy;
+   };
+   };
+
usbdrd_phy1: phy@1250 {
compatible = samsung,exynos5420-usbdrd-phy;
reg = 0x1250 0x100;
-- 
1.7.10.4

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


[PATCH v5 3/9] dt: exynos5250: Enable support for generic USB DRD phy

2014-04-23 Thread Vivek Gautam
Add device tree node for new usbdrd-phy driver, which
is based on generic phy framework.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/boot/dts/exynos5250.dtsi |   10 ++
 1 file changed, 10 insertions(+)

diff --git a/arch/arm/boot/dts/exynos5250.dtsi 
b/arch/arm/boot/dts/exynos5250.dtsi
index 3742331..d4254c0 100644
--- a/arch/arm/boot/dts/exynos5250.dtsi
+++ b/arch/arm/boot/dts/exynos5250.dtsi
@@ -551,6 +551,16 @@
};
};
 
+   usbdrd_phy: phy@1210 {
+   compatible = samsung,exynos5250-usbdrd-phy;
+   reg = 0x1210 0x100;
+   clocks = clock CLK_USB3, clock CLK_FIN_PLL;
+   clock-names = phy, ref;
+   samsung,pmu-syscon = pmu_system_controller;
+   samsung,pmu-offset = 0x704;
+   #phy-cells = 1;
+   };
+
usb@1211 {
compatible = samsung,exynos4210-ehci;
reg = 0x1211 0x100;
-- 
1.7.10.4

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


[PATCH v5 1/9] dt: exynos5420: Enable support for USB 3.0 PHY controller

2014-04-23 Thread Vivek Gautam
Add device tree nodes for USB 3.0 PHY present alongwith
USB 3.0 controller Exynos 5420 SoC. This phy driver is
based on generic phy framework.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/boot/dts/exynos5420.dtsi |   20 
 1 file changed, 20 insertions(+)

diff --git a/arch/arm/boot/dts/exynos5420.dtsi 
b/arch/arm/boot/dts/exynos5420.dtsi
index c3a9a66..f69745f 100644
--- a/arch/arm/boot/dts/exynos5420.dtsi
+++ b/arch/arm/boot/dts/exynos5420.dtsi
@@ -732,4 +732,24 @@
clock-names = secss;
samsung,power-domain = g2d_pd;
};
+
+   usbdrd_phy0: phy@1210 {
+   compatible = samsung,exynos5420-usbdrd-phy;
+   reg = 0x1210 0x100;
+   clocks = clock CLK_USBD300, clock CLK_SCLK_USBPHY300;
+   clock-names = phy, ref;
+   samsung,pmu-syscon = pmu_system_controller;
+   samsung,pmu-offset = 0x704;
+   #phy-cells = 1;
+   };
+
+   usbdrd_phy1: phy@1250 {
+   compatible = samsung,exynos5420-usbdrd-phy;
+   reg = 0x1250 0x100;
+   clocks = clock CLK_USBD301, clock CLK_SCLK_USBPHY301;
+   clock-names = phy, ref;
+   samsung,pmu-syscon = pmu_system_controller;
+   samsung,pmu-offset = 0x708;
+   #phy-cells = 1;
+   };
 };
-- 
1.7.10.4

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


Re: [PATCH RFC 3/3] drm/exynos: use pending_components for components tracking

2014-04-23 Thread Andrzej Hajda
On 04/22/2014 01:51 PM, Russell King - ARM Linux wrote:
 On Tue, Apr 22, 2014 at 01:29:54PM +0200, Andrzej Hajda wrote:
 On 04/18/2014 02:46 PM, Russell King - ARM Linux wrote:
 On Fri, Apr 18, 2014 at 02:02:37PM +0200, Andrzej Hajda wrote:
 Separation of the interfaces exposed by the device from the device itself
 seems to me a good thing. I would even consider it as a biggest
 advantage of this solution :)

 The problem of re-initialization does not seems to be relevant here, it
 is classic
 problem of coding correctness nothing more, it can appear here and in
 many different
 places.
 It may be a problem of coding correctless, but it's also a maintainability
 problem too - it makes it _much_ more difficult to ensure that everything
 is correct.
 But forcibly re-initializing all component devices instead of fixing bugs
 in specific drivers seems to be 'absolutely absurd' as classic says.
 They're *unnecessary* bugs that wouldn't even exist if it weren't for
 the forced-splitup of the initialisation into two separate parts that
 your approach mandates.

 Yes, I know that you're desperate to play that down, but you can't get

Not true. I only try to find the best solution and the approach with
multiple re-probing just to avoid potential bugs in drivers does not
look to me correct.

 away from this fact: your approach _forces_ a split up of the
 initialisation into dependent two stages and that fact _alone_ adds
 additional complexity, and along with that additional complexity comes
 more opportunity for bugs. 

This sound so funny, just look at componentize patches - every patch
adds two stage initialization for every component and the master,
with forced unwinding and two levels of devres management.

'My approach' adds only one call to probe and one call to remove of
components,
and very simple and straightforward interface to the master.

'My approach' is very standard - during probe driver probes hardware,
and registers interfaces which can be used by other drivers, for example
by drm master. The only addition is reporting its readiness. Comparing to
'your approach' it is bloody simple.


  Also with that additional complexity comes
 the need to perform more tests to find those bugs, and given that most
 people just say okay, it boots and seems to work, that's good enough
 for me there is a high possibility that these kinds of bugs will take
 a long time to find.

Volume of changes for each component and drm device management
dispersed on all components makes your argument very valid for
component subsystem.

Btw have you observed component framework when one of the components
during bind returns -EPROBE_DEFER ? In my tests it resulted in
deferred probing of master and unbind/bind of other components.
So lets say you have N components and the last component will be deferred
K times, it results in:
- K times deferring of the last component and the master,
- (N - 1) * K - unbinds and binds of other components.



 As I wrote already, this framework was proposed for drivers which
 are tied together anyway, and this is case of many drivers, not
 only exynos.
 Please name them.

 Standalone drivers were not at my sight but I have also described in
 other mail how the framework can be 'improved' to support standalone
 drivers also.
 At the moment, I don't see a justification for your simplified
 and restrictive solution, which if used will lock drivers into that
 simplisitic method, and which can't ever be extended without lots of
 ifdeffery to having other components (such as TDA998x) attached.

 My objections are entirely based on where imx-drm and armada DRM are
 going, neither of which could ever use your implementation.

 Before you say that it isn't meant to deal with stuff like the TDA998x,
 take a moment to think about this - the Dove video subsystem was
 designed to support OLPC.  It was primerly designed to drive a LCD
 screen plus an on-board VGA DAC.  Everything for that is on-SoC.  With
 that, the hardware is well known, and your solution could be used.

 However, then SolidRun came along and dropped a TDA998x on the LCD output
 pins.  Suddenly, things aren't that simple, and your solution falls
 apart, because it can't cope with a generic component that has no knowledge
 of the rest of its master.

 This kind of scenario can happen /any/ time, and any time it does happen,
 your simple solution falls apart.

I think I have answered you two or three times that it is not a problem
to remove
'glued drivers' restriction. I desperately try to avoid accusing you for
'desperately
playing down' on this subject, so I will not comment this anymore.

On the other hand you have not answered quite important question - how
do you plan to componentize drivers shared by different drms when
one of drms is not componentized???


Regards
Andrzej

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

[PATCH 3/3] dts: exynos5420-smdk5420: Add required VDD regulator supplies for usb

2014-04-23 Thread Vivek Gautam
Add required VDD 3.3V and VDD 1.0V regulator supplies to usb nodes.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
---
 arch/arm/boot/dts/exynos5420-smdk5420.dts |   20 
 1 file changed, 20 insertions(+)

diff --git a/arch/arm/boot/dts/exynos5420-smdk5420.dts 
b/arch/arm/boot/dts/exynos5420-smdk5420.dts
index 96d99e1..323ce00 100644
--- a/arch/arm/boot/dts/exynos5420-smdk5420.dts
+++ b/arch/arm/boot/dts/exynos5420-smdk5420.dts
@@ -185,10 +185,30 @@
enable-active-high;
};
 
+   usb@1200 {
+   vdd33-supply = ldo9_reg;
+   vdd10-supply = ldo11_reg;
+   };
+
phy@1210 {
vbus-supply = usb300_vbus_reg;
};
 
+   usb@1211 {
+   vdd33-supply = ldo9_reg;
+   vdd10-supply = ldo11_reg;
+   };
+
+   usb@1212 {
+   vdd33-supply = ldo9_reg;
+   vdd10-supply = ldo11_reg;
+   };
+
+   usb@1240 {
+   vdd33-supply = ldo9_reg;
+   vdd10-supply = ldo11_reg;
+   };
+
phy@1250 {
vbus-supply = usb301_vbus_reg;
};
-- 
1.7.10.4

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


[PATCH 1/3] dts: exynos5250: Add required VDD regulator supplies for usb

2014-04-23 Thread Vivek Gautam
Add required VDD 3.3V and VDD 1.0V regulator supplies to usb nodes.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
---
 arch/arm/boot/dts/exynos5250-smdk5250.dts |   12 
 1 file changed, 12 insertions(+)

diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts 
b/arch/arm/boot/dts/exynos5250-smdk5250.dts
index a794a70..2f183b8 100644
--- a/arch/arm/boot/dts/exynos5250-smdk5250.dts
+++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts
@@ -363,8 +363,20 @@
samsung,audio-codec = wm8994;
};
 
+   usb@1200 {
+   vdd33-supply = ldo12_reg;
+   vdd10-supply = ldo15_reg;
+   };
+
usb@1211 {
samsung,vbus-gpio = gpx2 6 0;
+   vdd33-supply = ldo12_reg;
+   vdd10-supply = ldo15_reg;
+   };
+
+   usb@1212 {
+   vdd33-supply = ldo12_reg;
+   vdd10-supply = ldo15_reg;
};
 
dp-controller@145B {
-- 
1.7.10.4

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


[PATCH 2/3] dts: exynos5250-snow: Add required VDD regulator supplies for usb

2014-04-23 Thread Vivek Gautam
Add required VDD 3.3V and VDD 1.0V regulator supplies to usb nodes.

Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
---
 arch/arm/boot/dts/exynos5250-snow.dts |   12 
 1 file changed, 12 insertions(+)

diff --git a/arch/arm/boot/dts/exynos5250-snow.dts 
b/arch/arm/boot/dts/exynos5250-snow.dts
index fd9b3b3..21d1f31 100644
--- a/arch/arm/boot/dts/exynos5250-snow.dts
+++ b/arch/arm/boot/dts/exynos5250-snow.dts
@@ -214,12 +214,24 @@
enable-active-high;
};
 
+   usb@1200 {
+   vdd33-supply = ldo12_reg;
+   vdd10-supply = ldo15_reg;
+   };
+
phy@1210 {
vbus-supply = usb3_vbus_reg;
};
 
usb@1211 {
samsung,vbus-gpio = gpx1 1 0;
+   vdd33-supply = ldo12_reg;
+   vdd10-supply = ldo15_reg;
+   };
+
+   usb@1212 {
+   vdd33-supply = ldo12_reg;
+   vdd10-supply = ldo15_reg;
};
 
fixed-rate-clocks {
-- 
1.7.10.4

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


[PATCH 0/3] dts: exynos5: Add required VDD supplies for USB

2014-04-23 Thread Vivek Gautam
Based on for-next branch of Kgene's linux-samsung tree, with
following patch series:
[PATCH 0/9] Enable USB 3.0 support on Exynos5 systems
https://lkml.org/lkml/2014/4/23/389

These are device tree patches corresponding to the usb driver patch-series:
[PATCH 1/3] usb: ohci-exynos: Make provision for vdd regulators
[PATCH 2/3] usb: ehci-exynos: Make provision for vdd regulators
[PATCH 3/3] usb: dwc3-exynos: Make provision for vdd regulators

Vivek Gautam (3):
  dts: exynos5250: Add required VDD regulator supplies for usb
  dts: exynos5250-snow: Add required VDD regulator supplies for usb
  dts: exynos5420-smdk5420: Add required VDD regulator supplies for usb

 arch/arm/boot/dts/exynos5250-smdk5250.dts |   12 
 arch/arm/boot/dts/exynos5250-snow.dts |   12 
 arch/arm/boot/dts/exynos5420-smdk5420.dts |   20 
 3 files changed, 44 insertions(+)

-- 
1.7.10.4

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 0/4] add cpuidle support for Exynos5420

2014-04-23 Thread Kukjin Kim

On 04/23/14 19:18, Rafael J. Wysocki wrote:

On Wednesday, April 23, 2014 02:55:50 PM Chander Kashyap wrote:

Exynos5420 is a big-little Soc from Samsung. It has 4 A15 and 4 A7 cores.

This patchset adds cpuidle support for Exynos5420 SoC based on
generic big.little cpuidle driver.

Tested on SMDK5420.

This patch set depends on:
1. [PATCH 0/5] MCPM backend for Exynos5420
   http://www.spinics.net/lists/arm-kernel/msg321666.html

2. [PATCH v4] arm: exynos: generalize power register address calculation
   http://www.spinics.net/lists/arm-kernel/msg324024.html

Changelog is in respective patches.
Chander Kashyap (4):
   cpuidle: config: Add SOC_EXYNOS5420 entry to select
 cpuidle-big-little driver
   driver: cpuidle: cpuidle-big-little: init driver for Exynos5420
   exynos: cpuidle: do not allow cpuidle registration for Exynos5420
   mcpm: exynos: populate suspend and powered_up callbacks

  arch/arm/mach-exynos/cpuidle.c   |3 ++
  arch/arm/mach-exynos/mcpm-exynos.c   |   53 ++
  drivers/cpuidle/Kconfig.arm  |2 +-
  drivers/cpuidle/cpuidle-big_little.c |3 +-
  4 files changed, 59 insertions(+), 2 deletions(-)


I'm assuming that the Exynos maintainers will take care of this, correct?



Yeah, I will if you have any objection :-)

BTW, I need to look at the dependent patches.

- Kukjin
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 4/5] regulator: tps65090: Allow setting the overcurrent wait time

2014-04-23 Thread Doug Anderson
Lee,

On Wed, Apr 23, 2014 at 4:51 AM, Lee Jones lee.jo...@linaro.org wrote:
 The tps65090 regulator allows you to specify how long you want it to
 wait before detecting an overcurrent condition.  Allow specifying that
 through the device tree (or through platform data).

 Signed-off-by: Doug Anderson diand...@chromium.org
 Signed-off-by: Simon Glass s...@chromium.org
 Signed-off-by: Michael Spang sp...@chromium.org
 Signed-off-by: Sean Paul seanp...@chromium.org
 ---
 Changes in v3:
 - Fixed kernel-doc notation for return

 Changes in v2:
 - Separated the overcurrent and retries changes into two patches.
 - Now set overcurrent at probe time since it doesn't change.

  .../devicetree/bindings/regulator/tps65090.txt |  4 ++
  drivers/regulator/tps65090-regulator.c | 56 
 ++
  include/linux/mfd/tps65090.h   |  5 ++
  3 files changed, 65 insertions(+)

 Applied, thanks.

U, Mark said that he had already applied this patch to his tree (I
mentioned it in my recent summary and you can see it in this thread
too).  I don't see it on git.kernel.org though
https://git.kernel.org/cgit/linux/kernel/git/broonie/regulator.git/log/?h=for-next

I'm worried this will cause a merge conflict if you both apply it.

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


[RESEND PATCH v3 5/5] regulator: tps65090: Make FETs more reliable by adding retries

2014-04-23 Thread Doug Anderson
An issue was discovered with tps65090 where sometimes the FETs
wouldn't actually turn on when requested (they would report
overcurrent).  The most problematic FET was the one used for the LCD
backlight on the Samsung ARM Chromebook (FET1).  Problems were
especially prevalent when the device was plugged in to AC power (when
the backlight voltage was higher).

Mitigate the problem by adding retries on the enables of the FETs,
which works around the problem fairly effectively.

Signed-off-by: Doug Anderson diand...@chromium.org
Signed-off-by: Simon Glass s...@chromium.org
Signed-off-by: Michael Spang sp...@chromium.org
Signed-off-by: Sean Paul seanp...@chromium.org
Reviewed-by: Simon Glass s...@chromium.org
---
Changes in v3:
- Fixed kernel-doc notation for return

Changes in v2:
- Separated the overcurrent and retries changes into two patches.
- No longer open code fet_is_enabled().
- Fixed tps6090 typo.
- For loop = while true.
- Removed a set of braces.

 drivers/regulator/tps65090-regulator.c | 155 +
 1 file changed, 140 insertions(+), 15 deletions(-)

diff --git a/drivers/regulator/tps65090-regulator.c 
b/drivers/regulator/tps65090-regulator.c
index ca04e9f..2057e2e 100644
--- a/drivers/regulator/tps65090-regulator.c
+++ b/drivers/regulator/tps65090-regulator.c
@@ -17,6 +17,7 @@
  */
 
 #include linux/module.h
+#include linux/delay.h
 #include linux/init.h
 #include linux/gpio.h
 #include linux/of_gpio.h
@@ -28,7 +29,13 @@
 #include linux/regulator/of_regulator.h
 #include linux/mfd/tps65090.h
 
+#define MAX_CTRL_READ_TRIES5
+#define MAX_FET_ENABLE_TRIES   1000
+
+#define CTRL_EN_BIT0 /* Regulator enable bit, active high */
 #define CTRL_WT_BIT2 /* Regulator wait time 0 bit */
+#define CTRL_PG_BIT4 /* Regulator power good bit, 1=good */
+#define CTRL_TO_BIT7 /* Regulator timeout bit, 1=wait */
 
 #define MAX_OVERCURRENT_WAIT   3 /* Overcurrent wait must be = this */
 
@@ -80,40 +87,158 @@ static int tps65090_reg_set_overcurrent_wait(struct 
tps65090_regulator *ri,
return ret;
 }
 
-static struct regulator_ops tps65090_reg_contol_ops = {
+/**
+ * tps65090_try_enable_fet - Try to enable a FET
+ *
+ * @rdev:  Regulator device
+ *
+ * Return: 0 if ok, -ENOTRECOVERABLE if the FET power good bit did not get
+ * set, or some other -ve value if another error occurred (e.g. i2c error)
+ */
+static int tps65090_try_enable_fet(struct regulator_dev *rdev)
+{
+   unsigned int control;
+   int ret, i;
+
+   ret = regmap_update_bits(rdev-regmap, rdev-desc-enable_reg,
+rdev-desc-enable_mask,
+rdev-desc-enable_mask);
+   if (ret  0) {
+   dev_err(rdev-dev, Error in updating reg %#x\n,
+   rdev-desc-enable_reg);
+   return ret;
+   }
+
+   for (i = 0; i  MAX_CTRL_READ_TRIES; i++) {
+   ret = regmap_read(rdev-regmap, rdev-desc-enable_reg,
+ control);
+   if (ret  0)
+   return ret;
+
+   if (!(control  BIT(CTRL_TO_BIT)))
+   break;
+
+   usleep_range(1000, 1500);
+   }
+   if (!(control  BIT(CTRL_PG_BIT)))
+   return -ENOTRECOVERABLE;
+
+   return 0;
+}
+
+/**
+ * tps65090_fet_enable - Enable a FET, trying a few times if it fails
+ *
+ * Some versions of the tps65090 have issues when turning on the FETs.
+ * This function goes through several steps to ensure the best chance of the
+ * FET going on.  Specifically:
+ * - We'll make sure that we bump the overcurrent wait to the maximum, which
+ *   increases the chances that we'll turn on properly.
+ * - We'll retry turning the FET on multiple times (turning off in between).
+ *
+ * @rdev:  Regulator device
+ *
+ * Return: 0 if ok, non-zero if it fails.
+ */
+static int tps65090_fet_enable(struct regulator_dev *rdev)
+{
+   int ret, tries;
+
+   /*
+* Try enabling multiple times until we succeed since sometimes the
+* first try times out.
+*/
+   tries = 0;
+   while (true) {
+   ret = tps65090_try_enable_fet(rdev);
+   if (!ret)
+   break;
+   if (ret != -ENOTRECOVERABLE || tries == MAX_FET_ENABLE_TRIES)
+   goto err;
+
+   /* Try turning the FET off (and then on again) */
+   ret = regmap_update_bits(rdev-regmap, rdev-desc-enable_reg,
+rdev-desc-enable_mask, 0);
+   if (ret)
+   goto err;
+
+   tries++;
+   }
+
+   if (tries)
+   dev_warn(rdev-dev, reg %#x enable ok after %d tries\n,
+rdev-desc-enable_reg, tries);
+
+   return 0;
+err:
+   dev_warn(rdev-dev, reg %#x enable failed\n, rdev-desc-enable_reg);
+   WARN_ON(1);
+
+  

[RESEND PATCH v3 2/5] charger: tps65090: Allow charger module to be used when no irq

2014-04-23 Thread Doug Anderson
On the ARM Chromebook tps65090 has two masters: the AP (the main
processor running linux) and the EC (the embedded controller).  The AP
is allowed to mess with FETs but the EC is in charge of charge control.

The tps65090 interupt line is routed to both the AP and the EC, which
can cause quite a headache.  Having two people adjusting masks and
acking interrupts is a recipe for disaster.

In the shipping kernel we had a hack to have the AP pay attention to
the IRQ but not to ack it.  It also wasn't supposed to configure the
IRQ in any way.  That hack allowed us to detect when the device was
charging without messing with the EC's state.

The current tps65090 infrastructure makes the above difficult, and it
was a bit of a hack to begin with.  Rather than uglify the driver to
support it, just extend the driver's existing notion of no irq to
the charger.  This makes the charger code poll every 2 seconds for AC
detect, which is sufficient.

For proper functioning, requires (mfd: tps65090: Don't tell child
devices we have an IRQ if we don't).  If we don't have that patch
we'll simply fail to probe on devices without an interrupt (just like
we did before this patch).

Signed-off-by: Doug Anderson diand...@chromium.org
---
Changes in v3: None
Changes in v2:
- Split noirq (polling mode) changes into MFD and charger

 drivers/power/tps65090-charger.c | 76 +++-
 1 file changed, 59 insertions(+), 17 deletions(-)

diff --git a/drivers/power/tps65090-charger.c b/drivers/power/tps65090-charger.c
index 8fc9d6d..cc26c12 100644
--- a/drivers/power/tps65090-charger.c
+++ b/drivers/power/tps65090-charger.c
@@ -17,9 +17,11 @@
  */
 #include linux/delay.h
 #include linux/err.h
+#include linux/freezer.h
 #include linux/init.h
 #include linux/interrupt.h
 #include linux/kernel.h
+#include linux/kthread.h
 #include linux/module.h
 #include linux/of_device.h
 #include linux/platform_device.h
@@ -43,11 +45,15 @@
 #define TPS65090_VACG  BIT(1)
 #define TPS65090_NOITERM   BIT(5)
 
+#define POLL_INTERVAL  (HZ * 2)/* Used when no irq */
+
 struct tps65090_charger {
struct  device  *dev;
int ac_online;
int prev_ac_online;
int irq;
+   struct task_struct  *poll_task;
+   boolpassive_mode;
struct power_supply ac;
struct tps65090_platform_data *pdata;
 };
@@ -60,6 +66,9 @@ static int tps65090_low_chrg_current(struct tps65090_charger 
*charger)
 {
int ret;
 
+   if (charger-passive_mode)
+   return 0;
+
ret = tps65090_write(charger-dev-parent, TPS65090_REG_CG_CTRL5,
TPS65090_NOITERM);
if (ret  0) {
@@ -75,6 +84,9 @@ static int tps65090_enable_charging(struct tps65090_charger 
*charger)
int ret;
uint8_t ctrl0 = 0;
 
+   if (charger-passive_mode)
+   return 0;
+
ret = tps65090_read(charger-dev-parent, TPS65090_REG_CG_CTRL0,
ctrl0);
if (ret  0) {
@@ -98,6 +110,9 @@ static int tps65090_config_charger(struct tps65090_charger 
*charger)
uint8_t intrmask = 0;
int ret;
 
+   if (charger-passive_mode)
+   return 0;
+
if (charger-pdata-enable_low_current_chrg) {
ret = tps65090_low_chrg_current(charger);
if (ret  0) {
@@ -175,10 +190,14 @@ static irqreturn_t tps65090_charger_isr(int irq, void 
*dev_id)
}
 
/* Clear interrupts. */
-   ret = tps65090_write(charger-dev-parent, TPS65090_REG_INTR_STS, 0x00);
-   if (ret  0) {
-   dev_err(charger-dev, %s(): Error in writing reg 0x%x\n,
+   if (!charger-passive_mode) {
+   ret = tps65090_write(charger-dev-parent,
+TPS65090_REG_INTR_STS, 0x00);
+   if (ret  0) {
+   dev_err(charger-dev,
+   %s(): Error in writing reg 0x%x\n,
__func__, TPS65090_REG_INTR_STS);
+   }
}
 
if (charger-prev_ac_online != charger-ac_online)
@@ -209,6 +228,18 @@ static struct tps65090_platform_data *
 
 }
 
+static int tps65090_charger_poll_task(void *data)
+{
+   set_freezable();
+
+   while (!kthread_should_stop()) {
+   schedule_timeout_interruptible(POLL_INTERVAL);
+   try_to_freeze();
+   tps65090_charger_isr(-1, data);
+   }
+   return 0;
+}
+
 static int tps65090_charger_probe(struct platform_device *pdev)
 {
struct tps65090_charger *cdata;
@@ -255,22 +286,10 @@ static int tps65090_charger_probe(struct platform_device 
*pdev)
}
 
irq = platform_get_irq(pdev, 0);
-   if (irq = 0) {
-   dev_warn(pdev-dev, Unable to get charger irq = %d\n, irq);
-   ret = irq;
-   goto fail_unregister_supply;
-   }
-
+   if (irq  0)
+   irq = 

Re: [RESEND PATCH v3 3/5] mfd: tps65090: Stop caching most registers

2014-04-23 Thread Doug Anderson
Lee,

On Wed, Apr 23, 2014 at 3:55 AM, Lee Jones lee.jo...@linaro.org wrote:
  Nearly all of the registers in tps65090 combine control bits and
  status bits.  Turn off caching of all registers except the select few
  that can be cached.

 Lee, I don't mind if I apply this and send a pull request to you or I
 pull a tag from you with this in - what's easiest for you?

 I'm happy to do it.

 Doug,
   Can you send the patch-set again with all of the *-bys and ensure
   I'm on TO or CC please?

It looks as if you've already applied 1, 3, and 4.  I've sent up 2 and
5 again with collected tags.

https://patchwork.kernel.org/patch/4042761/
https://patchwork.kernel.org/patch/4042751/

-Doug
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 4/4] mcpm: exynos: populate suspend and powered_up callbacks

2014-04-23 Thread Lorenzo Pieralisi
[added Nico in CC]

On Wed, Apr 23, 2014 at 10:25:54AM +0100, Chander Kashyap wrote:
 In order to support cpuidle through mcpm, suspend and powered-up
 callbacks are required in mcpm platform code.
 Hence populate the same callbacks.
 
 Signed-off-by: Chander Kashyap chander.kash...@linaro.org
 Signed-off-by: Chander Kashyap k.chan...@samsung.com
 ---
 changes in v2:
   1. Fixed typo: enynos_pmu_cpunr to exynos_pmu_cpunr
 
  arch/arm/mach-exynos/mcpm-exynos.c |   53 
 
  1 file changed, 53 insertions(+)
 
 diff --git a/arch/arm/mach-exynos/mcpm-exynos.c 
 b/arch/arm/mach-exynos/mcpm-exynos.c
 index 6c74c82..d53f597 100644
 --- a/arch/arm/mach-exynos/mcpm-exynos.c
 +++ b/arch/arm/mach-exynos/mcpm-exynos.c
 @@ -272,10 +272,63 @@ static int exynos_power_down_finish(unsigned int cpu, 
 unsigned int cluster)
   return 0; /* success: the CPU is halted */
  }
  
 +static void enable_coherency(void)
 +{
 + unsigned long v, u;
 +
 + asm volatile(
 + mrcp15, 0, %0, c1, c0, 1\n
 + orr%0, %0, %2\n
 + ldr%1, [%3]\n
 + and%1, %1, #0\n
 + orr%0, %0, %1\n
 + mcrp15, 0, %0, c1, c0, 1\n
 + : =r (v), =r (u)
 + : Ir (0x40), Ir (S5P_INFORM0)
 + : cc);
 +}
 +
 +void exynos_powered_up(void)
 +{
 + unsigned int mpidr, cpu, cluster;
 +
 + mpidr = read_cpuid_mpidr();
 + cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
 + cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
 +
 + arch_spin_lock(exynos_mcpm_lock);
 + if (cpu_use_count[cpu][cluster] == 0)
 + cpu_use_count[cpu][cluster] = 1;
 + arch_spin_unlock(exynos_mcpm_lock);
 +}
 +
 +static void exynos_suspend(u64 residency)
 +{
 + unsigned int mpidr, cpunr;
 +
 + mpidr = read_cpuid_mpidr();
 + cpunr = exynos_pmu_cpunr(mpidr);
 +
 + __raw_writel(virt_to_phys(mcpm_entry_point), REG_ENTRY_ADDR);
 +
 + exynos_power_down();
 +
 + /*
 +  * Execution reaches here only if cpu did not power down.
 +  * Hence roll back the changes done in exynos_power_down function.
 + */
 + __raw_writel(EXYNOS_CORE_LOCAL_PWR_EN,
 + EXYNOS_ARM_CORE_CONFIGURATION(cpunr));
 + set_cr(get_cr() | CR_C);
 + enable_coherency();

This is wrong:

1) MCPM would eventually reboot the CPU in question if the suspend call
   returns (and restore SCTLR and ACTLR in cpu_resume), so there is 0 point
   in doing that here.
2) The core would have executed out of coherency for a while so the
   tlbs could be stale and you do not invalidate them. But given (1), (2)
   becomes just informational. The register write must be executed
   though (I guess...). Now, on restoring the SMP bit in cpu_resume
   (errata 799270) I need to verify this is safe and get back to you.

Cheers,
Lorenzo

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 6/7] arm64: mm: Implement 4 levels of translation tables

2014-04-23 Thread Steve Capper
On Fri, Apr 18, 2014 at 04:59:20PM +0900, Jungseok Lee wrote:
 This patch implements 4 levels of translation tables since 3 levels
 of page tables with 4KB pages cannot support 40-bit physical address
 space described in [1] due to the following issue.
 
 It is a restriction that kernel logical memory map with 4KB + 3 levels
 (0xffc0-0x) cannot cover RAM region from
 544GB to 1024GB in [1]. Specifically, ARM64 kernel fails to create
 mapping for this region in map_mem function since __phys_to_virt for
 this region reaches to address overflow.
 
 If SoC design follows the document, [1], over 32GB RAM would be placed
 from 544GB. Even 64GB system is supposed to use the region from 544GB
 to 576GB for only 32GB RAM. Naturally, it would reach to enable 4 levels
 of page tables to avoid hacking __virt_to_phys and __phys_to_virt.
 
 However, it is recommended 4 levels of page table should be only enabled
 if memory map is too sparse or there is about 512GB RAM.

Hello Jungseok,
A few comments can be found inline...

 
 References
 --
 [1]: Principles of ARM Memory Maps, White Paper, Issue C
 
 Signed-off-by: Jungseok Lee jays@samsung.com
 Reviewed-by: Sungjinn Chung sungjinn.ch...@samsung.com
 ---
  arch/arm64/Kconfig |7 +
  arch/arm64/include/asm/memblock.h  |6 +
  arch/arm64/include/asm/page.h  |4 ++-
  arch/arm64/include/asm/pgalloc.h   |   20 +++
  arch/arm64/include/asm/pgtable-hwdef.h |6 +++--
  arch/arm64/include/asm/pgtable.h   |   44 
 ++--
  arch/arm64/include/asm/tlb.h   |8 ++
  arch/arm64/kernel/head.S   |   40 -
  arch/arm64/kernel/traps.c  |5 
  arch/arm64/mm/fault.c  |1 +
  arch/arm64/mm/mmu.c|   16 +---
  11 files changed, 136 insertions(+), 21 deletions(-)
 
 diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
 index 431acbc..7f5270b 100644
 --- a/arch/arm64/Kconfig
 +++ b/arch/arm64/Kconfig
 @@ -184,12 +184,19 @@ config ARM64_3_LEVELS
   help
 This feature enables 3 levels of translation tables.
  
 +config ARM64_4_LEVELS
 + bool 4 level
 + depends on ARM64_4K_PAGES
 + help
 +   This feature enables 4 levels of translation tables.
 +
  endchoice
  
  config ARM64_VA_BITS
   int Virtual address space size
   range 39 39 if ARM64_4K_PAGES  ARM64_3_LEVELS
   range 42 42 if ARM64_64K_PAGES  ARM64_2_LEVELS
 + range 48 48 if ARM64_4K_PAGES  ARM64_4_LEVELS
   help
 This feature is determined by a combination of page size and
 level of translation tables.
 diff --git a/arch/arm64/include/asm/memblock.h 
 b/arch/arm64/include/asm/memblock.h
 index 6afeed2..e4ac8bf 100644
 --- a/arch/arm64/include/asm/memblock.h
 +++ b/arch/arm64/include/asm/memblock.h
 @@ -16,6 +16,12 @@
  #ifndef __ASM_MEMBLOCK_H
  #define __ASM_MEMBLOCK_H
  
 +#ifndef CONFIG_ARM64_4_LEVELS
 +#define MEMBLOCK_INITIAL_LIMIT   PGDIR_SIZE
 +#else
 +#define MEMBLOCK_INITIAL_LIMIT   PUD_SIZE
 +#endif
 +
  extern void arm64_memblock_init(void);
  
  #endif
 diff --git a/arch/arm64/include/asm/page.h b/arch/arm64/include/asm/page.h
 index 268e53d..83b5289 100644
 --- a/arch/arm64/include/asm/page.h
 +++ b/arch/arm64/include/asm/page.h
 @@ -35,8 +35,10 @@
  
  #ifdef CONFIG_ARM64_2_LEVELS
  #include asm/pgtable-2level-types.h
 -#else
 +#elif defined(CONFIG_ARM64_3_LEVELS)
  #include asm/pgtable-3level-types.h
 +#else
 +#include asm/pgtable-4level-types.h
  #endif
  
  extern void __cpu_clear_user_page(void *p, unsigned long user);
 diff --git a/arch/arm64/include/asm/pgalloc.h 
 b/arch/arm64/include/asm/pgalloc.h
 index 4829837..8d745fa 100644
 --- a/arch/arm64/include/asm/pgalloc.h
 +++ b/arch/arm64/include/asm/pgalloc.h
 @@ -26,6 +26,26 @@
  
  #define check_pgt_cache()do { } while (0)
  
 +#ifdef CONFIG_ARM64_4_LEVELS
 +
 +static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
 +{
 + return (pud_t *)get_zeroed_page(GFP_KERNEL | __GFP_REPEAT);
 +}
 +
 +static inline void pud_free(struct mm_struct *mm, pud_t *pud)
 +{
 + BUG_ON((unsigned long)pud  (PAGE_SIZE-1));
 + free_page((unsigned long)pud);
 +}
 +
 +static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
 +{
 + set_pgd(pgd, __pgd(__pa(pud) | PUD_TYPE_TABLE));
 +}
 +
 +#endif  /* CONFIG_ARM64_4_LEVELS */
 +
  #ifndef CONFIG_ARM64_2_LEVELS
  
  static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
 diff --git a/arch/arm64/include/asm/pgtable-hwdef.h 
 b/arch/arm64/include/asm/pgtable-hwdef.h
 index 9cd86c6..ba30053 100644
 --- a/arch/arm64/include/asm/pgtable-hwdef.h
 +++ b/arch/arm64/include/asm/pgtable-hwdef.h
 @@ -18,8 +18,10 @@
  
  #ifdef CONFIG_ARM64_2_LEVELS
  #include asm/pgtable-2level-hwdef.h
 -#else
 +#elif defined(CONFIG_ARM64_3_LEVELS)
  #include 

Re: [PATCH v2 0/7] Add cros_ec changes for newer boards

2014-04-23 Thread Stephen Warren
On 04/23/2014 06:32 AM, Lee Jones wrote:
 On Tue, 22 Apr 2014, Doug Anderson wrote:
 
 This series adds the most critical cros_ec changes for newer boards
 using cros_ec.  Specifically:
 * Fixes timing/locking issues with the previously upstreamed (but
   never used upstream) cros_ec_spi driver.
 * Updates the cros_ec header file to the latest version which allows
   us to use newer EC features like i2c tunneling.
 * Adds an i2c tunnel driver to allow communication to the EC's i2c
   devices.

 This _doesn't_ get the EC driver fully up to speed with what's in the
 current Chromium OS trees.  There are a whole slew of cleanup patches
 there, an addition of an LPC transport mode, and exports of functions
 to userspace.  Once these patches land and we have functionality we
 can continue to pick more cleanup patches.
...
 Need to wait for the ARM, DT and I2C guys to review, at which point
 I'll be happy to take in and supply a branch for them to pull from if
 required. If there are no _true_ dependencies and the MFD changes can
 be added independently without fear of build breakages, let me know
 and I'll apply them separately.

I believe there aren't direct dependencies between the patches. So, the
MFD patches can be applied to the MFD tree and the DT patch applied to
the Tegra tree. I'm simply waiting for the MFD patches to be applied
before applying the DT patch so that I know the DT binding definition is
fully accepted before applying a patch that uses it.
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 2/4] driver: cpuidle: cpuidle-big-little: init driver for Exynos5420

2014-04-23 Thread Lorenzo Pieralisi
On Wed, Apr 23, 2014 at 10:25:52AM +0100, Chander Kashyap wrote:
 Add samsung,exynos5420 compatible string to initialize generic
 big-little cpuidle driver for Exynos5420.
 
 Signed-off-by: Chander Kashyap chander.kash...@linaro.org
 Signed-off-by: Chander Kashyap k.chan...@samsung.com
 Acked-by: Daniel Lezcano daniel.lezc...@linaro.org
 ---
  drivers/cpuidle/cpuidle-big_little.c |3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/cpuidle/cpuidle-big_little.c 
 b/drivers/cpuidle/cpuidle-big_little.c
 index b45fc62..d0fac53 100644
 --- a/drivers/cpuidle/cpuidle-big_little.c
 +++ b/drivers/cpuidle/cpuidle-big_little.c
 @@ -170,7 +170,8 @@ static int __init bl_idle_init(void)
   /*
* Initialize the driver just for a compliant set of machines
*/
 - if (!of_machine_is_compatible(arm,vexpress,v2p-ca15_a7))
 + if (!of_machine_is_compatible(arm,vexpress,v2p-ca15_a7) 
 + (!of_machine_is_compatible(samsung,exynos5420)))
   return -ENODEV;

We should handle the string matching differently, we can't keep adding
comparisons.

Daniel raised the point already: what about the idle tables (data and
number of states ?). TC2 has just a cluster state, and specific
latencies, which are highly unlikely to be correct for this platform.

Lorenzo

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


Re: [PATCH] mmc: dw_mmc: Don't print data errors

2014-04-23 Thread Doug Anderson
Seungwon / Ulf,

On Wed, Apr 23, 2014 at 1:17 AM, Ulf Hansson ulf.hans...@linaro.org wrote:
 On 23 April 2014 01:51, Doug Anderson diand...@chromium.org wrote:
 Data errors are completely expected during tuning.  Printing them out
 is confusing people looking at the kernel logs.  They see things like:

  [3.613296] dwmmc_exynos 1220.dwmmc0: data error, status 0x0088

 ...and they think something is wrong with their hardware.

 Remove the printouts.  We'll leave it up to a higher level to report
 about errors.

 Signed-off-by: Doug Anderson diand...@chromium.org
 ---
  drivers/mmc/host/dw_mmc.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
 index cced599..4c8d423 100644
 --- a/drivers/mmc/host/dw_mmc.c
 +++ b/drivers/mmc/host/dw_mmc.c
 @@ -1248,7 +1248,7 @@ static int dw_mci_data_complete(struct dw_mci *host, 
 struct mmc_data *data)
 data-error = -EIO;
 }

 -   dev_err(host-dev, data error, status 0x%08x\n, status);
 +   dev_dbg(host-dev, data error, status 0x%08x\n, status);


 The status here could be useful information about the status
 register, which is not considered while printing errors by the higher
 levels. An option could be to print the error, but not when you
 perform tuning.

 No big deal though, just a thought.

Right, I could potentially put the driver into tuning mode and then
suppress the errors during that time.  If you request it I will do
that.

I will also note that there are many other error conditions in the
driver that don't have such printouts.  I think the general philosophy
of this driver is not to print them...

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


Re: [PATCH RFC 3/3] drm/exynos: use pending_components for components tracking

2014-04-23 Thread Russell King - ARM Linux
On Wed, Apr 23, 2014 at 05:04:46PM +0200, Andrzej Hajda wrote:
 On 04/22/2014 01:51 PM, Russell King - ARM Linux wrote:
  Yes, I know that you're desperate to play that down, but you can't get
 
 Not true. I only try to find the best solution and the approach with
 multiple re-probing just to avoid potential bugs in drivers does not
 look to me correct.
 
  away from this fact: your approach _forces_ a split up of the
  initialisation into dependent two stages and that fact _alone_ adds
  additional complexity, and along with that additional complexity comes
  more opportunity for bugs. 
 
 This sound so funny, just look at componentize patches - every patch
 adds two stage initialization for every component and the master,
 with forced unwinding and two levels of devres management.

*Sigh*.  Why am I bothering discussing this with you.

*NO* it does not, for the VERY SIMPLE reason that NOTHING is done before
the BIND.  NO structures are allocated.  NOTHING is setup.  The *only*
thing that is done is the driver registers with the component helper.

That's not two stage initialisation.  That's *single* stage.

 'My approach' adds only one call to probe and one call to remove of
 components, and very simple and straightforward interface to the master.

You're talking utter garbage there.

 'My approach' is very standard - during probe driver probes hardware,
 and registers interfaces which can be used by other drivers, for example
 by drm master. The only addition is reporting its readiness. Comparing to
 'your approach' it is bloody simple.

More unbelievable crap.

   Also with that additional complexity comes
  the need to perform more tests to find those bugs, and given that most
  people just say okay, it boots and seems to work, that's good enough
  for me there is a high possibility that these kinds of bugs will take
  a long time to find.
 
 Volume of changes for each component and drm device management
 dispersed on all components makes your argument very valid for
 component subsystem.
 
 Btw have you observed component framework when one of the components
 during bind returns -EPROBE_DEFER ? In my tests it resulted in
 deferred probing of master and unbind/bind of other components.
 So lets say you have N components and the last component will be deferred
 K times, it results in:
 - K times deferring of the last component and the master,
 - (N - 1) * K - unbinds and binds of other components.

True, and you can't get away from that with proper behaviour.

  As I wrote already, this framework was proposed for drivers which
  are tied together anyway, and this is case of many drivers, not
  only exynos.
  Please name them.

You ignored this.  Therefore, I assume that you *can't* name them because
there *aren't* any.  I called your bluff, I win.

  At the moment, I don't see a justification for your simplified
  and restrictive solution, which if used will lock drivers into that
  simplisitic method, and which can't ever be extended without lots of
  ifdeffery to having other components (such as TDA998x) attached.
 
  My objections are entirely based on where imx-drm and armada DRM are
  going, neither of which could ever use your implementation.
 
  Before you say that it isn't meant to deal with stuff like the TDA998x,
  take a moment to think about this - the Dove video subsystem was
  designed to support OLPC.  It was primerly designed to drive a LCD
  screen plus an on-board VGA DAC.  Everything for that is on-SoC.  With
  that, the hardware is well known, and your solution could be used.
 
  However, then SolidRun came along and dropped a TDA998x on the LCD output
  pins.  Suddenly, things aren't that simple, and your solution falls
  apart, because it can't cope with a generic component that has no knowledge
  of the rest of its master.
 
  This kind of scenario can happen /any/ time, and any time it does happen,
  your simple solution falls apart.
 
 I think I have answered you two or three times that it is not a problem
 to remove
 'glued drivers' restriction. I desperately try to avoid accusing you for
 'desperately
 playing down' on this subject, so I will not comment this anymore.

Right, so what I draw from this is that *you* again refuse to answer this
point because despite your assertions that your solution can do it, you
have no clue as to *how* it can be done.  I've looked at your solution
with respect to this, and I *can't* see how it can be done either.  That's
why I've been asking *you* the question, so that *you* can provide some
technical input to it.

 On the other hand you have not answered quite important question - how
 do you plan to componentize drivers shared by different drms when
 one of drms is not componentized???

Read this, from a message I sent at the beginning of February:
| Here's my changes to the TDA998x driver to add support for the component
| helper.  The TDA998x driver retains support for the old way so that
| drivers can be transitioned.  For any one DRM 

[PATCH v3 0/3] Generic Device Tree based power domain look-up

2014-04-23 Thread Tomasz Figa
Up till now there was no single generic method to bind devices to their
power domains using Device Tree. Each platform has been doing this using
its own way, example of which are Exynos power domain bindings [1] and
look-up code [2].

This series is intended to change this and provide generic DT bindings for
power domain specification and generic code performing look-up of power
domains and binding them to devices.

First two patches are the most important part of this series, as they
introduce $subject. Patch 3 converts mach-exynos to use the new generic
method. Further patches are adding one more user of the new code,
mach-s3c64xx, with first 3 patches (4-6) required to clean-up its power
domain driver a bit and last 3 patches (9-11) adding display support for
Mini6410 board, including a node for display controller (FIMD) which is
a power domain consumer.

The design of DT bindings and provider code is heavily inspired by
implementation of clock providers in Common Clock Framework, while
the code binding devices to power domains by my Exynos power domain
implementation (now removed by this series ;)).

Successfully tested on Exynos4210-based Trats and Exynos4412-based Trats2
boards using MFC, 

[1] Documentation/devicetree/bindings/arm/exynos/power_domain.txt
[2] arch/arm/mach-exynos/pm_domains.c

Changes since v2:
(http://thread.gmane.org/gmane.linux.kernel/1658926)
 - rebased onto current Rafael's linux-pm bleeding-edge branch,
 - dropped patches for s3c64xx for now. I will send them in separate series,
 - do not call pm_genpd_dev_need_restore(true) in genpd_bind_domain(),
 - fixed various stylistic issues reported in review comments.

Changes since v1 (RFC):
[https://lkml.org/lkml/2014/1/11/141]
 - rebased onto current Rafael's linux-pm bleeding-edge branch,
 - reordered the patches a bit (to have the generic ones first),
 - dropped renaming of S3C64xx power domains (as suggested by Mark Brown),
 - added support for deferred probing (as suggested by Stephen Boyd),
 - fixed several minor issues pointed by Stephen Boyd,
 - replaced notifiers with direct hooks in driver core to make power domain
   support independent from specific bus type and allow error handling.

Tomasz Figa (3):
  base: power: Add generic OF-based power domain look-up
  drivercore: Bind/unbind power domain on probe/remove
  ARM: exynos: Move to generic power domain bindings

 .../bindings/arm/exynos/power_domain.txt   |  12 +-
 .../devicetree/bindings/power/power_domain.txt |  51 
 arch/arm/mach-exynos/pm_domains.c  |  81 +-
 drivers/base/dd.c  |   9 +-
 drivers/base/power/domain.c| 283 +
 include/linux/pm_domain.h  |  46 
 kernel/power/Kconfig   |   4 +
 7 files changed, 398 insertions(+), 88 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/power/power_domain.txt

-- 
1.9.2

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


[PATCH v3 2/3] drivercore: Bind/unbind power domain on probe/remove

2014-04-23 Thread Tomasz Figa
On a number of platforms, devices are part of controllable power
domains, which need to be enabled before such devices can be accessed
and may be powered down when the device is idle to save some power.
This means that on systems that support power domain control using
generic power domains subsystem, it is necessary to add device to its
power domain before binding a driver to it and remove it from its power
domain after its driver is unbound to make sure that an unused device
does not affect power domain state.

Since this is not limited to particular busses and specific
archs/platforms, it is more convenient to do the above directly in
driver core, just as done with pinctrl default configuration. This patch
adds necessary code to really_probe() and __device_release_driver() to
achieve this and maintain consistent stack-like ordering of operations
happening when binding and unbinding a driver.

Signed-off-by: Tomasz Figa t.f...@samsung.com
Reviewed-by: Stephen Boyd sb...@codeaurora.org
Reviewed-by: Philipp Zabel philipp.za...@gmail.com
[on i.MX6 GK802]
Tested-by: Philipp Zabel philipp.za...@gmail.com
Reviewed-by: Mark Brown broo...@linaro.org
Reviewed-by: Ulf Hansson ulf.hans...@linaro.org
---
 drivers/base/dd.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 8986b9f..7501c42 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -23,6 +23,7 @@
 #include linux/kthread.h
 #include linux/wait.h
 #include linux/async.h
+#include linux/pm_domain.h
 #include linux/pm_runtime.h
 #include linux/pinctrl/devinfo.h
 
@@ -273,6 +274,11 @@ static int really_probe(struct device *dev, struct 
device_driver *drv)
 
dev-driver = drv;
 
+   /* If using genpd, bind power domain now before probing */
+   ret = genpd_bind_domain(dev);
+   if (ret)
+   goto probe_failed;
+
/* If using pinctrl, bind pins now before probing */
ret = pinctrl_bind_pins(dev);
if (ret)
@@ -303,6 +309,7 @@ static int really_probe(struct device *dev, struct 
device_driver *drv)
 probe_failed:
devres_release_all(dev);
driver_sysfs_remove(dev);
+   genpd_unbind_domain(dev);
dev-driver = NULL;
dev_set_drvdata(dev, NULL);
 
@@ -513,7 +520,7 @@ static void __device_release_driver(struct device *dev)
blocking_notifier_call_chain(dev-bus-p-bus_notifier,
 BUS_NOTIFY_UNBOUND_DRIVER,
 dev);
-
+   genpd_unbind_domain(dev);
}
 }
 
-- 
1.9.2

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


[PATCH v3 1/3] base: power: Add generic OF-based power domain look-up

2014-04-23 Thread Tomasz Figa
This patch introduces generic code to perform power domain look-up using
device tree and automatically bind devices to their power domains.
Generic device tree binding is introduced to specify power domains of
devices in their device tree nodes.

Backwards compatibility with legacy Samsung-specific power domain
bindings is provided, but for now the new code is not compiled when
CONFIG_ARCH_EXYNOS is selected to avoid collision with legacy code. This
will change as soon as Exynos power domain code gets converted to use
the generic framework in further patch.

Signed-off-by: Tomasz Figa t.f...@samsung.com
Reviewed-by: Mark Brown broo...@linaro.org
Reviewed-by: Kevin Hilman khil...@linaro.org
Reviewed-by: Philipp Zabel philipp.za...@gmail.com
[on i.MX6 GK802]
Tested-by: Philipp Zabel philipp.za...@gmail.com
---
 .../devicetree/bindings/power/power_domain.txt |  51 
 drivers/base/power/domain.c| 283 +
 include/linux/pm_domain.h  |  46 
 kernel/power/Kconfig   |   4 +
 4 files changed, 384 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/power/power_domain.txt

diff --git a/Documentation/devicetree/bindings/power/power_domain.txt 
b/Documentation/devicetree/bindings/power/power_domain.txt
new file mode 100644
index 000..93be5d9
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/power_domain.txt
@@ -0,0 +1,51 @@
+* Generic power domains
+
+System on chip designs are often divided into multiple power domains that
+can be used for power gating of selected IP blocks for power saving by
+reduced leakage current.
+
+This device tree binding can be used to bind power domain consumer devices
+with their power domains provided by power domain providers. A power domain
+provider can be represented by any node in the device tree and can provide
+one or more power domains. A consumer node can refer to the provider by
+a phandle and a set of phandle arguments (so called power domain specifier)
+of length specified by #power-domain-cells property in the power domain
+provider node.
+
+==Power domain providers==
+
+Required properties:
+ - #power-domain-cells : Number of cells in a power domain specifier;
+   Typically 0 for nodes representing a single power domain and 1 for nodes
+   providing multiple power domains (e.g. power controllers), but can be
+   any value as specified by device tree binding documentation of particular
+   provider.
+
+Example:
+
+   power: power-controller@1234 {
+   compatible = foo,power-controller;
+   reg = 0x1234 0x1000;
+   #power-domain-cells = 1;
+   };
+
+The node above defines a power controller that is a power domain provider
+and expects one cell as its phandle argument.
+
+==Power domain consumers==
+
+Required properties:
+ - power-domain : A phandle and power domain specifier as defined by bindings
+  of power controller specified by phandle.
+
+Example:
+
+   leaky-device@1235 {
+   compatible = foo,i-leak-current;
+   reg = 0x1235 0x1000;
+   power-domain = power 0;
+   };
+
+The node above defines a typical power domain consumer device, which is located
+inside power domain with index 0 of power controller represented by node with
+label power.
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index ae098a2..7677744 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -8,6 +8,7 @@
 
 #include linux/kernel.h
 #include linux/io.h
+#include linux/platform_device.h
 #include linux/pm_runtime.h
 #include linux/pm_domain.h
 #include linux/pm_qos.h
@@ -2189,3 +2190,285 @@ void pm_genpd_init(struct generic_pm_domain *genpd,
list_add(genpd-gpd_list_node, gpd_list);
mutex_unlock(gpd_list_lock);
 }
+
+#ifdef CONFIG_PM_GENERIC_DOMAINS_OF
+/*
+ * Device Tree based power domain providers.
+ *
+ * The code below implements generic device tree based power domain providers
+ * that bind device tree nodes with generic power domains registered in the
+ * system.
+ *
+ * Any driver that registers generic power domains and need to support binding
+ * of devices to these domains is supposed to register a power domain provider,
+ * which maps a power domain specifier retrieved from device tree to a power
+ * domain.
+ *
+ * Two simple mapping functions have been provided for convenience:
+ *  - of_genpd_xlate_simple() for 1:1 device tree node to domain mapping,
+ *  - of_genpd_xlate_onecell() for mapping of multiple domains per node
+ *by index.
+ */
+
+/**
+ * struct of_genpd_provider - Power domain provider registration structure
+ * @link: Entry in global list of domain providers
+ * @node: Pointer to device tree node of domain provider
+ * @xlate: Provider-specific xlate callback mapping a set of specifier cells
+ * into a power domain.
+ * @data: context pointer to be 

[PATCH v3 3/3] ARM: exynos: Move to generic power domain bindings

2014-04-23 Thread Tomasz Figa
This patch moves Exynos power domain code to use the new generic power
domain look-up framework introduced by previous patch, allowing the new
code to be compiled with CONFIG_ARCH_EXYNOS selected as well.

Signed-off-by: Tomasz Figa t.f...@samsung.com
---
 .../bindings/arm/exynos/power_domain.txt   | 12 ++--
 arch/arm/mach-exynos/pm_domains.c  | 81 +-
 kernel/power/Kconfig   |  2 +-
 3 files changed, 7 insertions(+), 88 deletions(-)

diff --git a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt 
b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
index 5216b41..60f26a8 100644
--- a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
+++ b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
@@ -8,6 +8,8 @@ Required Properties:
 * samsung,exynos4210-pd - for exynos4210 type power domain.
 - reg: physical base address of the controller and length of memory mapped
 region.
+- #power-domain-cells: number of cells in power domain specifier;
+must be 0.
 
 Node of a device using power domains must have a samsung,power-domain property
 defined with a phandle to respective power domain.
@@ -17,12 +19,8 @@ Example:
lcd0: power-domain-lcd0 {
compatible = samsung,exynos4210-pd;
reg = 0x10023C00 0x10;
+   #power-domain-cells = 0;
};
 
-Example of the node using power domain:
-
-   node {
-   /* ... */
-   samsung,power-domain = lcd0;
-   /* ... */
-   };
+See Documentation/devicetree/bindings/power/power_domain.txt for description
+of consumer-side bindings.
diff --git a/arch/arm/mach-exynos/pm_domains.c 
b/arch/arm/mach-exynos/pm_domains.c
index fe6570e..9cad3c6 100644
--- a/arch/arm/mach-exynos/pm_domains.c
+++ b/arch/arm/mach-exynos/pm_domains.c
@@ -73,89 +73,14 @@ static int exynos_pd_power_off(struct generic_pm_domain 
*domain)
return exynos_pd_power(domain, false);
 }
 
-static void exynos_add_device_to_domain(struct exynos_pm_domain *pd,
-struct device *dev)
-{
-   int ret;
-
-   dev_dbg(dev, adding to power domain %s\n, pd-pd.name);
-
-   while (1) {
-   ret = pm_genpd_add_device(pd-pd, dev);
-   if (ret != -EAGAIN)
-   break;
-   cond_resched();
-   }
-
-   pm_genpd_dev_need_restore(dev, true);
-}
-
-static void exynos_remove_device_from_domain(struct device *dev)
-{
-   struct generic_pm_domain *genpd = dev_to_genpd(dev);
-   int ret;
-
-   dev_dbg(dev, removing from power domain %s\n, genpd-name);
-
-   while (1) {
-   ret = pm_genpd_remove_device(genpd, dev);
-   if (ret != -EAGAIN)
-   break;
-   cond_resched();
-   }
-}
-
-static void exynos_read_domain_from_dt(struct device *dev)
-{
-   struct platform_device *pd_pdev;
-   struct exynos_pm_domain *pd;
-   struct device_node *node;
-
-   node = of_parse_phandle(dev-of_node, samsung,power-domain, 0);
-   if (!node)
-   return;
-   pd_pdev = of_find_device_by_node(node);
-   if (!pd_pdev)
-   return;
-   pd = platform_get_drvdata(pd_pdev);
-   exynos_add_device_to_domain(pd, dev);
-}
-
-static int exynos_pm_notifier_call(struct notifier_block *nb,
-   unsigned long event, void *data)
-{
-   struct device *dev = data;
-
-   switch (event) {
-   case BUS_NOTIFY_BIND_DRIVER:
-   if (dev-of_node)
-   exynos_read_domain_from_dt(dev);
-
-   break;
-
-   case BUS_NOTIFY_UNBOUND_DRIVER:
-   exynos_remove_device_from_domain(dev);
-
-   break;
-   }
-   return NOTIFY_DONE;
-}
-
-static struct notifier_block platform_nb = {
-   .notifier_call = exynos_pm_notifier_call,
-};
-
 static __init int exynos4_pm_init_power_domain(void)
 {
-   struct platform_device *pdev;
struct device_node *np;
 
for_each_compatible_node(np, NULL, samsung,exynos4210-pd) {
struct exynos_pm_domain *pd;
int on;
 
-   pdev = of_find_device_by_node(np);
-
pd = kzalloc(sizeof(*pd), GFP_KERNEL);
if (!pd) {
pr_err(%s: failed to allocate memory for domain\n,
@@ -168,17 +93,13 @@ static __init int exynos4_pm_init_power_domain(void)
pd-base = of_iomap(np, 0);
pd-pd.power_off = exynos_pd_power_off;
pd-pd.power_on = exynos_pd_power_on;
-   pd-pd.of_node = np;
-
-   platform_set_drvdata(pdev, pd);
 
on = __raw_readl(pd-base + 0x4)  S5P_INT_LOCAL_PWR_EN;
 
pm_genpd_init(pd-pd, NULL, !on);
+   of_genpd_add_provider(np, of_genpd_xlate_simple, pd-pd);
}
 
-

Re: [PATCH RFC 3/3] drm/exynos: use pending_components for components tracking

2014-04-23 Thread Russell King - ARM Linux
On Wed, Apr 23, 2014 at 05:43:28PM +0100, Russell King - ARM Linux wrote:
 So, maybe you would like to finally address *my* point about TDA998x
 and your solution in a way that provides a satisfactory answer.  *Show*
 how it can be done, or *outline* how it can be done.

Let me be absolutely clear *why* I'm very interested in this - and that
is because I'm presently converting TDA998x and Armada DRM to use the
component helpers.  If your solution is better, then I'd want to convert
to that instead, and let's retire the component helpers.

At the moment, my belief is that your solution is *very* substandard and
suboptimal precisely for the reasons I've outlined, especially when it
comes to sharing a component between several drivers.

So, if you *really* care, you'll stop fobbing me off on this point and
provide some real technical input how you'd see your solution being used
in exactly the scenario that I've been outlining several times in this
thread.

For example, you could show what kind of modifications you expect would
be required to the _existing_ TDA998x driver to allow it to participate
as a device declared in DT as an entirely separate entity, probed via the
standard I2C probing methods, and then hook itself into the appropriate
DRM driver.  Remembering, of course, that the TDA998x device is used by
more than _just_ Armada DRM.

I don't care if you show it via pseudo-code or by real patch.  I just
want to know _how_ your solution could be used.  And I won't want some
silly remark like trivially or I've already answered that.  I want
_you_ to _show_ _how_ it can be done.

-- 
FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly
improving, and getting towards what was expected from it.
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 7/9] drm/bridge: ptn3460: add drm_panel controls

2014-04-23 Thread Ajay kumar
Rob,

On Tue, Apr 22, 2014 at 5:04 PM, Rob Clark robdcl...@gmail.com wrote:
 So what about, rather than adding drm_panel support to each bridge
 individually, we introduce a drm_panel_bridge (with a form of
 chaining).. ie:

   struct drm_panel_bridge {
 struct drm_bridge base;
 struct drm_panel *panel;
 struct drm_bridge *bridge; /* optional */
   };

   static void drm_panel_bridge_enable(struct drm_bridge *bridge)
   {
 struct drm_panel_bridge *pb = to_panel_bridge(bridge);
 if (pb-bridge)
   pb-bridge-funcs-enable(pb-bridge);
 pb-panel-funcs-enable(pb-panel);
   }

We cannot call them like this from crtc helpers in the order you mentioned,
since each individual bridge chip expects the panel controls at
different places.
I mean,
sometimes panel controls needs to be done before bridge controls,
 ... and so on.

 If you don't need a real bridge, just create one of these w/
 pb-bridge==NULL, otherwise create it as a wrapper for your real
 bridge.

 BR,
 -R

 On Mon, Apr 21, 2014 at 6:39 PM, Ajay Kumar ajaykumar...@samsung.com wrote:
 attach ptn3460 connector to drm_panel and support drm_panel routines,
 if a valid drm_panel object is passed to ptn3460_init.

 Signed-off-by: Ajay Kumar ajaykumar...@samsung.com
 ---
 Changes since V1:
 Address few coding style comments from Jingoo Han

  drivers/gpu/drm/bridge/Kconfig  |1 +
  drivers/gpu/drm/bridge/ptn3460.c|   20 +++-
  drivers/gpu/drm/exynos/exynos_dp_core.c |   16 
  include/drm/bridge/ptn3460.h|6 --
  4 files changed, 36 insertions(+), 7 deletions(-)

 diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
 index 884923f..3bc6845 100644
 --- a/drivers/gpu/drm/bridge/Kconfig
 +++ b/drivers/gpu/drm/bridge/Kconfig
 @@ -2,4 +2,5 @@ config DRM_PTN3460
 tristate PTN3460 DP/LVDS bridge
 depends on DRM
 select DRM_KMS_HELPER
 +   select DRM_PANEL
 ---help---
 diff --git a/drivers/gpu/drm/bridge/ptn3460.c 
 b/drivers/gpu/drm/bridge/ptn3460.c
 index f1d2afc..3920202 100644
 --- a/drivers/gpu/drm/bridge/ptn3460.c
 +++ b/drivers/gpu/drm/bridge/ptn3460.c
 @@ -19,6 +19,7 @@
  #include linux/i2c.h
  #include linux/gpio.h
  #include linux/delay.h
 +#include drm/drm_panel.h

  #include drmP.h
  #include drm_edid.h
 @@ -38,6 +39,7 @@ struct ptn3460_bridge {
 struct i2c_client *client;
 struct drm_encoder *encoder;
 struct drm_bridge *bridge;
 +   struct drm_panel *panel;
 struct edid *edid;
 int gpio_pd_n;
 int gpio_rst_n;
 @@ -126,6 +128,8 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge)
 gpio_set_value(ptn_bridge-gpio_rst_n, 1);
 }

 +   drm_panel_pre_enable(ptn_bridge-panel);
 +
 /*
  * There's a bug in the PTN chip where it falsely asserts hotplug 
 before
  * it is fully functional. We're forced to wait for the maximum 
 start up
 @@ -142,6 +146,10 @@ static void ptn3460_pre_enable(struct drm_bridge 
 *bridge)

  static void ptn3460_enable(struct drm_bridge *bridge)
  {
 +   struct ptn3460_bridge *ptn_bridge = bridge-driver_private;
 +
 +   if (ptn_bridge-enabled)
 +   drm_panel_enable(ptn_bridge-panel);
  }

  static void ptn3460_disable(struct drm_bridge *bridge)
 @@ -153,6 +161,9 @@ static void ptn3460_disable(struct drm_bridge *bridge)

 ptn_bridge-enabled = false;

 +   drm_panel_disable(ptn_bridge-panel);
 +   drm_panel_post_disable(ptn_bridge-panel);
 +
 if (gpio_is_valid(ptn_bridge-gpio_rst_n))
 gpio_set_value(ptn_bridge-gpio_rst_n, 1);

 @@ -198,6 +209,7 @@ int ptn3460_get_modes(struct drm_connector *connector)

 power_off = !ptn_bridge-enabled;
 ptn3460_pre_enable(ptn_bridge-bridge);
 +   ptn3460_enable(ptn_bridge-bridge);

 edid = kmalloc(EDID_LENGTH, GFP_KERNEL);
 if (!edid) {
 @@ -265,7 +277,8 @@ struct drm_connector_funcs ptn3460_connector_funcs = {
  };

  int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder,
 -   struct i2c_client *client, struct device_node *node)
 +   struct i2c_client *client, struct device_node *node,
 +   struct drm_panel *panel)
  {
 int ret;
 struct drm_bridge *bridge;
 @@ -324,6 +337,11 @@ int ptn3460_init(struct drm_device *dev, struct 
 drm_encoder *encoder,
 goto err;
 }

 +   if (panel) {
 +   ptn_bridge-panel = panel;
 +   drm_panel_attach(ptn_bridge-panel, ptn_bridge-connector);
 +   }
 +
 bridge-driver_private = ptn_bridge;
 encoder-bridge = bridge;
 ptn_bridge-connector.polled = DRM_CONNECTOR_POLL_HPD;
 diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c 
 b/drivers/gpu/drm/exynos/exynos_dp_core.c
 index dbc5ccc..4853f31 100644
 --- a/drivers/gpu/drm/exynos/exynos_dp_core.c
 +++ 

Re: [PATCH V2 7/9] drm/bridge: ptn3460: add drm_panel controls

2014-04-23 Thread Ajay kumar
Sorry for the previous reply,

Here goes the full explaination:

 Rob,

 On Tue, Apr 22, 2014 at 5:04 PM, Rob Clark robdcl...@gmail.com wrote:
 So what about, rather than adding drm_panel support to each bridge
 individually, we introduce a drm_panel_bridge (with a form of
 chaining).. ie:

   struct drm_panel_bridge {
 struct drm_bridge base;
 struct drm_panel *panel;
 struct drm_bridge *bridge; /* optional */
   };

   static void drm_panel_bridge_enable(struct drm_bridge *bridge)
   {
 struct drm_panel_bridge *pb = to_panel_bridge(bridge);
 if (pb-bridge)
   pb-bridge-funcs-enable(pb-bridge);
 pb-panel-funcs-enable(pb-panel);
   }

We cannot call them like this from crtc helpers in the order you mentioned,
since each individual bridge chip expects the panel controls at
different places.
I mean,
-- sometimes panel controls needs to be done before bridge
controls(ptn3460: before RST_N and PD_N)
-- sometimes in between the bridge controls (ps8622: one panel control
before SLP_N and one after SLP_N)
-- sometimes panel controls needs to be done after bridge controls.

So, putting these drm_panel controls inside individual bridge drivers will work,
but keeping them in crtc_helpers might break stuff.

Thanks and regards,
Ajay Kumar
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 2/9] drm/panel: add pre_enable and post_disable routines

2014-04-23 Thread Ajay kumar
Daniel,

On Wed, Apr 23, 2014 at 12:59 PM, Daniel Vetter dan...@ffwll.ch wrote:
 On Tue, Apr 22, 2014 at 08:06:19PM +0530, Ajay kumar wrote:
 Hi Thierry,


 On Tue, Apr 22, 2014 at 1:49 PM, Thierry Reding thierry.red...@gmail.com
 wrote:
  On Tue, Apr 22, 2014 at 04:09:11AM +0530, Ajay Kumar wrote:
  Most of the panels need an init sequence as mentioned below:
-- poweron LCD unit/LCD_EN
-- start video data
-- poweron LED unit/BL_EN
  And, a de-init sequence as mentioned below:
-- poweroff LED unit/BL_EN
-- stop video data
-- poweroff LCD unit/LCD_EN
  With existing callbacks for drm panel, we cannot accomodate such panels,
  since only two callbacks, i.e panel_enable and panel_disable are
 supported.
 
  This patch adds:
-- pre_enable callback which can be called before
the actual video data is on, and then call the enable
callback after the video data is available.
 
-- post_disable callback which can be called after
the video data is off, and use disable callback
to do something before switching off the video data.
 
  Now, we can easily map the above scenario as shown below:
poweron LCD unit/LCD_EN = pre_enable callback
poweron LED unit/BL_EN = enable callback
poweroff LED unit/BL_EN = disable callback
poweroff LCD unit/LCD_EN = post_disable callback
 
  I don't like this. What happens when the next panel comes around that
  has a yet slightly different requirement? Will we introduce a new
  pre_pre_enable() and post_post_disable() function then?
 
 As I have already explained, these 2 callbacks are sufficient enough to
 take care
 the power up/down sequence for LVDS and eDP panels. And, definitely having
 just 2 callbacks enable and disable is not at all sufficient.

 I initially thought of using panel_simple_enable from panel-simple driver.
 But it doesn't go well with case wherein there are 2 regulators(one for LCD
 and one for LED)
 a BL_EN signal etc. And, often(Believe me, I have referred to both eDP
 panel datasheets
 and LVDS panel datasheets) proper powerup sequence for such panels is as
 mentioned below:

 powerup:
 -- power up the supply (LCD_VCC).
 -- start video data.
 -- enable backlight.

 powerdown
 -- disable backlight.
 -- stop video data.
 -- power off the supply (LCD VCC)

 For the above cases, if I have to somehow fit in all the required settings,
 it breaks the sequence and I end up getting glitches during bootup/DPMS.

 Also, when the drm_bridge can support pre_enable and post_disable, why not
 drm_panel provide that both should work in tandem?

 Imo this makes sense, especially if we go through with the idea talked
 about yesterday of creating a drm_bridge to wrap-up a drm_panel with
 sufficient isolation between all components.
 -Daniel

Actually, I tried implementing this for ptn3460. But, it breaks the working.
As explained in the other patch(reply for Rob), we cannot truly ISOLATE
the panel controls from bridge controls and keep them as seperate.
They should be kept together, in the individual bridge chip drivers,
so that the bridge chip driver can decide which panel control to call
at what point.

So, I think combining bridge chip and panel controls was really a bad idea.
I will implement the basic panel controls required by the bridge
as optional bridge properties via DT. By that way, at least the driver
remains robust.


Thanks and regards,
Ajay Kumar
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 3/9] ARM: S3C24XX: enable usage of common dclk if common clock framework is enabled

2014-04-23 Thread Heiko Stübner
Add platform device and select the correct implementation automatically
depending on wether the old samsung_clock or the common clock framework
is enabled.

This is only done for machines already using the old dclk implementation,
as everybody else should move to use dt anyway.

The machine-specific settings for the external clocks will have to be set
by somebody with knowledge about the specific hardware.

Signed-off-by: Heiko Stuebner he...@sntech.de
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/mach-s3c24xx/Kconfig   | 22 +-
 arch/arm/mach-s3c24xx/common.c  | 14 ++
 arch/arm/mach-s3c24xx/common.h  |  2 ++
 arch/arm/mach-s3c24xx/mach-anubis.c |  5 +
 arch/arm/mach-s3c24xx/mach-bast.c   |  5 +
 arch/arm/mach-s3c24xx/mach-osiris.c |  5 +
 arch/arm/mach-s3c24xx/mach-rx1950.c |  5 +
 arch/arm/mach-s3c24xx/mach-vr1000.c |  5 +
 arch/arm/mach-s3c24xx/s3c244x.c |  2 ++
 9 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index d067f76..6036e77 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -18,6 +18,13 @@ config PLAT_S3C24XX
help
  Base platform code for any Samsung S3C24XX device
 
+config S3C2410_COMMON_DCLK
+   bool
+   select REGMAP_MMIO
+   help
+ Temporary symbol to build the dclk driver based on the common clock
+ framework.
+
 menu SAMSUNG S3C24XX SoCs Support
 
 comment S3C24XX SoCs
@@ -264,7 +271,8 @@ config ARCH_BAST
select ISA
select MACH_BAST_IDE
select S3C2410_IOTIMING if ARM_S3C2410_CPUFREQ
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C2410_COMMON_DCLK if COMMON_CLK
select S3C24XX_SIMTEC_NOR
select S3C24XX_SIMTEC_PM if PM
select S3C24XX_SIMTEC_USB
@@ -345,7 +353,8 @@ config MACH_TCT_HAMMER
 config MACH_VR1000
bool Thorcom VR1000
select MACH_BAST_IDE
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C2410_COMMON_DCLK if COMMON_CLK
select S3C24XX_SIMTEC_NOR
select S3C24XX_SIMTEC_PM if PM
select S3C24XX_SIMTEC_USB
@@ -530,7 +539,8 @@ config MACH_ANUBIS
bool Simtec Electronics ANUBIS
select HAVE_PATA_PLATFORM
select S3C2440_XTAL_1200
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C2410_COMMON_DCLK if COMMON_CLK
select S3C24XX_GPIO_EXTRA64
select S3C24XX_SIMTEC_PM if PM
select S3C_DEV_USB_HOST
@@ -571,7 +581,8 @@ config MACH_OSIRIS
bool Simtec IM2440D20 (OSIRIS) module
select S3C2410_IOTIMING if ARM_S3C2440_CPUFREQ
select S3C2440_XTAL_1200
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C2410_COMMON_DCLK if COMMON_CLK
select S3C24XX_GPIO_EXTRA128
select S3C24XX_SIMTEC_PM if PM
select S3C_DEV_NAND
@@ -643,7 +654,8 @@ config MACH_RX1950
select PM_H1940 if PM
select S3C2410_IOTIMING if ARM_S3C2440_CPUFREQ
select S3C2440_XTAL_16934400
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C24XX_COMMON_DCLK if COMMON_CLK
select S3C24XX_PWM
select S3C_DEV_NAND
help
diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c
index 92a1e3a..8e930e0 100644
--- a/arch/arm/mach-s3c24xx/common.c
+++ b/arch/arm/mach-s3c24xx/common.c
@@ -554,3 +554,17 @@ void __init s3c2443_init_clocks(int xtal)
s3c2443_common_clk_init(NULL, xtal, 1, S3C24XX_VA_CLKPWR);
 }
 #endif
+
+#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2440) || \
+   defined(CONFIG_CPU_S3C2442)
+static struct resource s3c2410_dclk_resource[] = {
+   [0] = DEFINE_RES_MEM(0x5684, 0x4),
+};
+
+struct platform_device s3c2410_device_dclk = {
+   .name   = s3c2410-dclk,
+   .id = 0,
+   .num_resources  = ARRAY_SIZE(s3c2410_dclk_resource),
+   .resource   = s3c2410_dclk_resource,
+};
+#endif
diff --git a/arch/arm/mach-s3c24xx/common.h b/arch/arm/mach-s3c24xx/common.h
index 3fade6d..50504c7 100644
--- a/arch/arm/mach-s3c24xx/common.h
+++ b/arch/arm/mach-s3c24xx/common.h
@@ -114,6 +114,8 @@ extern struct platform_device s3c2412_device_dma;
 extern struct platform_device s3c2440_device_dma;
 extern struct platform_device s3c2443_device_dma;
 
+extern struct platform_device s3c2410_device_dclk;
+
 #ifdef CONFIG_S3C2412_COMMON_CLK
 void __init s3c2412_common_clk_init(struct device_node *np, unsigned long 
xti_f,
unsigned long ext_f, void __iomem *reg_base);
diff --git a/arch/arm/mach-s3c24xx/mach-anubis.c 
b/arch/arm/mach-s3c24xx/mach-anubis.c
index 2a16f8f..6a1a781 100644
--- a/arch/arm/mach-s3c24xx/mach-anubis.c
+++ b/arch/arm/mach-s3c24xx/mach-anubis.c
@@ -352,6 +352,7 @@ static 

[PATCH v2 4/9] dt-bindings: add documentation for s3c2410 clock controller

2014-04-23 Thread Heiko Stübner
Describe the clock controller of s3c2410, s3c2440 and s3c2442.

Signed-off-by: Heiko Stuebner he...@sntech.de
Acked-by: Tomasz Figa t.f...@samsung.com
---
 .../bindings/clock/samsung,s3c2410-clock.txt   | 50 ++
 1 file changed, 50 insertions(+)
 create mode 100644 
Documentation/devicetree/bindings/clock/samsung,s3c2410-clock.txt

diff --git a/Documentation/devicetree/bindings/clock/samsung,s3c2410-clock.txt 
b/Documentation/devicetree/bindings/clock/samsung,s3c2410-clock.txt
new file mode 100644
index 000..0b64ad8
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/samsung,s3c2410-clock.txt
@@ -0,0 +1,50 @@
+* Samsung S3C2410 Clock Controller
+
+The S3C2410 clock controller generates and supplies clock to various 
controllers
+within the SoC. The clock binding described here is applicable to the s3c2410,
+s3c2440 and s3c2442 SoCs in the s3c24x family.
+
+Required Properties:
+
+- compatible: should be one of the following.
+  - samsung,s3c2410-clock - controller compatible with S3C2410 SoC.
+  - samsung,s3c2440-clock - controller compatible with S3C2440 SoC.
+  - samsung,s3c2442-clock - controller compatible with S3C2442 SoC.
+- reg: physical base address of the controller and length of memory mapped
+  region.
+- #clock-cells: should be 1.
+
+Each clock is assigned an identifier and client nodes can use this identifier
+to specify the clock which they consume. Some of the clocks are available only
+on a particular SoC.
+
+All available clocks are defined as preprocessor macros in
+dt-bindings/clock/samsung,s3c2410-clock.h header and can be used in device
+tree sources.
+
+External clocks:
+
+The xti clock used as input for the plls is generated outside the SoC. It is
+expected that is are defined using standard clock bindings with a
+clock-output-names value of xti.
+
+Example: Clock controller node:
+
+   clocks: clock-controller@4c00 {
+   compatible = samsung,s3c2410-clock;
+   reg = 0x4c00 0x20;
+   #clock-cells = 1;
+   };
+
+Example: UART controller node that consumes the clock generated by the clock
+  controller (refer to the standard clock bindings for information about
+  clocks and clock-names properties):
+
+   serial@50004000 {
+   compatible = samsung,s3c2440-uart;
+   reg = 0x50004000 0x4000;
+   interrupts = 1 23 3 4, 1 23 4 4;
+   clock-names = uart, clk_uart_baud2;
+   clocks = clocks PCLK_UART0, clocks PCLK_UART0;
+   status = disabled;
+   };
-- 
1.9.0


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


[PATCH v2 5/9] clk: samsung: add clock controller driver for s3c2410, s3c2440 and s3c2442

2014-04-23 Thread Heiko Stübner
This driver can handle the clock controllers of the socs mentioned above,
as they share a common clock tree with only small differences.

The clock structure is built according to the manuals of the included
SoCs and might include changes in comparison to the previous clock
structure.

As pll-rate-tables only the 12mhz variants are currently included.
The original code was wrongly checking for 169mhz xti values [a 0 to much
at the end], so the original 16mhz pll table would have never been
included and its values are so obscure that I have no possibility to
at least check their sane-ness. When using the formula from the manual
the resulting frequency is near the table value but still slightly off.

Signed-off-by: Heiko Stuebner he...@sntech.de
Acked-by: Mike Turquette mturque...@linaro.org
---
 drivers/clk/samsung/Makefile|   1 +
 drivers/clk/samsung/clk-s3c2410.c   | 477 
 include/dt-bindings/clock/s3c2410.h |  62 +
 3 files changed, 540 insertions(+)
 create mode 100644 drivers/clk/samsung/clk-s3c2410.c
 create mode 100644 include/dt-bindings/clock/s3c2410.h

diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile
index 9892de4..2cb62f8 100644
--- a/drivers/clk/samsung/Makefile
+++ b/drivers/clk/samsung/Makefile
@@ -8,6 +8,7 @@ obj-$(CONFIG_SOC_EXYNOS5250)+= clk-exynos5250.o
 obj-$(CONFIG_SOC_EXYNOS5420)   += clk-exynos5420.o
 obj-$(CONFIG_SOC_EXYNOS5440)   += clk-exynos5440.o
 obj-$(CONFIG_ARCH_EXYNOS)  += clk-exynos-audss.o
+obj-$(CONFIG_S3C2410_COMMON_CLK)+= clk-s3c2410.o
 obj-$(CONFIG_S3C2410_COMMON_DCLK)+= clk-s3c2410-dclk.o
 obj-$(CONFIG_S3C2412_COMMON_CLK)+= clk-s3c2412.o
 obj-$(CONFIG_S3C2443_COMMON_CLK)+= clk-s3c2443.o
diff --git a/drivers/clk/samsung/clk-s3c2410.c 
b/drivers/clk/samsung/clk-s3c2410.c
new file mode 100644
index 000..7b41821
--- /dev/null
+++ b/drivers/clk/samsung/clk-s3c2410.c
@@ -0,0 +1,477 @@
+/*
+ * Copyright (c) 2013 Heiko Stuebner he...@sntech.de
+ *
+ * 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.
+ *
+ * Common Clock Framework support for S3C2410 and following SoCs.
+ */
+
+#include linux/clk.h
+#include linux/clkdev.h
+#include linux/clk-provider.h
+#include linux/of.h
+#include linux/of_address.h
+#include linux/syscore_ops.h
+
+#include dt-bindings/clock/s3c2410.h
+
+#include clk.h
+#include clk-pll.h
+
+#define LOCKTIME   0x00
+#define MPLLCON0x04
+#define UPLLCON0x08
+#define CLKCON 0x0c
+#define CLKSLOW0x10
+#define CLKDIVN0x14
+#define CAMDIVN0x18
+
+/* the soc types */
+enum supported_socs {
+   S3C2410,
+   S3C2440,
+   S3C2442,
+};
+
+/* list of PLLs to be registered */
+enum s3c2410_plls {
+   mpll, upll,
+};
+
+static void __iomem *reg_base;
+
+#ifdef CONFIG_PM_SLEEP
+static struct samsung_clk_reg_dump *s3c2410_save;
+
+/*
+ * list of controller registers to be saved and restored during a
+ * suspend/resume cycle.
+ */
+static unsigned long s3c2410_clk_regs[] __initdata = {
+   LOCKTIME,
+   MPLLCON,
+   UPLLCON,
+   CLKCON,
+   CLKSLOW,
+   CLKDIVN,
+   CAMDIVN,
+};
+
+static int s3c2410_clk_suspend(void)
+{
+   samsung_clk_save(reg_base, s3c2410_save,
+   ARRAY_SIZE(s3c2410_clk_regs));
+
+   return 0;
+}
+
+static void s3c2410_clk_resume(void)
+{
+   samsung_clk_restore(reg_base, s3c2410_save,
+   ARRAY_SIZE(s3c2410_clk_regs));
+}
+
+static struct syscore_ops s3c2410_clk_syscore_ops = {
+   .suspend = s3c2410_clk_suspend,
+   .resume = s3c2410_clk_resume,
+};
+
+static void s3c2410_clk_sleep_init(void)
+{
+   s3c2410_save = samsung_clk_alloc_reg_dump(s3c2410_clk_regs,
+   ARRAY_SIZE(s3c2410_clk_regs));
+   if (!s3c2410_save) {
+   pr_warn(%s: failed to allocate sleep save data, no sleep 
support!\n,
+   __func__);
+   return;
+   }
+
+   register_syscore_ops(s3c2410_clk_syscore_ops);
+   return;
+}
+#else
+static void s3c2410_clk_sleep_init(void) {}
+#endif
+
+PNAME(fclk_p) = { mpll, div_slow };
+
+struct samsung_mux_clock s3c2410_common_muxes[] __initdata = {
+   MUX(FCLK, fclk, fclk_p, CLKSLOW, 4, 1),
+};
+
+static struct clk_div_table divslow_d[] = {
+   { .val = 0, .div = 1 },
+   { .val = 1, .div = 2 },
+   { .val = 2, .div = 4 },
+   { .val = 3, .div = 6 },
+   { .val = 4, .div = 8 },
+   { .val = 5, .div = 10 },
+   { .val = 6, .div = 12 },
+   { .val = 7, .div = 14 },
+   { /* sentinel */ },
+};
+
+struct samsung_div_clock s3c2410_common_dividers[] __initdata = {
+   DIV_T(0, div_slow, xti, CLKSLOW, 0, 3, divslow_d),
+   DIV(PCLK, pclk, hclk, CLKDIVN, 0, 1),
+};
+
+struct 

[PATCH v2 6/9] ARM: S3C24XX: add platform code for conversion to the common clock framework

2014-04-23 Thread Heiko Stübner
This adds the necessary init functions to init the clocks from the common
clock framework and necessary CONFIG_SAMSUNG_CLOCK ifdefs around the legacy
clock code.

This also includes empty stubs for the *_setup_clocks functions that are
called from the cpufreq driver on resume.

Signed-off-by: Heiko Stuebner he...@sntech.de
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/mach-s3c24xx/Kconfig   |  5 +
 arch/arm/mach-s3c24xx/common.c  | 25 +
 arch/arm/mach-s3c24xx/common.h  |  7 +++
 arch/arm/mach-s3c24xx/s3c2410.c |  6 ++
 arch/arm/mach-s3c24xx/s3c2442.c |  3 ++-
 arch/arm/mach-s3c24xx/s3c244x.c |  6 ++
 6 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index 6036e77..daab788 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -18,6 +18,11 @@ config PLAT_S3C24XX
help
  Base platform code for any Samsung S3C24XX device
 
+config S3C2410_COMMON_CLK
+   bool
+   help
+ Build the s3c2410 clock driver based on the common clock framework.
+
 config S3C2410_COMMON_DCLK
bool
select REGMAP_MMIO
diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c
index 8e930e0..5307bb7 100644
--- a/arch/arm/mach-s3c24xx/common.c
+++ b/arch/arm/mach-s3c24xx/common.c
@@ -53,6 +53,7 @@
 #include plat/cpu-freq.h
 #include plat/pll.h
 #include plat/pwm-core.h
+#include plat/watchdog-reset.h
 
 #include common.h
 
@@ -534,6 +535,14 @@ struct platform_device s3c2443_device_dma = {
 };
 #endif
 
+#if defined(CONFIG_COMMON_CLK)  defined(CONFIG_CPU_S3C2410)
+void __init s3c2410_init_clocks(int xtal)
+{
+   s3c2410_common_clk_init(NULL, xtal, 0, S3C24XX_VA_CLKPWR);
+   samsung_wdt_reset_init(S3C24XX_VA_WATCHDOG);
+}
+#endif
+
 #ifdef CONFIG_CPU_S3C2412
 void __init s3c2412_init_clocks(int xtal)
 {
@@ -548,6 +557,22 @@ void __init s3c2416_init_clocks(int xtal)
 }
 #endif
 
+#if defined(CONFIG_COMMON_CLK)  defined(CONFIG_CPU_S3C2440)
+void __init s3c2440_init_clocks(int xtal)
+{
+   s3c2410_common_clk_init(NULL, xtal, 1, S3C24XX_VA_CLKPWR);
+   samsung_wdt_reset_init(S3C24XX_VA_WATCHDOG);
+}
+#endif
+
+#if defined(CONFIG_COMMON_CLK)  defined(CONFIG_CPU_S3C2442)
+void __init s3c2442_init_clocks(int xtal)
+{
+   s3c2410_common_clk_init(NULL, xtal, 2, S3C24XX_VA_CLKPWR);
+   samsung_wdt_reset_init(S3C24XX_VA_WATCHDOG);
+}
+#endif
+
 #ifdef CONFIG_CPU_S3C2443
 void __init s3c2443_init_clocks(int xtal)
 {
diff --git a/arch/arm/mach-s3c24xx/common.h b/arch/arm/mach-s3c24xx/common.h
index 50504c7..2d65541 100644
--- a/arch/arm/mach-s3c24xx/common.h
+++ b/arch/arm/mach-s3c24xx/common.h
@@ -77,6 +77,7 @@ extern void s3c244x_restart(enum reboot_mode mode, const char 
*cmd);
 #ifdef CONFIG_CPU_S3C2440
 extern  int s3c2440_init(void);
 extern void s3c2440_map_io(void);
+extern void s3c2440_init_clocks(int xtal);
 extern void s3c2440_init_irq(void);
 #else
 #define s3c2440_init NULL
@@ -86,6 +87,7 @@ extern void s3c2440_init_irq(void);
 #ifdef CONFIG_CPU_S3C2442
 extern  int s3c2442_init(void);
 extern void s3c2442_map_io(void);
+extern void s3c2442_init_clocks(int xtal);
 extern void s3c2442_init_irq(void);
 #else
 #define s3c2442_init NULL
@@ -116,6 +118,11 @@ extern struct platform_device s3c2443_device_dma;
 
 extern struct platform_device s3c2410_device_dclk;
 
+#ifdef CONFIG_S3C2410_COMMON_CLK
+void __init s3c2410_common_clk_init(struct device_node *np, unsigned long 
xti_f,
+   int current_soc,
+   void __iomem *reg_base);
+#endif
 #ifdef CONFIG_S3C2412_COMMON_CLK
 void __init s3c2412_common_clk_init(struct device_node *np, unsigned long 
xti_f,
unsigned long ext_f, void __iomem *reg_base);
diff --git a/arch/arm/mach-s3c24xx/s3c2410.c b/arch/arm/mach-s3c24xx/s3c2410.c
index ffb92cbc..a1ce4b0 100644
--- a/arch/arm/mach-s3c24xx/s3c2410.c
+++ b/arch/arm/mach-s3c24xx/s3c2410.c
@@ -83,6 +83,7 @@ void __init s3c2410_map_io(void)
iotable_init(s3c2410_iodesc, ARRAY_SIZE(s3c2410_iodesc));
 }
 
+#ifdef CONFIG_SAMSUNG_CLOCK
 void __init_or_cpufreq s3c2410_setup_clocks(void)
 {
struct clk *xtal_clk;
@@ -142,6 +143,11 @@ void __init s3c2410_init_clocks(int xtal)
clkdev_add_table(s3c2410_clk_lookup, ARRAY_SIZE(s3c2410_clk_lookup));
samsung_wdt_reset_init(S3C24XX_VA_WATCHDOG);
 }
+#else
+void __init_or_cpufreq s3c2410_setup_clocks(void)
+{
+}
+#endif
 
 struct bus_type s3c2410_subsys = {
.name = s3c2410-core,
diff --git a/arch/arm/mach-s3c24xx/s3c2442.c b/arch/arm/mach-s3c24xx/s3c2442.c
index 2c8adc0..564c6503 100644
--- a/arch/arm/mach-s3c24xx/s3c2442.c
+++ b/arch/arm/mach-s3c24xx/s3c2442.c
@@ -53,6 +53,7 @@
 
 #include common.h
 
+#ifdef CONFIG_SAMSUNG_CLOCK
 /* S3C2442 extended clock support */
 
 static unsigned long s3c2442_camif_upll_round(struct clk *clk,
@@ -162,7 +163,7 @@ 

[PATCH v2 7/9] ARM: S3C24XX: convert s3c2440 and s3c2442 to common clock framework

2014-04-23 Thread Heiko Stübner
Convert all machines using these cpus to use the ccf clock driver
instead of the legacy Samsung clock implementation.

Some of the more esotheric machines will probably need a fixup, as they
do strange things to the clkout outputs, that I did not really understand
nor have the hardware to check.

Signed-off-by: Heiko Stuebner he...@sntech.de
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/mach-s3c24xx/Kconfig  |  8 
 arch/arm/mach-s3c24xx/Makefile |  4 ++--
 arch/arm/mach-s3c24xx/common.c |  4 
 arch/arm/mach-s3c24xx/mach-anubis.c| 10 +++---
 arch/arm/mach-s3c24xx/mach-at2440evb.c | 10 +++---
 arch/arm/mach-s3c24xx/mach-gta02.c |  8 ++--
 arch/arm/mach-s3c24xx/mach-mini2440.c  | 10 +++---
 arch/arm/mach-s3c24xx/mach-nexcoder.c  | 15 ---
 arch/arm/mach-s3c24xx/mach-osiris.c| 10 +++---
 arch/arm/mach-s3c24xx/mach-rx1950.c| 10 +++---
 arch/arm/mach-s3c24xx/mach-rx3715.c| 10 +++---
 arch/arm/mach-s3c24xx/mach-smdk2440.c  | 10 +++---
 12 files changed, 73 insertions(+), 36 deletions(-)

diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index daab788..96d1e54 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -73,10 +73,10 @@ config CPU_S3C2416
 
 config CPU_S3C2440
bool SAMSUNG S3C2440
-   depends on SAMSUNG_CLOCK
+   select COMMON_CLK
select CPU_ARM920T
select CPU_LLSERIAL_S3C2440
-   select S3C2410_CLOCK
+   select S3C2410_COMMON_CLK
select S3C2410_PM if PM
select S3C2440_DMA if S3C24XX_DMA
help
@@ -84,10 +84,10 @@ config CPU_S3C2440
 
 config CPU_S3C2442
bool SAMSUNG S3C2442
-   depends on SAMSUNG_CLOCK
+   select COMMON_CLK
select CPU_ARM920T
select CPU_LLSERIAL_S3C2440
-   select S3C2410_CLOCK
+   select S3C2410_COMMON_CLK
select S3C2410_DMA if S3C24XX_DMA
select S3C2410_PM if PM
help
diff --git a/arch/arm/mach-s3c24xx/Makefile b/arch/arm/mach-s3c24xx/Makefile
index f254797..9010eba 100644
--- a/arch/arm/mach-s3c24xx/Makefile
+++ b/arch/arm/mach-s3c24xx/Makefile
@@ -29,9 +29,9 @@ obj-$(CONFIG_S3C2412_PM_SLEEP)+= sleep-s3c2412.o
 obj-$(CONFIG_CPU_S3C2416)  += s3c2416.o
 obj-$(CONFIG_S3C2416_PM)   += pm-s3c2416.o
 
-obj-$(CONFIG_CPU_S3C2440)  += s3c2440.o clock-s3c2440.o
+obj-$(CONFIG_CPU_S3C2440)  += s3c2440.o
 obj-$(CONFIG_CPU_S3C2442)  += s3c2442.o
-obj-$(CONFIG_CPU_S3C244X)  += s3c244x.o clock-s3c244x.o
+obj-$(CONFIG_CPU_S3C244X)  += s3c244x.o
 obj-$(CONFIG_S3C2440_DMA)  += dma-s3c2440.o
 obj-$(CONFIG_S3C2440_PLL_1200) += pll-s3c2440-1200.o
 obj-$(CONFIG_S3C2440_PLL_16934400) += pll-s3c2440-16934400.o
diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c
index 5307bb7..def8627 100644
--- a/arch/arm/mach-s3c24xx/common.c
+++ b/arch/arm/mach-s3c24xx/common.c
@@ -92,7 +92,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x3244,
.idmask = 0x,
.map_io = s3c2440_map_io,
-   .init_clocks= s3c244x_init_clocks,
.init_uarts = s3c244x_init_uarts,
.init   = s3c2440_init,
.name   = name_s3c2440
@@ -101,7 +100,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x32440001,
.idmask = 0x,
.map_io = s3c2440_map_io,
-   .init_clocks= s3c244x_init_clocks,
.init_uarts = s3c244x_init_uarts,
.init   = s3c2440_init,
.name   = name_s3c2440a
@@ -110,7 +108,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x32440aaa,
.idmask = 0x,
.map_io = s3c2442_map_io,
-   .init_clocks= s3c244x_init_clocks,
.init_uarts = s3c244x_init_uarts,
.init   = s3c2442_init,
.name   = name_s3c2442
@@ -119,7 +116,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x32440aab,
.idmask = 0x,
.map_io = s3c2442_map_io,
-   .init_clocks= s3c244x_init_clocks,
.init_uarts = s3c244x_init_uarts,
.init   = s3c2442_init,
.name   = name_s3c2442b
diff --git a/arch/arm/mach-s3c24xx/mach-anubis.c 
b/arch/arm/mach-s3c24xx/mach-anubis.c
index 6a1a781..6b4f188 100644
--- a/arch/arm/mach-s3c24xx/mach-anubis.c
+++ b/arch/arm/mach-s3c24xx/mach-anubis.c
@@ -46,7 +46,6 @@
 
 #include net/ax88796.h
 
-#include plat/clock.h
 #include plat/devs.h
 #include plat/cpu.h
 #include linux/platform_data/asoc-s3c24xx_simtec.h
@@ 

[PATCH v2 8/9] ARM: S3C24XX: convert s3c2410 to common clock framework

2014-04-23 Thread Heiko Stübner
Convert the machines using the s3c2410 to use the new driver based
on the common clock framework instead of the legacy Samsung clock driver.

As with the s3c244x, machines using the clkout output will need a fixup
from someone with the hardware.

Signed-off-by: Heiko Stuebner he...@sntech.de
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/mach-s3c24xx/Kconfig   |  4 ++--
 arch/arm/mach-s3c24xx/common.c  |  2 --
 arch/arm/mach-s3c24xx/mach-amlm5900.c   |  9 +++--
 arch/arm/mach-s3c24xx/mach-bast.c   | 10 +++---
 arch/arm/mach-s3c24xx/mach-h1940.c  | 10 +++---
 arch/arm/mach-s3c24xx/mach-n30.c| 12 
 arch/arm/mach-s3c24xx/mach-nexcoder.c   |  7 +--
 arch/arm/mach-s3c24xx/mach-otom.c   | 10 +++---
 arch/arm/mach-s3c24xx/mach-qt2410.c |  9 +++--
 arch/arm/mach-s3c24xx/mach-smdk2410.c   |  9 +++--
 arch/arm/mach-s3c24xx/mach-tct_hammer.c |  9 +++--
 arch/arm/mach-s3c24xx/mach-vr1000.c | 10 +++---
 12 files changed, 67 insertions(+), 34 deletions(-)

diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index 96d1e54..57ebb13 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -37,10 +37,10 @@ comment S3C24XX SoCs
 config CPU_S3C2410
bool SAMSUNG S3C2410
default y
-   depends on SAMSUNG_CLOCK
+   select COMMON_CLK
select CPU_ARM920T
select CPU_LLSERIAL_S3C2410
-   select S3C2410_CLOCK
+   select S3C2410_COMMON_CLK
select S3C2410_DMA if S3C24XX_DMA
select ARM_S3C2410_CPUFREQ if ARM_S3C24XX_CPUFREQ
select S3C2410_PM if PM
diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c
index def8627..a7b1269 100644
--- a/arch/arm/mach-s3c24xx/common.c
+++ b/arch/arm/mach-s3c24xx/common.c
@@ -74,7 +74,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x3241,
.idmask = 0x,
.map_io = s3c2410_map_io,
-   .init_clocks= s3c2410_init_clocks,
.init_uarts = s3c2410_init_uarts,
.init   = s3c2410_init,
.name   = name_s3c2410
@@ -83,7 +82,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x32410002,
.idmask = 0x,
.map_io = s3c2410_map_io,
-   .init_clocks= s3c2410_init_clocks,
.init_uarts = s3c2410_init_uarts,
.init   = s3c2410a_init,
.name   = name_s3c2410a
diff --git a/arch/arm/mach-s3c24xx/mach-amlm5900.c 
b/arch/arm/mach-s3c24xx/mach-amlm5900.c
index 284ea1f..0e175e0 100644
--- a/arch/arm/mach-s3c24xx/mach-amlm5900.c
+++ b/arch/arm/mach-s3c24xx/mach-amlm5900.c
@@ -161,11 +161,16 @@ static struct platform_device *amlm5900_devices[] 
__initdata = {
 static void __init amlm5900_map_io(void)
 {
s3c24xx_init_io(amlm5900_iodesc, ARRAY_SIZE(amlm5900_iodesc));
-   s3c24xx_init_clocks(0);
s3c24xx_init_uarts(amlm5900_uartcfgs, ARRAY_SIZE(amlm5900_uartcfgs));
samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
 }
 
+static void __init amlm5900_init_time(void)
+{
+   s3c2410_init_clocks(1200);
+   samsung_timer_init();
+}
+
 #ifdef CONFIG_FB_S3C2410
 static struct s3c2410fb_display __initdata amlm5900_lcd_info = {
.width  = 160,
@@ -241,6 +246,6 @@ MACHINE_START(AML_M5900, AML_M5900)
.map_io = amlm5900_map_io,
.init_irq   = s3c2410_init_irq,
.init_machine   = amlm5900_init,
-   .init_time  = samsung_timer_init,
+   .init_time  = amlm5900_init_time,
.restart= s3c2410_restart,
 MACHINE_END
diff --git a/arch/arm/mach-s3c24xx/mach-bast.c 
b/arch/arm/mach-s3c24xx/mach-bast.c
index 13e078c..ab075a6 100644
--- a/arch/arm/mach-s3c24xx/mach-bast.c
+++ b/arch/arm/mach-s3c24xx/mach-bast.c
@@ -50,7 +50,6 @@
 #include mach/regs-lcd.h
 #include mach/gpio-samsung.h
 
-#include plat/clock.h
 #include plat/cpu.h
 #include plat/cpu-freq.h
 #include plat/devs.h
@@ -581,11 +580,16 @@ static void __init bast_map_io(void)
s3c_hwmon_set_platdata(bast_hwmon_info);
 
s3c24xx_init_io(bast_iodesc, ARRAY_SIZE(bast_iodesc));
-   s3c24xx_init_clocks(0);
s3c24xx_init_uarts(bast_uartcfgs, ARRAY_SIZE(bast_uartcfgs));
samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
 }
 
+static void __init bast_init_time(void)
+{
+   s3c2410_init_clocks(1200);
+   samsung_timer_init();
+}
+
 static void __init bast_init(void)
 {
register_syscore_ops(bast_pm_syscore_ops);
@@ -613,6 +617,6 @@ MACHINE_START(BAST, Simtec-BAST)
.map_io = bast_map_io,
.init_irq   = s3c2410_init_irq,
.init_machine   = bast_init,
-   .init_time  = samsung_timer_init,
+   .init_time  = 

[PATCH v2 9/9] ARM: S3C24XX: remove legacy clock code

2014-04-23 Thread Heiko Stübner
With the move to the common clock framework completed for s3c2410, s3c2440
and s3c2442, the legacy clock code for these machines can go away too.

This also includes the legacy dclk code, as all legacy users are converted.

Signed-off-by: Heiko Stuebner he...@sntech.de
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
 arch/arm/mach-s3c24xx/Kconfig   |  11 -
 arch/arm/mach-s3c24xx/Makefile  |   2 -
 arch/arm/mach-s3c24xx/clock-dclk.c  | 195 
 arch/arm/mach-s3c24xx/clock-s3c2410.c   | 285 
 arch/arm/mach-s3c24xx/clock-s3c2440.c   | 217 --
 arch/arm/mach-s3c24xx/clock-s3c244x.c   | 141 
 arch/arm/mach-s3c24xx/common.h  |   2 -
 arch/arm/mach-s3c24xx/include/mach/regs-clock.h |  18 --
 arch/arm/mach-s3c24xx/include/mach/regs-gpio.h  |   3 -
 arch/arm/mach-s3c24xx/pm.c  |  12 -
 arch/arm/mach-s3c24xx/s3c2410.c |  62 --
 arch/arm/mach-s3c24xx/s3c2442.c | 112 --
 arch/arm/mach-s3c24xx/s3c244x.c |  63 --
 13 files changed, 1123 deletions(-)
 delete mode 100644 arch/arm/mach-s3c24xx/clock-dclk.c
 delete mode 100644 arch/arm/mach-s3c24xx/clock-s3c2410.c
 delete mode 100644 arch/arm/mach-s3c24xx/clock-s3c2440.c
 delete mode 100644 arch/arm/mach-s3c24xx/clock-s3c244x.c

diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index 57ebb13..02b1adf 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -110,17 +110,6 @@ config CPU_S3C2443
 
 # common code
 
-config S3C2410_CLOCK
-   bool
-   help
- Clock code for the S3C2410, and similar processors which
- is currently includes the S3C2410, S3C2440, S3C2442.
-
-config S3C24XX_DCLK
-   bool
-   help
- Clock code for supporting DCLK/CLKOUT on S3C24XX architectures
-
 config S3C24XX_SMDK
bool
help
diff --git a/arch/arm/mach-s3c24xx/Makefile b/arch/arm/mach-s3c24xx/Makefile
index 9010eba..2235d0d 100644
--- a/arch/arm/mach-s3c24xx/Makefile
+++ b/arch/arm/mach-s3c24xx/Makefile
@@ -44,10 +44,8 @@ obj-$(CONFIG_PM) += pm.o irq-pm.o sleep.o
 
 # common code
 
-obj-$(CONFIG_S3C24XX_DCLK) += clock-dclk.o
 obj-$(CONFIG_S3C24XX_DMA)  += dma.o
 
-obj-$(CONFIG_S3C2410_CLOCK)+= clock-s3c2410.o
 obj-$(CONFIG_S3C2410_CPUFREQ_UTILS) += cpufreq-utils.o
 
 obj-$(CONFIG_S3C2410_IOTIMING) += iotiming-s3c2410.o
diff --git a/arch/arm/mach-s3c24xx/clock-dclk.c 
b/arch/arm/mach-s3c24xx/clock-dclk.c
deleted file mode 100644
index 1edd9b2..000
--- a/arch/arm/mach-s3c24xx/clock-dclk.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 2004-2008 Simtec Electronics
- * Ben Dooks b...@simtec.co.uk
- * http://armlinux.simtec.co.uk/
- *
- * 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.
- *
- * S3C24XX - definitions for DCLK and CLKOUT registers
- */
-
-#include linux/kernel.h
-#include linux/errno.h
-#include linux/clk.h
-#include linux/io.h
-
-#include mach/regs-clock.h
-#include mach/regs-gpio.h
-
-#include plat/clock.h
-#include plat/cpu.h
-
-/* clocks that could be registered by external code */
-
-static int s3c24xx_dclk_enable(struct clk *clk, int enable)
-{
-   unsigned long dclkcon = __raw_readl(S3C24XX_DCLKCON);
-
-   if (enable)
-   dclkcon |= clk-ctrlbit;
-   else
-   dclkcon = ~clk-ctrlbit;
-
-   __raw_writel(dclkcon, S3C24XX_DCLKCON);
-
-   return 0;
-}
-
-static int s3c24xx_dclk_setparent(struct clk *clk, struct clk *parent)
-{
-   unsigned long dclkcon;
-   unsigned int uclk;
-
-   if (parent == clk_upll)
-   uclk = 1;
-   else if (parent == clk_p)
-   uclk = 0;
-   else
-   return -EINVAL;
-
-   clk-parent = parent;
-
-   dclkcon = __raw_readl(S3C24XX_DCLKCON);
-
-   if (clk-ctrlbit == S3C2410_DCLKCON_DCLK0EN) {
-   if (uclk)
-   dclkcon |= S3C2410_DCLKCON_DCLK0_UCLK;
-   else
-   dclkcon = ~S3C2410_DCLKCON_DCLK0_UCLK;
-   } else {
-   if (uclk)
-   dclkcon |= S3C2410_DCLKCON_DCLK1_UCLK;
-   else
-   dclkcon = ~S3C2410_DCLKCON_DCLK1_UCLK;
-   }
-
-   __raw_writel(dclkcon, S3C24XX_DCLKCON);
-
-   return 0;
-}
-static unsigned long s3c24xx_calc_div(struct clk *clk, unsigned long rate)
-{
-   unsigned long div;
-
-   if ((rate == 0) || !clk-parent)
-   return 0;
-
-   div = clk_get_rate(clk-parent) / rate;
-   if (div  2)
-   div = 2;
-   else if (div  16)
-   div = 16;
-
-   return div;
-}
-
-static unsigned long s3c24xx_round_dclk_rate(struct clk *clk,
-   unsigned 

[PATCH v2.1 3/9] ARM: S3C24XX: enable usage of common dclk if common clock framework is enabled

2014-04-23 Thread Heiko Stübner
Add platform device and select the correct implementation automatically
depending on wether the old samsung_clock or the common clock framework
is enabled.

This is only done for machines already using the old dclk implementation,
as everybody else should move to use dt anyway.

The machine-specific settings for the external clocks will have to be set
by somebody with knowledge about the specific hardware.

Signed-off-by: Heiko Stuebner he...@sntech.de
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
adapted to apply against v3.16-next/clk-s3c24xx

 arch/arm/mach-s3c24xx/Kconfig   | 22 +-
 arch/arm/mach-s3c24xx/common.c  | 14 ++
 arch/arm/mach-s3c24xx/common.h  |  2 ++
 arch/arm/mach-s3c24xx/mach-anubis.c |  5 +
 arch/arm/mach-s3c24xx/mach-bast.c   |  5 +
 arch/arm/mach-s3c24xx/mach-osiris.c |  5 +
 arch/arm/mach-s3c24xx/mach-rx1950.c |  5 +
 arch/arm/mach-s3c24xx/mach-vr1000.c |  5 +
 arch/arm/mach-s3c24xx/s3c244x.c |  2 ++
 9 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index d067f76..6036e77 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -18,6 +18,13 @@ config PLAT_S3C24XX
help
  Base platform code for any Samsung S3C24XX device
 
+config S3C2410_COMMON_DCLK
+   bool
+   select REGMAP_MMIO
+   help
+ Temporary symbol to build the dclk driver based on the common clock
+ framework.
+
 menu SAMSUNG S3C24XX SoCs Support
 
 comment S3C24XX SoCs
@@ -264,7 +271,8 @@ config ARCH_BAST
select ISA
select MACH_BAST_IDE
select S3C2410_IOTIMING if ARM_S3C2410_CPUFREQ
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C2410_COMMON_DCLK if COMMON_CLK
select S3C24XX_SIMTEC_NOR
select S3C24XX_SIMTEC_PM if PM
select S3C24XX_SIMTEC_USB
@@ -345,7 +353,8 @@ config MACH_TCT_HAMMER
 config MACH_VR1000
bool Thorcom VR1000
select MACH_BAST_IDE
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C2410_COMMON_DCLK if COMMON_CLK
select S3C24XX_SIMTEC_NOR
select S3C24XX_SIMTEC_PM if PM
select S3C24XX_SIMTEC_USB
@@ -530,7 +539,8 @@ config MACH_ANUBIS
bool Simtec Electronics ANUBIS
select HAVE_PATA_PLATFORM
select S3C2440_XTAL_1200
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C2410_COMMON_DCLK if COMMON_CLK
select S3C24XX_SIMTEC_PM if PM
select S3C_DEV_USB_HOST
help
@@ -571,7 +581,8 @@ config MACH_OSIRIS
bool Simtec IM2440D20 (OSIRIS) module
select S3C2410_IOTIMING if ARM_S3C2440_CPUFREQ
select S3C2440_XTAL_1200
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C2410_COMMON_DCLK if COMMON_CLK
select S3C24XX_SIMTEC_PM if PM
select S3C_DEV_NAND
select S3C_DEV_USB_HOST
@@ -643,7 +654,8 @@ config MACH_RX1950
select PM_H1940 if PM
select S3C2410_IOTIMING if ARM_S3C2440_CPUFREQ
select S3C2440_XTAL_16934400
-   select S3C24XX_DCLK
+   select S3C24XX_DCLK if SAMSUNG_CLOCK
+   select S3C24XX_COMMON_DCLK if COMMON_CLK
select S3C24XX_PWM
select S3C_DEV_NAND
help
diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c
index 92a1e3a..8e930e0 100644
--- a/arch/arm/mach-s3c24xx/common.c
+++ b/arch/arm/mach-s3c24xx/common.c
@@ -554,3 +554,17 @@ void __init s3c2443_init_clocks(int xtal)
s3c2443_common_clk_init(NULL, xtal, 1, S3C24XX_VA_CLKPWR);
 }
 #endif
+
+#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2440) || \
+   defined(CONFIG_CPU_S3C2442)
+static struct resource s3c2410_dclk_resource[] = {
+   [0] = DEFINE_RES_MEM(0x5684, 0x4),
+};
+
+struct platform_device s3c2410_device_dclk = {
+   .name   = s3c2410-dclk,
+   .id = 0,
+   .num_resources  = ARRAY_SIZE(s3c2410_dclk_resource),
+   .resource   = s3c2410_dclk_resource,
+};
+#endif
diff --git a/arch/arm/mach-s3c24xx/common.h b/arch/arm/mach-s3c24xx/common.h
index 3fade6d..50504c7 100644
--- a/arch/arm/mach-s3c24xx/common.h
+++ b/arch/arm/mach-s3c24xx/common.h
@@ -114,6 +114,8 @@ extern struct platform_device s3c2412_device_dma;
 extern struct platform_device s3c2440_device_dma;
 extern struct platform_device s3c2443_device_dma;
 
+extern struct platform_device s3c2410_device_dclk;
+
 #ifdef CONFIG_S3C2412_COMMON_CLK
 void __init s3c2412_common_clk_init(struct device_node *np, unsigned long 
xti_f,
unsigned long ext_f, void __iomem *reg_base);
diff --git a/arch/arm/mach-s3c24xx/mach-anubis.c 
b/arch/arm/mach-s3c24xx/mach-anubis.c
index 2a16f8f..6a1a781 100644
--- a/arch/arm/mach-s3c24xx/mach-anubis.c
+++ b/arch/arm/mach-s3c24xx/mach-anubis.c
@@ 

[PATCH v2.1 8/9] ARM: S3C24XX: convert s3c2410 to common clock framework

2014-04-23 Thread Heiko Stübner
Convert the machines using the s3c2410 to use the new driver based
on the common clock framework instead of the legacy Samsung clock driver.

As with the s3c244x, machines using the clkout output will need a fixup
from someone with the hardware.

Signed-off-by: Heiko Stuebner he...@sntech.de
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
adapted to apply against v3.16-next/clk-s3c24xx

 arch/arm/mach-s3c24xx/Kconfig   |  4 ++--
 arch/arm/mach-s3c24xx/common.c  |  2 --
 arch/arm/mach-s3c24xx/mach-amlm5900.c   |  9 +++--
 arch/arm/mach-s3c24xx/mach-bast.c   | 10 +++---
 arch/arm/mach-s3c24xx/mach-h1940.c  | 10 +++---
 arch/arm/mach-s3c24xx/mach-n30.c| 12 
 arch/arm/mach-s3c24xx/mach-nexcoder.c   |  7 +--
 arch/arm/mach-s3c24xx/mach-otom.c   | 10 +++---
 arch/arm/mach-s3c24xx/mach-qt2410.c |  9 +++--
 arch/arm/mach-s3c24xx/mach-smdk2410.c   |  9 +++--
 arch/arm/mach-s3c24xx/mach-tct_hammer.c |  9 +++--
 arch/arm/mach-s3c24xx/mach-vr1000.c | 10 +++---
 12 files changed, 67 insertions(+), 34 deletions(-)

diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index 96d1e54..57ebb13 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -37,10 +37,10 @@ comment S3C24XX SoCs
 config CPU_S3C2410
bool SAMSUNG S3C2410
default y
-   depends on SAMSUNG_CLOCK
+   select COMMON_CLK
select CPU_ARM920T
select CPU_LLSERIAL_S3C2410
-   select S3C2410_CLOCK
+   select S3C2410_COMMON_CLK
select S3C2410_DMA if S3C24XX_DMA
select ARM_S3C2410_CPUFREQ if ARM_S3C24XX_CPUFREQ
select S3C2410_PM if PM
diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c
index def8627..a7b1269 100644
--- a/arch/arm/mach-s3c24xx/common.c
+++ b/arch/arm/mach-s3c24xx/common.c
@@ -74,7 +74,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x3241,
.idmask = 0x,
.map_io = s3c2410_map_io,
-   .init_clocks= s3c2410_init_clocks,
.init_uarts = s3c2410_init_uarts,
.init   = s3c2410_init,
.name   = name_s3c2410
@@ -83,7 +82,6 @@ static struct cpu_table cpu_ids[] __initdata = {
.idcode = 0x32410002,
.idmask = 0x,
.map_io = s3c2410_map_io,
-   .init_clocks= s3c2410_init_clocks,
.init_uarts = s3c2410_init_uarts,
.init   = s3c2410a_init,
.name   = name_s3c2410a
diff --git a/arch/arm/mach-s3c24xx/mach-amlm5900.c 
b/arch/arm/mach-s3c24xx/mach-amlm5900.c
index 284ea1f..0e175e0 100644
--- a/arch/arm/mach-s3c24xx/mach-amlm5900.c
+++ b/arch/arm/mach-s3c24xx/mach-amlm5900.c
@@ -161,11 +161,16 @@ static struct platform_device *amlm5900_devices[] 
__initdata = {
 static void __init amlm5900_map_io(void)
 {
s3c24xx_init_io(amlm5900_iodesc, ARRAY_SIZE(amlm5900_iodesc));
-   s3c24xx_init_clocks(0);
s3c24xx_init_uarts(amlm5900_uartcfgs, ARRAY_SIZE(amlm5900_uartcfgs));
samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
 }
 
+static void __init amlm5900_init_time(void)
+{
+   s3c2410_init_clocks(1200);
+   samsung_timer_init();
+}
+
 #ifdef CONFIG_FB_S3C2410
 static struct s3c2410fb_display __initdata amlm5900_lcd_info = {
.width  = 160,
@@ -241,6 +246,6 @@ MACHINE_START(AML_M5900, AML_M5900)
.map_io = amlm5900_map_io,
.init_irq   = s3c2410_init_irq,
.init_machine   = amlm5900_init,
-   .init_time  = samsung_timer_init,
+   .init_time  = amlm5900_init_time,
.restart= s3c2410_restart,
 MACHINE_END
diff --git a/arch/arm/mach-s3c24xx/mach-bast.c 
b/arch/arm/mach-s3c24xx/mach-bast.c
index 13e078c..ab075a6 100644
--- a/arch/arm/mach-s3c24xx/mach-bast.c
+++ b/arch/arm/mach-s3c24xx/mach-bast.c
@@ -50,7 +50,6 @@
 #include mach/regs-lcd.h
 #include mach/gpio-samsung.h
 
-#include plat/clock.h
 #include plat/cpu.h
 #include plat/cpu-freq.h
 #include plat/devs.h
@@ -581,11 +580,16 @@ static void __init bast_map_io(void)
s3c_hwmon_set_platdata(bast_hwmon_info);
 
s3c24xx_init_io(bast_iodesc, ARRAY_SIZE(bast_iodesc));
-   s3c24xx_init_clocks(0);
s3c24xx_init_uarts(bast_uartcfgs, ARRAY_SIZE(bast_uartcfgs));
samsung_set_timer_source(SAMSUNG_PWM3, SAMSUNG_PWM4);
 }
 
+static void __init bast_init_time(void)
+{
+   s3c2410_init_clocks(1200);
+   samsung_timer_init();
+}
+
 static void __init bast_init(void)
 {
register_syscore_ops(bast_pm_syscore_ops);
@@ -613,6 +617,6 @@ MACHINE_START(BAST, Simtec-BAST)
.map_io = bast_map_io,
.init_irq   = s3c2410_init_irq,
.init_machine   = bast_init,
-   .init_time  = 

[PATCH v2.1 9/9] ARM: S3C24XX: remove legacy clock code

2014-04-23 Thread Heiko Stübner
With the move to the common clock framework completed for s3c2410, s3c2440
and s3c2442, the legacy clock code for these machines can go away too.

This also includes the legacy dclk code, as all legacy users are converted.

Signed-off-by: Heiko Stuebner he...@sntech.de
Reviewed-by: Tomasz Figa t.f...@samsung.com
---
adapted to apply against v3.16-next/clk-s3c24xx

 arch/arm/mach-s3c24xx/Kconfig   |  11 -
 arch/arm/mach-s3c24xx/Makefile  |   2 -
 arch/arm/mach-s3c24xx/clock-dclk.c  | 195 
 arch/arm/mach-s3c24xx/clock-s3c2410.c   | 284 
 arch/arm/mach-s3c24xx/clock-s3c2440.c   | 217 --
 arch/arm/mach-s3c24xx/clock-s3c244x.c   | 141 
 arch/arm/mach-s3c24xx/common.h  |   2 -
 arch/arm/mach-s3c24xx/include/mach/regs-clock.h |  18 --
 arch/arm/mach-s3c24xx/include/mach/regs-gpio.h  |   3 -
 arch/arm/mach-s3c24xx/pm.c  |  12 -
 arch/arm/mach-s3c24xx/s3c2410.c |  62 --
 arch/arm/mach-s3c24xx/s3c2442.c | 112 --
 arch/arm/mach-s3c24xx/s3c244x.c |  63 --
 13 files changed, 1122 deletions(-)
 delete mode 100644 arch/arm/mach-s3c24xx/clock-dclk.c
 delete mode 100644 arch/arm/mach-s3c24xx/clock-s3c2410.c
 delete mode 100644 arch/arm/mach-s3c24xx/clock-s3c2440.c
 delete mode 100644 arch/arm/mach-s3c24xx/clock-s3c244x.c

diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig
index 7b99740..77b0fb5 100644
--- a/arch/arm/mach-s3c24xx/Kconfig
+++ b/arch/arm/mach-s3c24xx/Kconfig
@@ -110,17 +110,6 @@ config CPU_S3C2443
 
 # common code
 
-config S3C2410_CLOCK
-   bool
-   help
- Clock code for the S3C2410, and similar processors which
- is currently includes the S3C2410, S3C2440, S3C2442.
-
-config S3C24XX_DCLK
-   bool
-   help
- Clock code for supporting DCLK/CLKOUT on S3C24XX architectures
-
 config S3C24XX_SMDK
bool
help
diff --git a/arch/arm/mach-s3c24xx/Makefile b/arch/arm/mach-s3c24xx/Makefile
index 9010eba..2235d0d 100644
--- a/arch/arm/mach-s3c24xx/Makefile
+++ b/arch/arm/mach-s3c24xx/Makefile
@@ -44,10 +44,8 @@ obj-$(CONFIG_PM) += pm.o irq-pm.o sleep.o
 
 # common code
 
-obj-$(CONFIG_S3C24XX_DCLK) += clock-dclk.o
 obj-$(CONFIG_S3C24XX_DMA)  += dma.o
 
-obj-$(CONFIG_S3C2410_CLOCK)+= clock-s3c2410.o
 obj-$(CONFIG_S3C2410_CPUFREQ_UTILS) += cpufreq-utils.o
 
 obj-$(CONFIG_S3C2410_IOTIMING) += iotiming-s3c2410.o
diff --git a/arch/arm/mach-s3c24xx/clock-dclk.c 
b/arch/arm/mach-s3c24xx/clock-dclk.c
deleted file mode 100644
index 1edd9b2..000
--- a/arch/arm/mach-s3c24xx/clock-dclk.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 2004-2008 Simtec Electronics
- * Ben Dooks b...@simtec.co.uk
- * http://armlinux.simtec.co.uk/
- *
- * 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.
- *
- * S3C24XX - definitions for DCLK and CLKOUT registers
- */
-
-#include linux/kernel.h
-#include linux/errno.h
-#include linux/clk.h
-#include linux/io.h
-
-#include mach/regs-clock.h
-#include mach/regs-gpio.h
-
-#include plat/clock.h
-#include plat/cpu.h
-
-/* clocks that could be registered by external code */
-
-static int s3c24xx_dclk_enable(struct clk *clk, int enable)
-{
-   unsigned long dclkcon = __raw_readl(S3C24XX_DCLKCON);
-
-   if (enable)
-   dclkcon |= clk-ctrlbit;
-   else
-   dclkcon = ~clk-ctrlbit;
-
-   __raw_writel(dclkcon, S3C24XX_DCLKCON);
-
-   return 0;
-}
-
-static int s3c24xx_dclk_setparent(struct clk *clk, struct clk *parent)
-{
-   unsigned long dclkcon;
-   unsigned int uclk;
-
-   if (parent == clk_upll)
-   uclk = 1;
-   else if (parent == clk_p)
-   uclk = 0;
-   else
-   return -EINVAL;
-
-   clk-parent = parent;
-
-   dclkcon = __raw_readl(S3C24XX_DCLKCON);
-
-   if (clk-ctrlbit == S3C2410_DCLKCON_DCLK0EN) {
-   if (uclk)
-   dclkcon |= S3C2410_DCLKCON_DCLK0_UCLK;
-   else
-   dclkcon = ~S3C2410_DCLKCON_DCLK0_UCLK;
-   } else {
-   if (uclk)
-   dclkcon |= S3C2410_DCLKCON_DCLK1_UCLK;
-   else
-   dclkcon = ~S3C2410_DCLKCON_DCLK1_UCLK;
-   }
-
-   __raw_writel(dclkcon, S3C24XX_DCLKCON);
-
-   return 0;
-}
-static unsigned long s3c24xx_calc_div(struct clk *clk, unsigned long rate)
-{
-   unsigned long div;
-
-   if ((rate == 0) || !clk-parent)
-   return 0;
-
-   div = clk_get_rate(clk-parent) / rate;
-   if (div  2)
-   div = 2;
-   else if (div  16)
-   div = 16;
-
-   return div;
-}
-
-static unsigned long 

Re: [PATCH v2 1/9] ARM: S3C24XX: cpufreq-utils: don't write raw values to MPLLCON when using ccf

2014-04-23 Thread Sergei Shtylyov

Hello.

On 04/23/2014 11:34 PM, Heiko Stübner wrote:


The s3c24xx cpufreq driver needs to change the mpll speed and was doing
this by writing raw values from a translation table into the MPLLCON
register.



Change this to use a regular clk_set_rate call when using the common
clock framework and only write the raw value in the samsung_clock case.



To not needing to create additional infrastructure for this, the mpll clock
is requested at the first call to s3c2410_set_fvco().



Signed-off-by: Heiko Stuebner he...@sntech.de
---
  arch/arm/mach-s3c24xx/cpufreq-utils.c | 14 ++
  1 file changed, 14 insertions(+)



diff --git a/arch/arm/mach-s3c24xx/cpufreq-utils.c 
b/arch/arm/mach-s3c24xx/cpufreq-utils.c
index 2a0aa56..d5e797b 100644
--- a/arch/arm/mach-s3c24xx/cpufreq-utils.c
+++ b/arch/arm/mach-s3c24xx/cpufreq-utils.c

[...]

@@ -60,5 +61,18 @@ void s3c2410_cpufreq_setrefresh(struct s3c_cpufreq_config 
*cfg)
   */
  void s3c2410_set_fvco(struct s3c_cpufreq_config *cfg)
  {
+#ifdef CONFIG_SAMSUNG_CLOCK
__raw_writel(cfg-pll.driver_data, S3C2410_MPLLCON);
+#endif
+
+#ifdef CONFIG_COMMON_CLK
+   static struct clk *mpll;
+
+   if (!mpll)


   You are testing uninitialized variable. This check wouldn't make much 
sense even if the variable was initialized.



+   mpll = clk_get(NULL, mpll)
+   if (IS_ERR(mpll))
+   return;
+
+   clk_set_rate(mpll, cfg-pll.frequency);
+#endif
  }


WBR, Sergei


--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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/9] ARM: S3C24XX: cpufreq-utils: don't write raw values to MPLLCON when using ccf

2014-04-23 Thread Tomasz Figa

Hi,

On 23.04.2014 22:42, Sergei Shtylyov wrote:

Hello.

On 04/23/2014 11:34 PM, Heiko Stübner wrote:


The s3c24xx cpufreq driver needs to change the mpll speed and was doing
this by writing raw values from a translation table into the MPLLCON
register.



Change this to use a regular clk_set_rate call when using the common
clock framework and only write the raw value in the samsung_clock case.



To not needing to create additional infrastructure for this, the mpll
clock
is requested at the first call to s3c2410_set_fvco().



Signed-off-by: Heiko Stuebner he...@sntech.de
---
  arch/arm/mach-s3c24xx/cpufreq-utils.c | 14 ++
  1 file changed, 14 insertions(+)



diff --git a/arch/arm/mach-s3c24xx/cpufreq-utils.c
b/arch/arm/mach-s3c24xx/cpufreq-utils.c
index 2a0aa56..d5e797b 100644
--- a/arch/arm/mach-s3c24xx/cpufreq-utils.c
+++ b/arch/arm/mach-s3c24xx/cpufreq-utils.c

[...]

@@ -60,5 +61,18 @@ void s3c2410_cpufreq_setrefresh(struct
s3c_cpufreq_config *cfg)
   */
  void s3c2410_set_fvco(struct s3c_cpufreq_config *cfg)
  {
+#ifdef CONFIG_SAMSUNG_CLOCK
  __raw_writel(cfg-pll.driver_data, S3C2410_MPLLCON);
+#endif
+
+#ifdef CONFIG_COMMON_CLK
+static struct clk *mpll;
+
+if (!mpll)


You are testing uninitialized variable. This check wouldn't make
much sense even if the variable was initialized.


I should probably add that NULL is considered a valid clock handle by 
Common Clock Framework.


If there is really no way to pass the clock to this function then 
probably a global variable initialized by some code running earlier than 
this function could be called would be a better choice.


Anyway, Heiko, thanks for working on this. I'll try to review rest of 
the series soon. (I'm attending the ELC next week, though, so I'm not 
sure if I find some time then, though.)


Best regards,
Tomasz
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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/9] ARM: S3C24XX: cpufreq-utils: don't write raw values to MPLLCON when using ccf

2014-04-23 Thread Sergei Shtylyov

On 04/24/2014 12:42 AM, Sergei Shtylyov wrote:


The s3c24xx cpufreq driver needs to change the mpll speed and was doing
this by writing raw values from a translation table into the MPLLCON
register.



Change this to use a regular clk_set_rate call when using the common
clock framework and only write the raw value in the samsung_clock case.



To not needing to create additional infrastructure for this, the mpll clock
is requested at the first call to s3c2410_set_fvco().



Signed-off-by: Heiko Stuebner he...@sntech.de
---
  arch/arm/mach-s3c24xx/cpufreq-utils.c | 14 ++
  1 file changed, 14 insertions(+)



diff --git a/arch/arm/mach-s3c24xx/cpufreq-utils.c
b/arch/arm/mach-s3c24xx/cpufreq-utils.c
index 2a0aa56..d5e797b 100644
--- a/arch/arm/mach-s3c24xx/cpufreq-utils.c
+++ b/arch/arm/mach-s3c24xx/cpufreq-utils.c

[...]

@@ -60,5 +61,18 @@ void s3c2410_cpufreq_setrefresh(struct s3c_cpufreq_config
*cfg)
   */
  void s3c2410_set_fvco(struct s3c_cpufreq_config *cfg)
  {
+#ifdef CONFIG_SAMSUNG_CLOCK
  __raw_writel(cfg-pll.driver_data, S3C2410_MPLLCON);
+#endif
+
+#ifdef CONFIG_COMMON_CLK
+static struct clk *mpll;
+
+if (!mpll)



You are testing uninitialized variable. This check wouldn't make much
sense even if the variable was initialized.


   Oops, I didn't notice *static*... :- The code makes more sense now.


+mpll = clk_get(NULL, mpll)
+if (IS_ERR(mpll))
+return;
+
+clk_set_rate(mpll, cfg-pll.frequency);
+#endif
  }


WBR, Sergei

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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/9] ARM: S3C24XX: cpufreq-utils: don't write raw values to MPLLCON when using ccf

2014-04-23 Thread Heiko Stübner
Am Mittwoch, 23. April 2014, 22:55:51 schrieb Tomasz Figa:
 Hi,
 
 On 23.04.2014 22:42, Sergei Shtylyov wrote:
  Hello.
  
  On 04/23/2014 11:34 PM, Heiko Stübner wrote:
  The s3c24xx cpufreq driver needs to change the mpll speed and was doing
  this by writing raw values from a translation table into the MPLLCON
  register.
  
  Change this to use a regular clk_set_rate call when using the common
  clock framework and only write the raw value in the samsung_clock case.
  
  To not needing to create additional infrastructure for this, the mpll
  clock
  is requested at the first call to s3c2410_set_fvco().
  
  Signed-off-by: Heiko Stuebner he...@sntech.de
  ---
  
arch/arm/mach-s3c24xx/cpufreq-utils.c | 14 ++
1 file changed, 14 insertions(+)
  
  diff --git a/arch/arm/mach-s3c24xx/cpufreq-utils.c
  b/arch/arm/mach-s3c24xx/cpufreq-utils.c
  index 2a0aa56..d5e797b 100644
  --- a/arch/arm/mach-s3c24xx/cpufreq-utils.c
  +++ b/arch/arm/mach-s3c24xx/cpufreq-utils.c
  
  [...]
  
  @@ -60,5 +61,18 @@ void s3c2410_cpufreq_setrefresh(struct
  s3c_cpufreq_config *cfg)
  
 */

void s3c2410_set_fvco(struct s3c_cpufreq_config *cfg)
{
  
  +#ifdef CONFIG_SAMSUNG_CLOCK
  
__raw_writel(cfg-pll.driver_data, S3C2410_MPLLCON);
  
  +#endif
  +
  +#ifdef CONFIG_COMMON_CLK
  +static struct clk *mpll;
  +
  +if (!mpll)
  
  You are testing uninitialized variable. This check wouldn't make
  
  much sense even if the variable was initialized.
 
 I should probably add that NULL is considered a valid clock handle by
 Common Clock Framework.
 
 If there is really no way to pass the clock to this function then
 probably a global variable initialized by some code running earlier than
 this function could be called would be a better choice.

*grrr* :-) ... ok I'll try to find another way (again) to do this


 Anyway, Heiko, thanks for working on this. I'll try to review rest of
 the series soon. (I'm attending the ELC next week, though, so I'm not
 sure if I find some time then, though.)

Just as a reminder, there isn't this much to still review, as you 
Acked/Reviewed most of the series in v1 and only this patch as well as 2 and 5 
still need a review/ack - and the only changes are fixes for your comments ;-)


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


[PATCH v2.1 1/9] ARM: S3C24XX: cpufreq-utils: don't write raw values to MPLLCON when using ccf

2014-04-23 Thread Heiko Stübner
The s3c24xx cpufreq driver needs to change the mpll speed and was doing
this by writing raw values from a translation table into the MPLLCON
register.

Change this to use a regular clk_set_rate call when using the common
clock framework and only write the raw value in the samsung_clock case.

The s3c cpufreq driver does already aquire the mpll, so simply add a reference
to struct s3c_cpufreq_config to let set_fvco access it.

While struct clk is opaque the differenciation between samsung clock and
common clock is kept, as the samsung-clock mpll clk does not implement a
real set_rate.

Signed-off-by: Heiko Stuebner he...@sntech.de
---
 arch/arm/mach-s3c24xx/cpufreq-utils.c  | 8 
 arch/arm/plat-samsung/include/plat/cpu-freq-core.h | 1 +
 drivers/cpufreq/s3c24xx-cpufreq.c  | 1 +
 3 files changed, 10 insertions(+)

diff --git a/arch/arm/mach-s3c24xx/cpufreq-utils.c 
b/arch/arm/mach-s3c24xx/cpufreq-utils.c
index 2a0aa56..c1b7508 100644
--- a/arch/arm/mach-s3c24xx/cpufreq-utils.c
+++ b/arch/arm/mach-s3c24xx/cpufreq-utils.c
@@ -14,6 +14,7 @@
 #include linux/errno.h
 #include linux/cpufreq.h
 #include linux/io.h
+#include linux/clk.h
 
 #include mach/map.h
 #include mach/regs-clock.h
@@ -60,5 +61,12 @@ void s3c2410_cpufreq_setrefresh(struct s3c_cpufreq_config 
*cfg)
  */
 void s3c2410_set_fvco(struct s3c_cpufreq_config *cfg)
 {
+#ifdef CONFIG_SAMSUNG_CLOCK
__raw_writel(cfg-pll.driver_data, S3C2410_MPLLCON);
+#endif
+
+#ifdef CONFIG_COMMON_CLK
+   if (!IS_ERR(cfg-mpll))
+   clk_set_rate(cfg-mpll, cfg-pll.frequency);
+#endif
 }
diff --git a/arch/arm/plat-samsung/include/plat/cpu-freq-core.h 
b/arch/arm/plat-samsung/include/plat/cpu-freq-core.h
index 7231c8e..72d4178 100644
--- a/arch/arm/plat-samsung/include/plat/cpu-freq-core.h
+++ b/arch/arm/plat-samsung/include/plat/cpu-freq-core.h
@@ -119,6 +119,7 @@ struct s3c_plltab {
 struct s3c_cpufreq_config {
struct s3c_freq freq;
struct s3c_freq max;
+   struct clk  *mpll;
struct cpufreq_frequency_table pll;
struct s3c_clkdivs  divs;
struct s3c_cpufreq_info *info;  /* for core, not drivers */
diff --git a/drivers/cpufreq/s3c24xx-cpufreq.c 
b/drivers/cpufreq/s3c24xx-cpufreq.c
index be1b2b5..227ebf7 100644
--- a/drivers/cpufreq/s3c24xx-cpufreq.c
+++ b/drivers/cpufreq/s3c24xx-cpufreq.c
@@ -141,6 +141,7 @@ static int s3c_cpufreq_calcdivs(struct s3c_cpufreq_config 
*cfg)
 
 static void s3c_cpufreq_setfvco(struct s3c_cpufreq_config *cfg)
 {
+   cfg-mpll = _clk_mpll;
(cfg-info-set_fvco)(cfg);
 }
 
-- 
1.9.0


--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] usb: ohci-exynos: Make provision for vdd regulators

2014-04-23 Thread Anton Tikhomirov
Hi,

 -Original Message-
 From: linux-usb-ow...@vger.kernel.org [mailto:linux-usb-
 ow...@vger.kernel.org] On Behalf Of Vivek Gautam
 Sent: Monday, April 21, 2014 9:17 PM
 
 Facilitate getting required 3.3V and 1.0V VDD supply for
 OHCI controller on Exynos.
 
 With patches for regulators' nodes merged in 3.15:
 c8c253f ARM: dts: Add regulator entries to smdk5420
 275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
 
 certain perripherals will now need to ensure that,
 they request VDD regulators in their drivers, and enable
 them so as to make them working.
 
 Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
 Cc: Jingoo Han jg1@samsung.com
 ---
 
 Based on 'usb-next' branch of Greg's usb tree.
 
  drivers/usb/host/ohci-exynos.c |   47
 
  1 file changed, 47 insertions(+)
 
 diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-
 exynos.c
 index 68588d8..e2e72a8 100644
 --- a/drivers/usb/host/ohci-exynos.c
 +++ b/drivers/usb/host/ohci-exynos.c
 @@ -18,6 +18,7 @@
  #include linux/module.h
  #include linux/of.h
  #include linux/platform_device.h
 +#include linux/regulator/consumer.h
  #include linux/usb/phy.h
  #include linux/usb/samsung_usb_phy.h
  #include linux/usb.h
 @@ -37,6 +38,8 @@ struct exynos_ohci_hcd {
   struct clk *clk;
   struct usb_phy *phy;
   struct usb_otg *otg;
 + struct regulator *vdd33;
 + struct regulator *vdd10;
  };
 
  static void exynos_ohci_phy_enable(struct platform_device *pdev)
 @@ -98,6 +101,28 @@ static int exynos_ohci_probe(struct platform_device
 *pdev)
   exynos_ohci-otg = phy-otg;
   }
 
 + exynos_ohci-vdd33 = devm_regulator_get(pdev-dev, vdd33);
 + if (IS_ERR(exynos_ohci-vdd33)) {
 + err = PTR_ERR(exynos_ohci-vdd33);
 + goto fail_regulator1;
 + }
 + err = regulator_enable(exynos_ohci-vdd33);
 + if (err) {
 + dev_err(pdev-dev, Failed to enable VDD33 supply\n);
 + goto fail_regulator1;
 + }
 +
 + exynos_ohci-vdd10 = devm_regulator_get(pdev-dev, vdd10);
 + if (IS_ERR(exynos_ohci-vdd10)) {
 + err = PTR_ERR(exynos_ohci-vdd10);
 + goto fail_regulator2;
 + }
 + err = regulator_enable(exynos_ohci-vdd10);
 + if (err) {
 + dev_err(pdev-dev, Failed to enable VDD10 supply\n);
 + goto fail_regulator2;
 + }
 +

Do we need to skip regulator settings together with PHY configuration
in case of exynos5440?

  skip_phy:
   exynos_ohci-clk = devm_clk_get(pdev-dev, usbhost);
 
 @@ -154,6 +179,10 @@ fail_add_hcd:
  fail_io:
   clk_disable_unprepare(exynos_ohci-clk);
  fail_clk:
 + regulator_disable(exynos_ohci-vdd10);
 +fail_regulator2:
 + regulator_disable(exynos_ohci-vdd33);
 +fail_regulator1:
   usb_put_hcd(hcd);
   return err;
  }
 @@ -172,6 +201,9 @@ static int exynos_ohci_remove(struct
 platform_device *pdev)
 
   clk_disable_unprepare(exynos_ohci-clk);
 
 + regulator_disable(exynos_ohci-vdd10);
 + regulator_disable(exynos_ohci-vdd33);
 +
   usb_put_hcd(hcd);
 
   return 0;
 @@ -208,6 +240,9 @@ static int exynos_ohci_suspend(struct device *dev)
 
   clk_disable_unprepare(exynos_ohci-clk);
 
 + regulator_disable(exynos_ohci-vdd10);
 + regulator_disable(exynos_ohci-vdd33);
 +
   spin_unlock_irqrestore(ohci-lock, flags);
 
   return 0;
 @@ -218,6 +253,18 @@ static int exynos_ohci_resume(struct device *dev)
   struct usb_hcd *hcd = dev_get_drvdata(dev);
   struct exynos_ohci_hcd *exynos_ohci = to_exynos_ohci(hcd);
   struct platform_device *pdev= to_platform_device(dev);
 + int ret;
 +
 + ret = regulator_enable(exynos_ohci-vdd33);
 + if (ret) {
 + dev_err(dev, Failed to enable VDD33 supply\n);
 + return ret;

Not sure, but shall we continue resuming and do everything
we can in case of error? At least it will avoid
WARN_ON(clk-enable_count == 0) on next system suspend.

 + }
 + ret = regulator_enable(exynos_ohci-vdd10);
 + if (ret) {
 + dev_err(dev, Failed to enable VDD10 supply\n);
 + return ret;
 + }
 
   clk_prepare_enable(exynos_ohci-clk);
 
 --

Thanks

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] usb: ohci-exynos: Make provision for vdd regulators

2014-04-23 Thread Jingoo Han
On Thursday, April 24, 2014 9:18 AM, Anton Tikhomirov wrote:
 On Monday, April 21, 2014 9:17 PM, Vivek Gautam wrote:
 
  Facilitate getting required 3.3V and 1.0V VDD supply for
  OHCI controller on Exynos.
 
  With patches for regulators' nodes merged in 3.15:
  c8c253f ARM: dts: Add regulator entries to smdk5420
  275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
 
  certain perripherals will now need to ensure that,
  they request VDD regulators in their drivers, and enable
  them so as to make them working.
 
  Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
  Cc: Jingoo Han jg1@samsung.com
  ---
 
  Based on 'usb-next' branch of Greg's usb tree.
 
   drivers/usb/host/ohci-exynos.c |   47
  
   1 file changed, 47 insertions(+)
 
  diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-
  exynos.c
  index 68588d8..e2e72a8 100644
  --- a/drivers/usb/host/ohci-exynos.c
  +++ b/drivers/usb/host/ohci-exynos.c
  @@ -18,6 +18,7 @@
   #include linux/module.h
   #include linux/of.h
   #include linux/platform_device.h
  +#include linux/regulator/consumer.h
   #include linux/usb/phy.h
   #include linux/usb/samsung_usb_phy.h
   #include linux/usb.h
  @@ -37,6 +38,8 @@ struct exynos_ohci_hcd {
  struct clk *clk;
  struct usb_phy *phy;
  struct usb_otg *otg;
  +   struct regulator *vdd33;
  +   struct regulator *vdd10;
   };
 
   static void exynos_ohci_phy_enable(struct platform_device *pdev)
  @@ -98,6 +101,28 @@ static int exynos_ohci_probe(struct platform_device
  *pdev)
  exynos_ohci-otg = phy-otg;
  }
 
  +   exynos_ohci-vdd33 = devm_regulator_get(pdev-dev, vdd33);
  +   if (IS_ERR(exynos_ohci-vdd33)) {
  +   err = PTR_ERR(exynos_ohci-vdd33);
  +   goto fail_regulator1;
  +   }
  +   err = regulator_enable(exynos_ohci-vdd33);
  +   if (err) {
  +   dev_err(pdev-dev, Failed to enable VDD33 supply\n);
  +   goto fail_regulator1;
  +   }
  +
  +   exynos_ohci-vdd10 = devm_regulator_get(pdev-dev, vdd10);
  +   if (IS_ERR(exynos_ohci-vdd10)) {
  +   err = PTR_ERR(exynos_ohci-vdd10);
  +   goto fail_regulator2;
  +   }
  +   err = regulator_enable(exynos_ohci-vdd10);
  +   if (err) {
  +   dev_err(pdev-dev, Failed to enable VDD10 supply\n);
  +   goto fail_regulator2;
  +   }
  +
 
 Do we need to skip regulator settings together with PHY configuration
 in case of exynos5440?

Oh, right. In the case of exynos5440, regulator settings is not 
necessary. Vivek, would you fix it in order skip regulator settings
in exynos5440? It also applies to ehci-exynos.

Best regards,
Jingoo Han

 
   skip_phy:
  exynos_ohci-clk = devm_clk_get(pdev-dev, usbhost);
 
  @@ -154,6 +179,10 @@ fail_add_hcd:
   fail_io:
  clk_disable_unprepare(exynos_ohci-clk);
   fail_clk:
  +   regulator_disable(exynos_ohci-vdd10);
  +fail_regulator2:
  +   regulator_disable(exynos_ohci-vdd33);
  +fail_regulator1:
  usb_put_hcd(hcd);
  return err;
   }
  @@ -172,6 +201,9 @@ static int exynos_ohci_remove(struct
  platform_device *pdev)
 
  clk_disable_unprepare(exynos_ohci-clk);
 
  +   regulator_disable(exynos_ohci-vdd10);
  +   regulator_disable(exynos_ohci-vdd33);
  +
  usb_put_hcd(hcd);
 
  return 0;
  @@ -208,6 +240,9 @@ static int exynos_ohci_suspend(struct device *dev)
 
  clk_disable_unprepare(exynos_ohci-clk);
 
  +   regulator_disable(exynos_ohci-vdd10);
  +   regulator_disable(exynos_ohci-vdd33);
  +
  spin_unlock_irqrestore(ohci-lock, flags);
 
  return 0;
  @@ -218,6 +253,18 @@ static int exynos_ohci_resume(struct device *dev)
  struct usb_hcd *hcd = dev_get_drvdata(dev);
  struct exynos_ohci_hcd *exynos_ohci = to_exynos_ohci(hcd);
  struct platform_device *pdev= to_platform_device(dev);
  +   int ret;
  +
  +   ret = regulator_enable(exynos_ohci-vdd33);
  +   if (ret) {
  +   dev_err(dev, Failed to enable VDD33 supply\n);
  +   return ret;
 
 Not sure, but shall we continue resuming and do everything
 we can in case of error? At least it will avoid
 WARN_ON(clk-enable_count == 0) on next system suspend.
 
  +   }
  +   ret = regulator_enable(exynos_ohci-vdd10);
  +   if (ret) {
  +   dev_err(dev, Failed to enable VDD10 supply\n);
  +   return ret;
  +   }
 
  clk_prepare_enable(exynos_ohci-clk);
 
  --
 
 Thanks

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] usb: ohci-exynos: Make provision for vdd regulators

2014-04-23 Thread Anton Tikhomirov
Hi,

 Hi,
 
  -Original Message-
  From: linux-usb-ow...@vger.kernel.org [mailto:linux-usb-
  ow...@vger.kernel.org] On Behalf Of Vivek Gautam
  Sent: Monday, April 21, 2014 9:17 PM
 
  Facilitate getting required 3.3V and 1.0V VDD supply for
  OHCI controller on Exynos.
 
  With patches for regulators' nodes merged in 3.15:
  c8c253f ARM: dts: Add regulator entries to smdk5420
  275dcd2 ARM: dts: add max77686 pmic node for smdk5250,
 
  certain perripherals will now need to ensure that,
  they request VDD regulators in their drivers, and enable
  them so as to make them working.
 
  Signed-off-by: Vivek Gautam gautam.vi...@samsung.com
  Cc: Jingoo Han jg1@samsung.com
  ---
 
  Based on 'usb-next' branch of Greg's usb tree.
 
   drivers/usb/host/ohci-exynos.c |   47
  
   1 file changed, 47 insertions(+)
 
  diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-
  exynos.c
  index 68588d8..e2e72a8 100644
  --- a/drivers/usb/host/ohci-exynos.c
  +++ b/drivers/usb/host/ohci-exynos.c
  @@ -18,6 +18,7 @@
   #include linux/module.h
   #include linux/of.h
   #include linux/platform_device.h
  +#include linux/regulator/consumer.h
   #include linux/usb/phy.h
   #include linux/usb/samsung_usb_phy.h
   #include linux/usb.h
  @@ -37,6 +38,8 @@ struct exynos_ohci_hcd {
  struct clk *clk;
  struct usb_phy *phy;
  struct usb_otg *otg;
  +   struct regulator *vdd33;
  +   struct regulator *vdd10;
   };
 
   static void exynos_ohci_phy_enable(struct platform_device *pdev)
  @@ -98,6 +101,28 @@ static int exynos_ohci_probe(struct
 platform_device
  *pdev)
  exynos_ohci-otg = phy-otg;
  }
 
  +   exynos_ohci-vdd33 = devm_regulator_get(pdev-dev, vdd33);
  +   if (IS_ERR(exynos_ohci-vdd33)) {
  +   err = PTR_ERR(exynos_ohci-vdd33);
  +   goto fail_regulator1;
  +   }
  +   err = regulator_enable(exynos_ohci-vdd33);
  +   if (err) {
  +   dev_err(pdev-dev, Failed to enable VDD33 supply\n);
  +   goto fail_regulator1;
  +   }
  +
  +   exynos_ohci-vdd10 = devm_regulator_get(pdev-dev, vdd10);
  +   if (IS_ERR(exynos_ohci-vdd10)) {
  +   err = PTR_ERR(exynos_ohci-vdd10);
  +   goto fail_regulator2;
  +   }
  +   err = regulator_enable(exynos_ohci-vdd10);
  +   if (err) {
  +   dev_err(pdev-dev, Failed to enable VDD10 supply\n);
  +   goto fail_regulator2;
  +   }
  +
 
 Do we need to skip regulator settings together with PHY configuration
 in case of exynos5440?
 
   skip_phy:
  exynos_ohci-clk = devm_clk_get(pdev-dev, usbhost);
 
  @@ -154,6 +179,10 @@ fail_add_hcd:
   fail_io:
  clk_disable_unprepare(exynos_ohci-clk);
   fail_clk:
  +   regulator_disable(exynos_ohci-vdd10);
  +fail_regulator2:
  +   regulator_disable(exynos_ohci-vdd33);
  +fail_regulator1:
  usb_put_hcd(hcd);
  return err;
   }
  @@ -172,6 +201,9 @@ static int exynos_ohci_remove(struct
  platform_device *pdev)
 
  clk_disable_unprepare(exynos_ohci-clk);
 
  +   regulator_disable(exynos_ohci-vdd10);
  +   regulator_disable(exynos_ohci-vdd33);
  +
  usb_put_hcd(hcd);
 
  return 0;
  @@ -208,6 +240,9 @@ static int exynos_ohci_suspend(struct device *dev)
 
  clk_disable_unprepare(exynos_ohci-clk);
 
  +   regulator_disable(exynos_ohci-vdd10);
  +   regulator_disable(exynos_ohci-vdd33);
  +
  spin_unlock_irqrestore(ohci-lock, flags);
 
  return 0;
  @@ -218,6 +253,18 @@ static int exynos_ohci_resume(struct device *dev)
  struct usb_hcd *hcd = dev_get_drvdata(dev);
  struct exynos_ohci_hcd *exynos_ohci = to_exynos_ohci(hcd);
  struct platform_device *pdev= to_platform_device(dev);
  +   int ret;
  +
  +   ret = regulator_enable(exynos_ohci-vdd33);
  +   if (ret) {
  +   dev_err(dev, Failed to enable VDD33 supply\n);
  +   return ret;
 
 Not sure, but shall we continue resuming and do everything
 we can in case of error? At least it will avoid
 WARN_ON(clk-enable_count == 0) on next system suspend.

On the other hand, if power is not applied to the controller,
register access in ohci_resume() may lead to undefined behavior.
What's your opinion?

 
  +   }
  +   ret = regulator_enable(exynos_ohci-vdd10);
  +   if (ret) {
  +   dev_err(dev, Failed to enable VDD10 supply\n);
  +   return ret;
  +   }
 
  clk_prepare_enable(exynos_ohci-clk);
 
  --
 
 Thanks

Thanks

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


Re: [RFC v2 PATCH 02/14] drm/exynos: dsi: delay setting clocks after reset

2014-04-23 Thread YoungJun Cho

Hi Andrzej,

Thank you for the comments.

On 04/23/2014 04:37 PM, Andrzej Hajda wrote:

On 04/23/2014 05:45 AM, YoungJun Cho wrote:

Hi again Andrzej,

On 04/23/2014 10:01 AM, YoungJun Cho wrote:

Hi Andrzej

Thank you for comments.

On 04/22/2014 09:15 PM, Andrzej Hajda wrote:

Hi YoungJun,

On 04/21/2014 02:28 PM, YoungJun Cho wrote:

Some phy control registers are not kept after software reset.
So this patch makes the clocks containing phy control to be set
after software reset.

Signed-off-by: YoungJun Cho yj44@samsung.com
Acked-by: Inki Dae inki@samsung.com
Acked-by: Kyungmin Park kyungmin.p...@samsung.com
---
   drivers/gpu/drm/exynos/exynos_drm_dsi.c |2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 956e5f3..2cf1f0b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -946,10 +946,10 @@ static irqreturn_t exynos_dsi_irq(int irq, void
*dev_id)

   static int exynos_dsi_init(struct exynos_dsi *dsi)
   {
-exynos_dsi_enable_clock(dsi);
   exynos_dsi_reset(dsi);
   enable_irq(dsi-irq);
   exynos_dsi_wait_for_reset(dsi);
+exynos_dsi_enable_clock(dsi);
   exynos_dsi_init_link(dsi);

   return 0;


I have commented it in the previous version of the patchset. I repeat it
again.
This is a regression, on exynos4210-trats I have 'timeout waiting for
reset' message after dpms off, on.


I'm really sorry for that. I misunderstood last time.

I think the original codes were correct, because the reset timeout would
be occurred without clock activation.


This is not true.



I'll check and fix again.
(By the way, why am I ok?)


I have not verified with exynos4210-trats board yet(I have to get it),
but reset timeout is occured in exynos_dsi_wait_for_reset()
with dsi-completed and that is completed by exynos_dsi_irq().

And the regulators and clocks are enabled by exynos_dsi_poweron(),
NOT by exynos_dsi_enable_clock().

So I think the reset timeout is not related with this patch.



As far as I remember there were at least two issues with init sequence:
- spurious irq storm after power on and before reset,
- irq reset timeouts after reset and without enabled clock.

The current sequence is a result of tests on live hw (documentation were
not helpful in this case). I think it could be improved little bit more
by moving exynos_dsi_enable_clock just after enable_irq this will
eliminate possible timeout when RST_RELEASE irq is signaled but irq is
still disabled. The sequence should look like below:

exynos_dsi_reset(dsi);
enable_irq(dsi-irq);
exynos_dsi_enable_clock(dsi);
exynos_dsi_wait_for_reset(dsi);
exynos_dsi_init_link(dsi);

And PHY related configuration could be put somewhere after
exynos_dsi_wait_for_reset.

I have tested this sequence on trats, it seems to be OK.


It also works well in Exynos5420 target.

I think it would be better to remove this patch and implement new PHY
control functions with this modification.

Thank you.
Best regards YJ



Regards
Andrzej




Anyway I need more investigation.

Thank you.
Best regards YJ





I will comment your previous answer here to make the discussion easier:

As I mentioned in description, it came from phy control registers.
Fortunately Exynos4 SoCs are safe, but the DSIM_PHYCTRL_REG,
DSIM_PHYTIMING_REG, DSIM_PHYTIMING1_REG and DSIM_PHYTIMING2_REG are
affected which are used in exynos_dsi_set_pll() for Exynos5 SoCs.

So this patch is required for Exynos5 SoCs.


In the moment this patch is applied exynos_dsi_set_pll do not touch phy
registers you have mentioned.
Your change would be more clear if it will be merged together with the
patch adding PHYCTRL settings.

Anyway, solution is simple - please set PHY registers after reset and
configure clocks before reset to avoid
reset timeouts, is there any reason to not do it this way?


The only reason is that the PHY control is related with PLL control and
that was in exynos_dsi_enable_clock() call path.
So I just wanted to keep current sequence.

If there is no way to use previous one, I'll consider your approach.

Thank you.
Best regards YJ



Regards
Andrzej



___
dri-devel mailing list
dri-de...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel








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


Re: [RFC v2 PATCH 08/14] drm/exynos: dsi: add driver data to support Exynos5420

2014-04-23 Thread YoungJun Cho

Hi Andrzej,

Thank you for comments.

On 04/23/2014 05:29 PM, Andrzej Hajda wrote:

On 04/21/2014 02:28 PM, YoungJun Cho wrote:

The offset of register DSIM_PLLTMR_REG in Exynos5420 is different
from the one in Exynos4 SoC.

In case of Exynos5420 SoC, there is no frequency band bit in DSIM_PLLCTRL_REG,
and it uses DSIM_PHYCTRL_REG and DSIM_PHYTIMING*_REG instead.
So this patch adds driver data to distinguish it.

Signed-off-by: YoungJun Cho yj44@samsung.com
Acked-by: Inki Dae inki@samsung.com
Acked-by: Kyungmin Park kyungmin.p...@samsung.com
---
  drivers/gpu/drm/exynos/exynos_drm_dsi.c |  101 ---
  1 file changed, 80 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c 
b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 179f2fa..fcd577f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -17,6 +17,7 @@

  #include linux/clk.h
  #include linux/irq.h
+#include linux/of_device.h
  #include linux/phy/phy.h
  #include linux/regulator/consumer.h

@@ -54,9 +55,12 @@

  /* FIFO memory AC characteristic register */
  #define DSIM_PLLCTRL_REG  0x4c/* PLL control register */
-#define DSIM_PLLTMR_REG0x50/* PLL timer register */
  #define DSIM_PHYACCHR_REG 0x54/* D-PHY AC characteristic register */
  #define DSIM_PHYACCHR1_REG0x58/* D-PHY AC characteristic register1 */
+#define DSIM_PHYCTRL_REG   0x5c
+#define DSIM_PHYTIMING_REG 0x64
+#define DSIM_PHYTIMING1_REG0x68
+#define DSIM_PHYTIMING2_REG0x6c

  /* DSIM_STATUS */
  #define DSIM_STOP_STATE_DAT(x)(((x)  0xf)  0)
@@ -233,6 +237,12 @@ struct exynos_dsi_transfer {
  #define DSIM_STATE_INITIALIZEDBIT(1)
  #define DSIM_STATE_CMD_LPMBIT(2)

+struct exynos_dsi_driver_data {
+   unsigned int plltmr_reg;
+
+   unsigned int has_freqband:1;
+};
+
  struct exynos_dsi {
struct mipi_dsi_host dsi_host;
struct drm_connector connector;
@@ -262,11 +272,39 @@ struct exynos_dsi {

spinlock_t transfer_lock; /* protects transfer_list */
struct list_head transfer_list;
+
+   struct exynos_dsi_driver_data *driver_data;
  };

  #define host_to_dsi(host) container_of(host, struct exynos_dsi, dsi_host)
  #define connector_to_dsi(c) container_of(c, struct exynos_dsi, connector)

+static struct exynos_dsi_driver_data exynos4_dsi_driver_data = {
+   .plltmr_reg = 0x50,
+   .has_freqband = 1,
+};
+
+static struct exynos_dsi_driver_data exynos5_dsi_driver_data = {
+   .plltmr_reg = 0x58,
+};
+
+static struct of_device_id exynos_dsi_of_match[] = {
+   { .compatible = samsung,exynos4210-mipi-dsi,
+ .data = exynos4_dsi_driver_data },
+   { .compatible = samsung,exynos5420-mipi-dsi,
+ .data = exynos5_dsi_driver_data },
+   { }
+};


I wonder if it wouldn't be better to use samsung,exynos5410-mipi-dsi
compatible and distinguish 5410 and 5420 by DSIM_VERSION register.



That's because I have only Exynos5420 SoC based target,
so made DT for that and tested it only.

But it seems to be no problem to use exynos5410 compatible at least
for the dsi device :).

I'll try.




+
+static inline struct exynos_dsi_driver_data *exynos_dsi_get_driver_data(
+   struct platform_device *pdev)
+{
+   const struct of_device_id *of_id =
+   of_match_device(exynos_dsi_of_match, pdev-dev);
+
+   return (struct exynos_dsi_driver_data *)of_id-data;
+}
+
  static void exynos_dsi_wait_for_reset(struct exynos_dsi *dsi)
  {
if (wait_for_completion_timeout(dsi-completed, msecs_to_jiffies(300)))
@@ -340,14 +378,9 @@ static unsigned long exynos_dsi_pll_find_pms(struct 
exynos_dsi *dsi,
  static unsigned long exynos_dsi_set_pll(struct exynos_dsi *dsi,
unsigned long freq)
  {
-   static const unsigned long freq_bands[] = {
-   100 * MHZ, 120 * MHZ, 160 * MHZ, 200 * MHZ,
-   270 * MHZ, 320 * MHZ, 390 * MHZ, 450 * MHZ,
-   510 * MHZ, 560 * MHZ, 640 * MHZ, 690 * MHZ,
-   770 * MHZ, 870 * MHZ, 950 * MHZ,
-   };
+   struct exynos_dsi_driver_data *driver_data = dsi-driver_data;
unsigned long fin, fout;
-   int timeout, band;
+   int timeout;
u8 p, s;
u16 m;
u32 reg;
@@ -368,18 +401,30 @@ static unsigned long exynos_dsi_set_pll(struct exynos_dsi 
*dsi,
failed to find PLL PMS for requested frequency\n);
return -EFAULT;
}
+   dev_dbg(dsi-dev, PLL freq %lu, (p %d, m %d, s %d)\n, fout, p, m, s);

-   for (band = 0; band  ARRAY_SIZE(freq_bands); ++band)
-   if (fout  freq_bands[band])
-   break;
+   writel(500, dsi-reg_base + driver_data-plltmr_reg);
+
+   reg = DSIM_PLL_EN | DSIM_PLL_P(p) | DSIM_PLL_M(m) | DSIM_PLL_S(s);
+
+   if 

  1   2   >