Re: [PATCH 1/4] ARM: dts: add support for hdmi to exynos4
Hi Thomas, On Fri, Jan 25, 2013 at 11:10 PM, Thomas Abraham wrote: > On 25 January 2013 02:39, Rahul Sharma wrote: >> Signed-off-by: Rahul Sharma >> >> Conflicts: >> arch/arm/mach-exynos/mach-exynos4-dt.c >> --- >> arch/arm/boot/dts/exynos4.dtsi | 7 +++ >> arch/arm/mach-exynos/mach-exynos4-dt.c | 2 ++ >> 2 files changed, 9 insertions(+) >> >> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi >> index e1347fc..6c2c79d 100644 >> --- a/arch/arm/boot/dts/exynos4.dtsi >> +++ b/arch/arm/boot/dts/exynos4.dtsi >> @@ -289,4 +289,11 @@ >> interrupts = <0 34 0>; >> }; >> }; >> + >> + hdmi { >> + compatible = "samsung,exynos4-hdmi14"; >> + reg = <0x12D0 0x7>; >> + interrupts = <0 95 0>; >> + hpd-gpio = <&gpx3 7 0xf 1 3>; > > This is using the older gpio dt bindings but exynos4 has started using > the pinctrl bindings. So this is not sufficient to do the > pinmux/pinconfig settings on Exynos4. > > Thanks, > Thomas. > I have chosen this as exynos5 DT using it in same way and parsed by common code in driver for exy4 and 5. Secondly, one-time initial configuration is sufficient for hdmi hpd-gpio. Please share your opinion. regards, Rahul Sharma. >> + }; >> }; >> diff --git a/arch/arm/mach-exynos/mach-exynos4-dt.c >> b/arch/arm/mach-exynos/mach-exynos4-dt.c >> index ab1dacc..24f72a5 100644 >> --- a/arch/arm/mach-exynos/mach-exynos4-dt.c >> +++ b/arch/arm/mach-exynos/mach-exynos4-dt.c >> @@ -80,6 +80,8 @@ static const struct of_dev_auxdata >> exynos4_auxdata_lookup[] __initconst = { >> OF_DEV_AUXDATA("arm,pl330", EXYNOS4_PA_MDMA1, "dma-pl330.2", NULL), >> OF_DEV_AUXDATA("samsung,exynos4210-tmu", EXYNOS4_PA_TMU, >> "exynos-tmu", NULL), >> + OF_DEV_AUXDATA("samsung,exynos4-hdmi14", EXYNOS4_PA_HDMI, >> + "exynos4-hdmi", NULL), >> {}, >> }; >> >> -- >> 1.8.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 -- 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 0/5] Add DRM FIMD DT support for Exynos4 DT Machines
Thanks Sachin. Will add related documentation and resend. On 28 January 2013 11:56, Sachin Kamat wrote: > Hi Vikas, > > You need to CC devicetree-disc...@lists.ozlabs.org for patches adding > new bindings and add documentation related to it. > > On 28 January 2013 11:14, Vikas Sajjan wrote: >> This patch series adds support for DRM FIMD DT for Exynos4 DT Machines, >> specifically for Exynos4412 SoC. >> >> Is based on branch "for-next" >> http://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung.git >> >> Vikas Sajjan (5): >> ARM: dts: Add FIMD node to exynos4 >> ARM: dts: Adds lcd pinctrl node entries for SAMSUNG EXYNOS4412 SoC >> ARM: dts: Add FIMD node and display timing node to >> exynos4412-origen.dts >> ARM: dts: adds FIMD AUXDATA node entry for exynos4 DT >> ARM: EXYNOS: Enable backlight and PWM support for Exynos4 DT machines >> >> arch/arm/boot/dts/exynos4.dtsi|7 +++ >> arch/arm/boot/dts/exynos4412-origen.dts | 21 + >> arch/arm/boot/dts/exynos4x12-pinctrl.dtsi | 26 ++ >> arch/arm/mach-exynos/Kconfig |2 ++ >> arch/arm/mach-exynos/mach-exynos4-dt.c|4 >> 5 files changed, 60 insertions(+) >> >> -- >> 1.7.9.5 >> > > > > -- > With warm regards, > Sachin -- Thanks and Regards Vikas Sajjan -- 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/4] ARM: dts: add support for mixer to exynos4
On Mon, Jan 28, 2013 at 2:34 AM, Sylwester Nawrocki wrote: > On 01/25/2013 11:39 AM, Rahul Sharma wrote: >> >> diff --git a/arch/arm/boot/dts/exynos4.dtsi >> b/arch/arm/boot/dts/exynos4.dtsi >> index 6c2c79d..07cb7d4 100644 >> --- a/arch/arm/boot/dts/exynos4.dtsi >> +++ b/arch/arm/boot/dts/exynos4.dtsi >> @@ -296,4 +296,12 @@ >> interrupts =<0 95 0>; >> hpd-gpio =<&gpx3 7 0xf 1 3>; >> }; >> + >> + mixer: mixer { >> + compatible = "samsung,exynos4-mixer"; > > > I'm afraid this compatible property it too generic. Is the video mixer IP > really identical an all the Exynos4 series SoCs ? > It is same in Exynos4210, 4212 and 4412. > >> + reg = <0x12c1 0x1>, >> + <0x12c0 0x1>; >> + interrupts =<0 91 0>; >> + samsung,power-domain =<&pd_tv>; >> + }; >> }; > > > Is there documentation for these new bindings available somewhere ? > it is there at Documentation/devicetree/bindings/drm/exynos/mixer.txt. Probably I need to add details for power domain node property. regards, Rahul Sharma. > -- > > Thanks, > Sylwester -- 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 0/5] Add DRM FIMD DT support for Exynos4 DT Machines
Hi Vikas, You need to CC devicetree-disc...@lists.ozlabs.org for patches adding new bindings and add documentation related to it. On 28 January 2013 11:14, Vikas Sajjan wrote: > This patch series adds support for DRM FIMD DT for Exynos4 DT Machines, > specifically for Exynos4412 SoC. > > Is based on branch "for-next" > http://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung.git > > Vikas Sajjan (5): > ARM: dts: Add FIMD node to exynos4 > ARM: dts: Adds lcd pinctrl node entries for SAMSUNG EXYNOS4412 SoC > ARM: dts: Add FIMD node and display timing node to > exynos4412-origen.dts > ARM: dts: adds FIMD AUXDATA node entry for exynos4 DT > ARM: EXYNOS: Enable backlight and PWM support for Exynos4 DT machines > > arch/arm/boot/dts/exynos4.dtsi|7 +++ > arch/arm/boot/dts/exynos4412-origen.dts | 21 + > arch/arm/boot/dts/exynos4x12-pinctrl.dtsi | 26 ++ > arch/arm/mach-exynos/Kconfig |2 ++ > arch/arm/mach-exynos/mach-exynos4-dt.c|4 > 5 files changed, 60 insertions(+) > > -- > 1.7.9.5 > -- With warm regards, Sachin -- 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/4] ARM: dts: add support for hdmi to exynos4
Hi Sylwester, On Mon, Jan 28, 2013 at 2:24 AM, Sylwester Nawrocki wrote: > On 01/25/2013 11:39 AM, Rahul Sharma wrote: >> >> Signed-off-by: Rahul Sharma > > > Please provide proper commit text. > >> Conflicts: >> arch/arm/mach-exynos/mach-exynos4-dt.c > > > And make sure things like this are removed when submitting patches. > I will take care. > >> --- >> arch/arm/boot/dts/exynos4.dtsi | 7 +++ >> arch/arm/mach-exynos/mach-exynos4-dt.c | 2 ++ >> 2 files changed, 9 insertions(+) >> >> diff --git a/arch/arm/boot/dts/exynos4.dtsi >> b/arch/arm/boot/dts/exynos4.dtsi >> index e1347fc..6c2c79d 100644 >> --- a/arch/arm/boot/dts/exynos4.dtsi >> +++ b/arch/arm/boot/dts/exynos4.dtsi >> @@ -289,4 +289,11 @@ >> interrupts =<0 34 0>; >> }; >> }; >> + >> + hdmi { >> + compatible = "samsung,exynos4-hdmi14"; > > > What "-hdmi14" signifies here ? And to which Exynos4 SoC revisions this > compatible property is supposed to apply ? > -hdmi14 signifies 1.4 compliant Hdmi IP like in Exynos4412, while Exynos4210 has 1.3 compliant HDMI block. I have done a mistake here. I should have kept it in 4412.dtsi. OR I can move it to 4x12.dtsi but not sure whether all 4x12 socs have 1.4 hdmi. > >> + reg =<0x12D0 0x7>; >> + interrupts =<0 95 0>; >> + hpd-gpio =<&gpx3 7 0xf 1 3>; >> + }; > > > New bindings need to be documented in Documentation/devicetree/bindings/. > It is present at Documentation/devicetree/bindings/drm/exynos/hdmi.txt. Regards, Rahul Sharma. > -- > > Thanks, > Sylwester -- 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 5/5] ARM: EXYNOS: Enable backlight and PWM support for Exynos4 DT machines
Enables support for Backlight and PWM on Exynos4 DT machines Signed-off-by: Vikas Sajjan --- arch/arm/mach-exynos/Kconfig |2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index e103c29..8ecde22 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig @@ -416,6 +416,8 @@ config MACH_EXYNOS4_DT select PINCTRL select PINCTRL_EXYNOS4 select USE_OF + select SAMSUNG_DEV_BACKLIGHT + select SAMSUNG_DEV_PWM help Machine support for Samsung Exynos4 machine with device tree enabled. Select this if a fdt blob is available for the Exynos4 SoC based board. -- 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 4/5] ARM: dts: adds FIMD AUXDATA node entry for exynos4 DT
This patch adds the FIMD AUXDATA node Signed-off-by: Vikas Sajjan --- arch/arm/mach-exynos/mach-exynos4-dt.c |4 1 file changed, 4 insertions(+) diff --git a/arch/arm/mach-exynos/mach-exynos4-dt.c b/arch/arm/mach-exynos/mach-exynos4-dt.c index ab1dacc..6c9e05f 100644 --- a/arch/arm/mach-exynos/mach-exynos4-dt.c +++ b/arch/arm/mach-exynos/mach-exynos4-dt.c @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -80,6 +81,9 @@ static const struct of_dev_auxdata exynos4_auxdata_lookup[] __initconst = { OF_DEV_AUXDATA("arm,pl330", EXYNOS4_PA_MDMA1, "dma-pl330.2", NULL), OF_DEV_AUXDATA("samsung,exynos4210-tmu", EXYNOS4_PA_TMU, "exynos-tmu", NULL), + OF_DEV_AUXDATA("samsung,exynos4-fimd", EXYNOS4_PA_FIMD0, + "exynos4-fb.0", NULL), + {}, }; -- 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 3/5] ARM: dts: Add FIMD node and display timing node to exynos4412-origen.dts
Adds FIMD DT support to Origen quad board Signed-off-by: Vikas Sajjan --- arch/arm/boot/dts/exynos4412-origen.dts | 21 + 1 file changed, 21 insertions(+) diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index 4eba374..30655d5 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts @@ -44,6 +44,27 @@ status = "okay"; }; + fimd@11c0 { + samsung,power-domain = <&pd_lcd0>; + pinctrl-0 = <&lcd_sync &lcd_clk &lcd_en &lcd0_data &pwm1_out>; + pinctrl-names = "default"; + }; + + display-timings { +native-mode = <&timing0>; +timing0: timing@0 { + clock-frequency = <5>; + hactive = <1024>; + vactive = <600>; + hfront-porch = <64>; + hback-porch = <16>; + hsync-len = <48>; + vback-porch = <64>; + vfront-porch = <16>; + vsync-len = <3>; +}; +}; + serial@1380 { status = "okay"; }; -- 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/5] ARM: dts: Adds lcd pinctrl node entries for SAMSUNG EXYNOS4412 SoC
This patch adds the lcd lanel related picntrl nodes for Exynos4412 SoC Signed-off-by: Sachin Kamat Signed-off-by: Vikas Sajjan --- arch/arm/boot/dts/exynos4x12-pinctrl.dtsi | 26 ++ 1 file changed, 26 insertions(+) diff --git a/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi b/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi index 8e6115a..33a549c 100644 --- a/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi +++ b/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi @@ -354,6 +354,32 @@ samsung,pin-drv = <0>; }; + lcd_sync: lcd-sync { + samsung,pins = "gpf0-0", "gpf0-1"; + samsung,pin-function = <2>; + samsung,pin-pud = <0>; + samsung,pin-drv = <0>; + }; + + lcd0_data: lcd0-data { + samsung,pins = "gpf0-4", "gpf0-5", "gpf0-6", "gpf0-7", + "gpf1-0", "gpf1-1", "gpf1-2", "gpf1-3", + "gpf1-4", "gpf1-5", "gpf1-6", "gpf1-7", + "gpf2-0", "gpf2-1", "gpf2-2", "gpf2-3", + "gpf2-4", "gpf2-5", "gpf2-6", "gpf2-7", + "gpf3-0", "gpf3-1", "gpf3-2", "gpf3-3"; + samsung,pin-function = <2>; + samsung,pin-pud = <0>; + samsung,pin-drv = <0>; + }; + + lcd_en: lcd-en { + samsung,pins = "gpf0-3"; + samsung,pin-function = <2>; + samsung,pin-pud = <0>; + samsung,pin-drv = <0>; + }; + lcd_clk: lcd-clk { samsung,pins = "gpf0-0", "gpf0-1", "gpf0-2", "gpf0-3"; samsung,pin-function = <2>; -- 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 1/5] ARM: dts: Add FIMD node to exynos4
This adds common FIMD device node for all Exynos4 SoCs. Signed-off-by: Vikas Sajjan --- arch/arm/boot/dts/exynos4.dtsi |7 +++ 1 file changed, 7 insertions(+) diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi index e1347fc..96c3b4a 100644 --- a/arch/arm/boot/dts/exynos4.dtsi +++ b/arch/arm/boot/dts/exynos4.dtsi @@ -289,4 +289,11 @@ interrupts = <0 34 0>; }; }; + + fimd@11c0 { + compatible = "samsung,exynos4-fimd"; + interrupt-parent = <&combiner>; + reg = <0x11c0 0x2>; + interrupts = <11 1>, <11 0>, <11 2>; + }; }; -- 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 0/5] Add DRM FIMD DT support for Exynos4 DT Machines
This patch series adds support for DRM FIMD DT for Exynos4 DT Machines, specifically for Exynos4412 SoC. Is based on branch "for-next" http://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung.git Vikas Sajjan (5): ARM: dts: Add FIMD node to exynos4 ARM: dts: Adds lcd pinctrl node entries for SAMSUNG EXYNOS4412 SoC ARM: dts: Add FIMD node and display timing node to exynos4412-origen.dts ARM: dts: adds FIMD AUXDATA node entry for exynos4 DT ARM: EXYNOS: Enable backlight and PWM support for Exynos4 DT machines arch/arm/boot/dts/exynos4.dtsi|7 +++ arch/arm/boot/dts/exynos4412-origen.dts | 21 + arch/arm/boot/dts/exynos4x12-pinctrl.dtsi | 26 ++ arch/arm/mach-exynos/Kconfig |2 ++ arch/arm/mach-exynos/mach-exynos4-dt.c|4 5 files changed, 60 insertions(+) -- 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] drivers: cpufreq: exynos: update related_cpus mask to fix hotplug dump
On Thu, Jan 24, 2013 at 9:40 AM, Inderpal Singh wrote: > commit "7e6087e595d3...cpufreq: Simplify cpufreq_add_dev()" started using > related_cpus mask to check if the current cpu is already managed. > > With above commit hotplug in exynos gives following dump. > > / $ echo 1 > /sys/devices/system/cpu/cpu1/online > CPU1: Booted secondary processor > [ cut here ] > WARNING: at fs/sysfs/dir.c:536 sysfs_add_one+0x88/0xbc() > sysfs: cannot create duplicate filename '/devices/system/cpu/cpu0/cpufreq' > Modules linked in: > [] (unwind_backtrace+0x0/0xf8) from [] > (warn_slowpath_common+0x4c/0x64) > [] (warn_slowpath_common+0x4c/0x64) from [] > (warn_slowpath_fmt+0x30/0x40) > [] (warn_slowpath_fmt+0x30/0x40) from [] > (sysfs_add_one+0x88/0xbc) > [] (sysfs_add_one+0x88/0xbc) from [] > (sysfs_do_create_link+0x110/0x208) > [] (sysfs_do_create_link+0x110/0x208) from [] > (cpufreq_add_dev_interface+0x218/0x2b0) > [] (cpufreq_add_dev_interface+0x218/0x2b0) from [] > (cpufreq_add_dev+0x30c/0x448) > [] (cpufreq_add_dev+0x30c/0x448) from [] > (cpufreq_cpu_callback+0x94/0x9c) > [] (cpufreq_cpu_callback+0x94/0x9c) from [] > (notifier_call_chain+0x44/0x84) > [] (notifier_call_chain+0x44/0x84) from [] > (__cpu_notify+0x28/0x44) > [] (__cpu_notify+0x28/0x44) from [] (_cpu_up+0x104/0x154) > [] (_cpu_up+0x104/0x154) from [] (cpu_up+0x64/0x84) > [] (cpu_up+0x64/0x84) from [] (store_online+0x50/0x78) > [] (store_online+0x50/0x78) from [] > (dev_attr_store+0x18/0x24) > [] (dev_attr_store+0x18/0x24) from [] > (sysfs_write_file+0x168/0x198) > [] (sysfs_write_file+0x168/0x198) from [] > (vfs_write+0x9c/0x140) > [] (vfs_write+0x9c/0x140) from [] (sys_write+0x3c/0x70) > [] (sys_write+0x3c/0x70) from [] > (ret_fast_syscall+0x0/0x30) > ---[ end trace 3d002b0ded69f43b ]--- > > This patch fixes it by updating the related_cpus mask. > > Tested on Rafael's linux-next. > > Signed-off-by: Inderpal Singh > --- > drivers/cpufreq/exynos-cpufreq.c |1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/cpufreq/exynos-cpufreq.c > b/drivers/cpufreq/exynos-cpufreq.c > index 7012ea8..8ba4cdb 100644 > --- a/drivers/cpufreq/exynos-cpufreq.c > +++ b/drivers/cpufreq/exynos-cpufreq.c > @@ -238,6 +238,7 @@ static int exynos_cpufreq_cpu_init(struct cpufreq_policy > *policy) > cpumask_copy(policy->cpus, cpu_online_mask); > } else { > policy->shared_type = CPUFREQ_SHARED_TYPE_ANY; > + cpumask_setall(policy->related_cpus); > cpumask_setall(policy->cpus); This is required for all SMP systems. Acked-by: Viresh 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 1/2] thermal: sysfs: Add a new sysfs node emul_temp for thermal emulation
This patch adds support to set the emulated temperature method in thermal zone (sensor). After setting this feature thermal zone may report this temperature and not the actual temperature. The emulation implementation may be based on sensor capability through platform specific handler or pure software emulation if no platform handler defined. This is useful in debugging different temperature threshold and its associated cooling action. Critical threshold's cannot be emulated. Writing 0 on this node should disable emulation. Signed-off-by: Amit Daniel Kachhap Acked-by: Kukjin Kim --- Changes in V2: * Added config option for enabling emulation support. * Added s/w emulation if no platform handler registered. * skip the critical trip point emulation This patchset is based on thermal maintainer next tree. git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git next Documentation/thermal/sysfs-api.txt | 13 ++ drivers/thermal/Kconfig |8 +++ drivers/thermal/thermal_sys.c | 82 ++- include/linux/thermal.h |2 + 4 files changed, 94 insertions(+), 11 deletions(-) diff --git a/Documentation/thermal/sysfs-api.txt b/Documentation/thermal/sysfs-api.txt index 526d4b9..6859661 100644 --- a/Documentation/thermal/sysfs-api.txt +++ b/Documentation/thermal/sysfs-api.txt @@ -55,6 +55,8 @@ temperature) and throttle appropriate devices. .get_trip_type: get the type of certain trip point. .get_trip_temp: get the temperature above which the certain trip point will be fired. + .set_emul_temp: set the emulation temperature which helps in debugging + different threshold temperature points. 1.1.2 void thermal_zone_device_unregister(struct thermal_zone_device *tz) @@ -153,6 +155,7 @@ Thermal zone device sys I/F, created once it's registered: |---trip_point_[0-*]_temp: Trip point temperature |---trip_point_[0-*]_type: Trip point type |---trip_point_[0-*]_hyst: Hysteresis value for this trip point +|---emul_temp: Emulated temperature set node Thermal cooling device sys I/F, created once it's registered: /sys/class/thermal/cooling_device[0-*]: @@ -252,6 +255,16 @@ passive Valid values: 0 (disabled) or greater than 1000 RW, Optional +emul_temp + Interface to set the emulated temperature method in thermal zone + (sensor). After setting this temperature, the thermal zone may pass + this temperature to platform emulation function if registered or + cache it locally. This is useful in debugging different temperature + threshold and its associated cooling action. This is write only node + and writing 0 on this node should disable emulation. + Unit: millidegree Celsius + WO, Optional + * * Cooling device attributes * * diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig index faf38c5..e4cf7fb 100644 --- a/drivers/thermal/Kconfig +++ b/drivers/thermal/Kconfig @@ -78,6 +78,14 @@ config CPU_THERMAL and not the ACPI interface. If you want this support, you should say Y here. +config THERMAL_EMULATION + bool "Thermal emulation mode support" + help + Enable this option to make a emul_temp sysfs node in thermal zone + directory to support temperature emulation. With emulation sysfs node, + user can manually input temperature and test the different trip + threshold behaviour for simulation purpose. + config SPEAR_THERMAL bool "SPEAr thermal sensor driver" depends on PLAT_SPEAR diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c index 0a1bf6b..59ba709 100644 --- a/drivers/thermal/thermal_sys.c +++ b/drivers/thermal/thermal_sys.c @@ -378,24 +378,57 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip) monitor_thermal_zone(tz); } +static int thermal_zone_get_temp(struct thermal_zone_device *tz, + unsigned long *temp) +{ + int ret = 0, count; + unsigned long crit_temp = -1UL; + enum thermal_trip_type type; + + mutex_lock(&tz->lock); + + if (tz->ops->get_temp) + ret = tz->ops->get_temp(tz, temp); + else + ret = -EPERM; + + if (!tz->emul_temperature) + goto skip_emul; + + for (count = 0; count < tz->trips; count++) { + ret = tz->ops->get_trip_type(tz, count, &type); + if (!ret && type == THERMAL_TRIP_CRITICAL) { + ret = tz->ops->get_trip_temp(tz, count, &crit_temp); + break; + } + } + + if (ret) + goto skip_emul; + + if (*temp < crit_temp) + *temp = tz->emul_temperature; + +skip_emul: + mutex_unlock(&tz->lock); + return ret; +
Re: [PATCH 1/2] thermal: sysfs: Add a new sysfs node emul_temp
On Mon, Jan 21, 2013 at 7:20 PM, Zhang Rui wrote: > On Wed, 2013-01-16 at 11:30 -0800, amit kachhap wrote: >> Hi Rui, >> >> Thanks for the review comments, >> On Tue, Jan 15, 2013 at 11:33 PM, Zhang Rui wrote: >> > Hi, Amit, >> > >> > On Sun, 2013-01-06 at 16:08 -0800, Amit Daniel Kachhap wrote: >> >> This patch adds support to set the emulated temperature method in >> >> thermal zone (sensor). After setting this feature thermal zone must >> >> report this temperature and not the actual temperature. The actual >> >> implementation of this emulated temperature is based on sensor >> >> capability or platform specific. This is useful in debugging different >> >> temperature threshold and its associated cooling action. Writing 0 on >> >> this node should disable emulation. >> > >> > Question: >> > will this bring hardware issue? Say, critical temperature reached while >> > in emulation mode? >> No emulation does cause any h/w issue. >> > >> > As this is for debug purpose, I'd prefer to have a seperate Kconfig >> > option for this feature. >> Yes agreed. Will re-submit with kconfig option. >> > >> >> Signed-off-by: Amit Daniel Kachhap >> >> --- >> >> Documentation/thermal/sysfs-api.txt | 14 ++ >> >> drivers/thermal/thermal_sys.c | 26 ++ >> >> include/linux/thermal.h |1 + >> >> 3 files changed, 41 insertions(+), 0 deletions(-) >> >> >> >> diff --git a/Documentation/thermal/sysfs-api.txt >> >> b/Documentation/thermal/sysfs-api.txt >> >> index 88c0233..e8f2ee4 100644 >> >> --- a/Documentation/thermal/sysfs-api.txt >> >> +++ b/Documentation/thermal/sysfs-api.txt >> >> @@ -55,6 +55,8 @@ temperature) and throttle appropriate devices. >> >> .get_trip_type: get the type of certain trip point. >> >> .get_trip_temp: get the temperature above which the certain trip >> >> point >> >> will be fired. >> >> + .set_emul_temp: set the emulation temperature which helps in >> >> debugging >> >> + different threshold temperature points. >> >> >> >> 1.1.2 void thermal_zone_device_unregister(struct thermal_zone_device *tz) >> >> >> >> @@ -153,6 +155,7 @@ Thermal zone device sys I/F, created once it's >> >> registered: >> >> |---trip_point_[0-*]_temp: Trip point temperature >> >> |---trip_point_[0-*]_type: Trip point type >> >> |---trip_point_[0-*]_hyst: Hysteresis value for this trip point >> >> +|---emul_temp: Emulated temperature set node >> >> >> >> Thermal cooling device sys I/F, created once it's registered: >> >> /sys/class/thermal/cooling_device[0-*]: >> >> @@ -252,6 +255,17 @@ passive >> >> Valid values: 0 (disabled) or greater than 1000 >> >> RW, Optional >> >> >> >> +emul_temp >> >> + Interface to set the emulated temperature method in thermal zone >> >> + (sensor). After setting this feature thermal zone must report >> >> + this temperature and not the actual temperature. The actual >> >> + implementation of this emulated temperature is platform specific. >> > >> > can we have a pure software temperature emulation method? >> > say, the generic thermal layer caches the emulated temperature value, >> > and hook it in update_temperature()? >> > This is also useful for testing in polling mode, and it does not require >> > platform specific callback support. I mean thermal_ops->set_emul_temp is >> > optional, but thermal emulation is always available for all platforms. >> Yes It makes sense and we can have pure software emulation and use the >> cached temperature when no platform call is registered. In my case I >> needed this in h/w so to have the same sensor trigger interrupts >> behaviour. >> >> So the code flow can be like this, >> >> #ifdef CONFIG_THERMAL_EMULATION >> if (thermal_ops->set_emul_temp) >> then pass emul_temp to platform and use the normal platform >> thermal_ops->get_temp >> else >> Store it locally and use emul_temp instead of calling platform >> thermal_ops->get_temp >> #endif >> > No. > We should not support emulation is CONFIG_THERMAL_EMULATION is cleared. > And further more, for pure software emulation, we should check if the > real temperature reaches critical trip point. Yes agreed. Submitted the V2 version with your suggestion. Thanks, Amit Daniel > > thanks, > rui >> I will re-submit with this change. >> >> Thanks, >> Amit >> > >> > thanks, >> > rui >> >> + This is useful in debugging different temperature threshold and its >> >> + associated cooling action. Writing 0 on this node should disable >> >> + emulation. >> >> + Unit: millidegree Celsius >> >> + WO, Optional >> >> + >> >> * >> >> * Cooling device attributes * >> >> * >> >> diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c >> >> index 8c8ce80..ecdfc7d 100644 >> >> --- a/drivers/thermal/thermal_sys.c >> >> +++ b/drivers/thermal/the
[PATCH V2 2/2] thermal: exynos: Use the framework for temperature emulation support
This removes the driver specific sysfs support of the temperature emulation and uses the newly added core thermal framework for thermal emulation. A platform specific handler is added to support this. Signed-off-by: Amit Daniel Kachhap Acked-by: Kukjin Kim --- Changes in V2: * Added config option CONFIG_THERMAL_EMULATION instead of CONFIG_EXYNOS_THERMAL_EMUL This patchset is based on thermal maintainer next tree. git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git next Documentation/thermal/exynos_thermal_emulation |8 +- drivers/thermal/Kconfig|9 -- drivers/thermal/exynos_thermal.c | 158 ++-- 3 files changed, 67 insertions(+), 108 deletions(-) diff --git a/Documentation/thermal/exynos_thermal_emulation b/Documentation/thermal/exynos_thermal_emulation index b73bbfb..36a3e79 100644 --- a/Documentation/thermal/exynos_thermal_emulation +++ b/Documentation/thermal/exynos_thermal_emulation @@ -13,11 +13,11 @@ Thermal emulation mode supports software debug for TMU's operation. User can set manually with software code and TMU will read current temperature from user value not from sensor's value. -Enabling CONFIG_EXYNOS_THERMAL_EMUL option will make this support in available. -When it's enabled, sysfs node will be created under -/sys/bus/platform/devices/'exynos device name'/ with name of 'emulation'. +Enabling CONFIG_THERMAL_EMULATION option will make this support available. +When it's enabled, sysfs node will be created as +/sys/devices/virtual/thermal/thermal_zone'zone id'/emul_temp. -The sysfs node, 'emulation', will contain value 0 for the initial state. When you input any +The sysfs node, 'emul_node', will contain value 0 for the initial state. When you input any temperature you want to update to sysfs node, it automatically enable emulation mode and current temperature will be changed into it. (Exynos also supports user changable delay time which would be used to delay of diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig index e4cf7fb..2a79510 100644 --- a/drivers/thermal/Kconfig +++ b/drivers/thermal/Kconfig @@ -109,15 +109,6 @@ config EXYNOS_THERMAL If you say yes here you get support for TMU (Thermal Management Unit) on SAMSUNG EXYNOS series of SoC. -config EXYNOS_THERMAL_EMUL - bool "EXYNOS TMU emulation mode support" - depends on EXYNOS_THERMAL - help - Exynos 4412 and 4414 and 5 series has emulation mode on TMU. - Enable this option will be make sysfs node in exynos thermal platform - device directory to support emulation mode. With emulation mode sysfs - node, you can manually input temperature to TMU for simulation purpose. - config DB8500_THERMAL bool "DB8500 thermal management" depends on ARCH_U8500 diff --git a/drivers/thermal/exynos_thermal.c b/drivers/thermal/exynos_thermal.c index 327102a..afe9c2a 100644 --- a/drivers/thermal/exynos_thermal.c +++ b/drivers/thermal/exynos_thermal.c @@ -99,13 +99,13 @@ #define IDLE_INTERVAL 1 #define MCELSIUS 1000 -#ifdef CONFIG_EXYNOS_THERMAL_EMUL +#ifdef CONFIG_THERMAL_EMULATION #define EXYNOS_EMUL_TIME 0x57F0 #define EXYNOS_EMUL_TIME_SHIFT 16 #define EXYNOS_EMUL_DATA_SHIFT 8 #define EXYNOS_EMUL_DATA_MASK 0xFF #define EXYNOS_EMUL_ENABLE 0x1 -#endif /* CONFIG_EXYNOS_THERMAL_EMUL */ +#endif /* CONFIG_THERMAL_EMULATION */ /* CPU Zone information */ #define PANIC_ZONE 4 @@ -143,6 +143,7 @@ struct thermal_cooling_conf { struct thermal_sensor_conf { char name[SENSOR_NAME_LEN]; int (*read_temperature)(void *data); + int (*write_emul_temp)(void *data, unsigned long temp); struct thermal_trip_point_conf trip_data; struct thermal_cooling_conf cooling_data; void *private_data; @@ -366,6 +367,23 @@ static int exynos_get_temp(struct thermal_zone_device *thermal, return 0; } +/* Get temperature callback functions for thermal zone */ +static int exynos_set_emul_temp(struct thermal_zone_device *thermal, + unsigned long temp) +{ + void *data; + int ret = -EINVAL; + + if (!th_zone->sensor_conf) { + pr_info("Temperature sensor not initialised\n"); + return -EINVAL; + } + data = th_zone->sensor_conf->private_data; + if (th_zone->sensor_conf->write_emul_temp) + ret = th_zone->sensor_conf->write_emul_temp(data, temp); + return ret; +} + /* Get the temperature trend */ static int exynos_get_trend(struct thermal_zone_device *thermal, int trip, enum thermal_trend *trend) @@ -382,6 +400,7 @@ static struct thermal_zone_device_ops const exynos_dev_ops = { .bind = exynos_bind, .unbind = exynos_unbind, .get_temp = exynos_get_temp, + .set_emul_temp = exynos_set_emul_temp, .get_trend = exynos_ge
[PATCH v4 0/9] ARM: S3C24XX: rework irq handling for a later dt usage
This v4 does not change any code part. The patches are merely rebased to apply to the next/cleanup-s3c24xx branch as requested. Heiko Stuebner (9): ARM: S3C24XX: transform irq handling into a declarative form ARM: S3C24XX: Move irq syscore-ops to irq-pm ARM: S3C24XX: Modify s3c_irq_wake to use the hwirq property ARM: S3C24XX: move s3c2416 irq init to common irq code ARM: S3C24XX: modify s3c2416 irq init to initialize all irqs ARM: S3C24XX: transform s3c2416 irqs into new structure ARM: S3C24XX: move s3c2443 irq code to irq.c ARM: S3C24XX: modify s3c2443 irq init to initialize all irqs ARM: S3C24XX: transform s3c2443 subirqs into new structure arch/arm/mach-s3c24xx/Makefile |4 +- arch/arm/mach-s3c24xx/common.h |2 + arch/arm/mach-s3c24xx/irq-pm.c | 41 +- arch/arm/mach-s3c24xx/irq-s3c2416.c | 348 arch/arm/mach-s3c24xx/irq-s3c2443.c | 281 --- arch/arm/mach-s3c24xx/mach-smdk2416.c|2 +- arch/arm/mach-s3c24xx/mach-smdk2443.c|2 +- arch/arm/mach-s3c24xx/s3c2410.c |4 +- arch/arm/mach-s3c24xx/s3c2412.c |4 +- arch/arm/mach-s3c24xx/s3c2416.c |4 +- arch/arm/mach-s3c24xx/s3c2440.c |4 +- arch/arm/mach-s3c24xx/s3c2442.c |4 +- arch/arm/plat-s3c24xx/Kconfig|1 + arch/arm/plat-s3c24xx/irq.c | 1110 +++--- arch/arm/plat-samsung/include/plat/pm.h |6 - arch/arm/plat-samsung/include/plat/s3c2416.h |1 + arch/arm/plat-samsung/include/plat/s3c2443.h |2 + 17 files changed, 688 insertions(+), 1132 deletions(-) delete mode 100644 arch/arm/mach-s3c24xx/irq-s3c2416.c delete mode 100644 arch/arm/mach-s3c24xx/irq-s3c2443.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
Re: [PATCH 2/4] ARM: dts: add support for mixer to exynos4
On 01/25/2013 11:39 AM, Rahul Sharma wrote: diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi index 6c2c79d..07cb7d4 100644 --- a/arch/arm/boot/dts/exynos4.dtsi +++ b/arch/arm/boot/dts/exynos4.dtsi @@ -296,4 +296,12 @@ interrupts =<0 95 0>; hpd-gpio =<&gpx3 7 0xf 1 3>; }; + + mixer: mixer { + compatible = "samsung,exynos4-mixer"; I'm afraid this compatible property it too generic. Is the video mixer IP really identical an all the Exynos4 series SoCs ? + reg = <0x12c1 0x1>, + <0x12c0 0x1>; + interrupts =<0 91 0>; + samsung,power-domain =<&pd_tv>; + }; }; Is there documentation for these new bindings available somewhere ? -- Thanks, Sylwester -- 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/4] ARM: dts: add support for hdmi to exynos4
On 01/25/2013 11:39 AM, Rahul Sharma wrote: Signed-off-by: Rahul Sharma Please provide proper commit text. Conflicts: arch/arm/mach-exynos/mach-exynos4-dt.c And make sure things like this are removed when submitting patches. --- arch/arm/boot/dts/exynos4.dtsi | 7 +++ arch/arm/mach-exynos/mach-exynos4-dt.c | 2 ++ 2 files changed, 9 insertions(+) diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi index e1347fc..6c2c79d 100644 --- a/arch/arm/boot/dts/exynos4.dtsi +++ b/arch/arm/boot/dts/exynos4.dtsi @@ -289,4 +289,11 @@ interrupts =<0 34 0>; }; }; + + hdmi { + compatible = "samsung,exynos4-hdmi14"; What "-hdmi14" signifies here ? And to which Exynos4 SoC revisions this compatible property is supposed to apply ? + reg =<0x12D0 0x7>; + interrupts =<0 95 0>; + hpd-gpio =<&gpx3 7 0xf 1 3>; + }; New bindings need to be documented in Documentation/devicetree/bindings/. -- Thanks, Sylwester -- 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 v4 9/9] ARM: S3C24XX: transform s3c2443 subirqs into new structure
Share the common irq code by simply defining a correct mapping declaration for the s3c2443. Signed-off-by: Heiko Stuebner --- arch/arm/plat-s3c24xx/irq.c | 289 +++ 1 file changed, 75 insertions(+), 214 deletions(-) diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c index 4cf3c13..969426b 100644 --- a/arch/arm/plat-s3c24xx/irq.c +++ b/arch/arm/plat-s3c24xx/irq.c @@ -732,230 +732,91 @@ void __init s3c2416_init_irq(void) #endif #ifdef CONFIG_CPU_S3C2443 -#define INTMSK(start, end) ((1 << ((end) + 1 - (start))) - 1) - -static inline void s3c2443_irq_demux(unsigned int irq, unsigned int len) -{ - unsigned int subsrc, submsk; - unsigned int end; - - /* read the current pending interrupts, and the mask -* for what it is available */ - - subsrc = __raw_readl(S3C2410_SUBSRCPND); - submsk = __raw_readl(S3C2410_INTSUBMSK); - - subsrc &= ~submsk; - subsrc >>= (irq - S3C2410_IRQSUB(0)); - subsrc &= (1 << len)-1; - - end = len + irq; - - for (; irq < end && subsrc; irq++) { - if (subsrc & 1) - generic_handle_irq(irq); - - subsrc >>= 1; - } -} - -/* WDT/AC97 sub interrupts */ - -static void s3c2443_irq_demux_wdtac97(unsigned int irq, struct irq_desc *desc) -{ - s3c2443_irq_demux(IRQ_S3C2443_WDT, 4); -} - -#define INTMSK_WDTAC97 (1UL << (IRQ_WDT - IRQ_EINT0)) -#define SUBMSK_WDTAC97 INTMSK(IRQ_S3C2443_WDT, IRQ_S3C2443_AC97) - -static void s3c2443_irq_wdtac97_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); -} - -static void s3c2443_irq_wdtac97_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_WDTAC97); -} - -static void s3c2443_irq_wdtac97_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); -} - -static struct irq_chip s3c2443_irq_wdtac97 = { - .irq_mask = s3c2443_irq_wdtac97_mask, - .irq_unmask = s3c2443_irq_wdtac97_unmask, - .irq_ack= s3c2443_irq_wdtac97_ack, -}; - -/* LCD sub interrupts */ - -static void s3c2443_irq_demux_lcd(unsigned int irq, struct irq_desc *desc) -{ - s3c2443_irq_demux(IRQ_S3C2443_LCD1, 4); -} - -#define INTMSK_LCD (1UL << (IRQ_LCD - IRQ_EINT0)) -#define SUBMSK_LCD INTMSK(IRQ_S3C2443_LCD1, IRQ_S3C2443_LCD4) - -static void s3c2443_irq_lcd_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_LCD, SUBMSK_LCD); -} - -static void s3c2443_irq_lcd_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_LCD); -} - -static void s3c2443_irq_lcd_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_LCD, SUBMSK_LCD); -} - -static struct irq_chip s3c2443_irq_lcd = { - .irq_mask = s3c2443_irq_lcd_mask, - .irq_unmask = s3c2443_irq_lcd_unmask, - .irq_ack= s3c2443_irq_lcd_ack, -}; - -/* DMA sub interrupts */ - -static void s3c2443_irq_demux_dma(unsigned int irq, struct irq_desc *desc) -{ - s3c2443_irq_demux(IRQ_S3C2443_DMA0, 6); -} - -#define INTMSK_DMA (1UL << (IRQ_S3C2443_DMA - IRQ_EINT0)) -#define SUBMSK_DMA INTMSK(IRQ_S3C2443_DMA0, IRQ_S3C2443_DMA5) - -static void s3c2443_irq_dma_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_DMA, SUBMSK_DMA); -} - -static void s3c2443_irq_dma_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_DMA); -} - -static void s3c2443_irq_dma_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_DMA, SUBMSK_DMA); -} - -static struct irq_chip s3c2443_irq_dma = { - .irq_mask = s3c2443_irq_dma_mask, - .irq_unmask = s3c2443_irq_dma_unmask, - .irq_ack= s3c2443_irq_dma_ack, -}; - -/* UART3 sub interrupts */ - -static void s3c2443_irq_demux_uart3(unsigned int irq, struct irq_desc *desc) -{ - s3c2443_irq_demux(IRQ_S3C2443_RX3, 3); -} - -#define INTMSK_UART3 (1UL << (IRQ_S3C2443_UART3 - IRQ_EINT0)) -#define SUBMSK_UART3 (0x7 << (IRQ_S3C2443_RX3 - S3C2410_IRQSUB(0))) - -static void s3c2443_irq_uart3_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_UART3, SUBMSK_UART3); -} - -static void s3c2443_irq_uart3_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_UART3); -} - -static void s3c2443_irq_uart3_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_UART3, SUBMSK_UART3); -} - -static struct irq_chip s3c2443_irq_uart3 = { - .irq_mask = s3c2443_irq_uart3_mask, - .irq_unmask = s3c2443_irq_uart3_unmask, - .irq_ack= s3c2443_irq_uart3_ack, +static struct s3c_irq_data init_s3c2443base[32] = { + { .type = S3C_IRQTYPE_EINT, }, /* EINT0 */ + { .type = S3C_IRQTYPE_EINT, }, /* EINT1 */ + { .type = S3C_IRQTYPE_EINT, }, /* EINT2 */ + { .type = S3C_IRQTYPE_EINT, }, /* EINT3 */ + {
[PATCH v4 8/9] ARM: S3C24XX: modify s3c2443 irq init to initialize all irqs
Previously the irq init used s3c24xx_init_irq and an additional arch_initcall to add the cpu specific irqs. To be able to simplyfy the irq init later, create a new function s3c2443_init_irq, which then calls s3c24xx_init_irq but also adds the cpu specific irqs. Signed-off-by: Heiko Stuebner --- arch/arm/mach-s3c24xx/mach-smdk2443.c|2 +- arch/arm/plat-s3c24xx/irq.c | 22 -- arch/arm/plat-samsung/include/plat/s3c2443.h |2 ++ 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/arch/arm/mach-s3c24xx/mach-smdk2443.c b/arch/arm/mach-s3c24xx/mach-smdk2443.c index c6d1a03..8b65a54 100644 --- a/arch/arm/mach-s3c24xx/mach-smdk2443.c +++ b/arch/arm/mach-s3c24xx/mach-smdk2443.c @@ -140,7 +140,7 @@ MACHINE_START(SMDK2443, "SMDK2443") /* Maintainer: Ben Dooks */ .atag_offset= 0x100, - .init_irq = s3c24xx_init_irq, + .init_irq = s3c2443_init_irq, .map_io = smdk2443_map_io, .init_machine = smdk2443_machine_init, .timer = &s3c24xx_timer, diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c index 0a051eb..4cf3c13 100644 --- a/arch/arm/plat-s3c24xx/irq.c +++ b/arch/arm/plat-s3c24xx/irq.c @@ -935,10 +935,11 @@ static int s3c2443_add_sub(unsigned int base, return 0; } -static int s3c2443_irq_add(struct device *dev, - struct subsys_interface *sif) +void __init s3c2443_init_irq(void) { - printk("S3C2443: IRQ Support\n"); + pr_info("S3C2443: IRQ Support\n"); + + s3c24xx_init_irq(); s3c2443_add_sub(IRQ_CAM, s3c2443_irq_demux_cam, &s3c2443_irq_cam, IRQ_S3C2440_CAM_C, IRQ_S3C2440_CAM_P); @@ -956,20 +957,5 @@ static int s3c2443_irq_add(struct device *dev, s3c2443_add_sub(IRQ_WDT, s3c2443_irq_demux_wdtac97, &s3c2443_irq_wdtac97, IRQ_S3C2443_WDT, IRQ_S3C2443_AC97); - - return 0; } - -static struct subsys_interface s3c2443_irq_interface = { - .name = "s3c2443_irq", - .subsys = &s3c2443_subsys, - .add_dev= s3c2443_irq_add, -}; - -static int __init s3c2443_irq_init(void) -{ - return subsys_interface_register(&s3c2443_irq_interface); -} - -arch_initcall(s3c2443_irq_init); #endif diff --git a/arch/arm/plat-samsung/include/plat/s3c2443.h b/arch/arm/plat-samsung/include/plat/s3c2443.h index a5b794f..71b88ec 100644 --- a/arch/arm/plat-samsung/include/plat/s3c2443.h +++ b/arch/arm/plat-samsung/include/plat/s3c2443.h @@ -25,6 +25,8 @@ extern void s3c2443_init_clocks(int xtal); extern int s3c2443_baseclk_add(void); extern void s3c2443_restart(char mode, const char *cmd); + +extern void s3c2443_init_irq(void); #else #define s3c2443_init_clocks NULL #define s3c2443_init_uarts NULL -- 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 v4 7/9] ARM: S3C24XX: move s3c2443 irq code to irq.c
Prequisite for further optimizations. Signed-off-by: Heiko Stuebner --- arch/arm/mach-s3c24xx/Makefile |2 +- arch/arm/mach-s3c24xx/irq-s3c2443.c | 281 --- arch/arm/plat-s3c24xx/irq.c | 243 ++ 3 files changed, 244 insertions(+), 282 deletions(-) delete mode 100644 arch/arm/mach-s3c24xx/irq-s3c2443.c diff --git a/arch/arm/mach-s3c24xx/Makefile b/arch/arm/mach-s3c24xx/Makefile index 68d134f..1d67582 100644 --- a/arch/arm/mach-s3c24xx/Makefile +++ b/arch/arm/mach-s3c24xx/Makefile @@ -39,7 +39,7 @@ 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 -obj-$(CONFIG_CPU_S3C2443) += s3c2443.o irq-s3c2443.o clock-s3c2443.o +obj-$(CONFIG_CPU_S3C2443) += s3c2443.o clock-s3c2443.o # PM diff --git a/arch/arm/mach-s3c24xx/irq-s3c2443.c b/arch/arm/mach-s3c24xx/irq-s3c2443.c deleted file mode 100644 index 5e69109..000 --- a/arch/arm/mach-s3c24xx/irq-s3c2443.c +++ /dev/null @@ -1,281 +0,0 @@ -/* linux/arch/arm/mach-s3c2443/irq.c - * - * Copyright (c) 2007 Simtec Electronics - * Ben Dooks - * - * 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 Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * 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 -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include - -#include -#include -#include - -#define INTMSK(start, end) ((1 << ((end) + 1 - (start))) - 1) - -static inline void s3c2443_irq_demux(unsigned int irq, unsigned int len) -{ - unsigned int subsrc, submsk; - unsigned int end; - - /* read the current pending interrupts, and the mask -* for what it is available */ - - subsrc = __raw_readl(S3C2410_SUBSRCPND); - submsk = __raw_readl(S3C2410_INTSUBMSK); - - subsrc &= ~submsk; - subsrc >>= (irq - S3C2410_IRQSUB(0)); - subsrc &= (1 << len)-1; - - end = len + irq; - - for (; irq < end && subsrc; irq++) { - if (subsrc & 1) - generic_handle_irq(irq); - - subsrc >>= 1; - } -} - -/* WDT/AC97 sub interrupts */ - -static void s3c2443_irq_demux_wdtac97(unsigned int irq, struct irq_desc *desc) -{ - s3c2443_irq_demux(IRQ_S3C2443_WDT, 4); -} - -#define INTMSK_WDTAC97 (1UL << (IRQ_WDT - IRQ_EINT0)) -#define SUBMSK_WDTAC97 INTMSK(IRQ_S3C2443_WDT, IRQ_S3C2443_AC97) - -static void s3c2443_irq_wdtac97_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); -} - -static void s3c2443_irq_wdtac97_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_WDTAC97); -} - -static void s3c2443_irq_wdtac97_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); -} - -static struct irq_chip s3c2443_irq_wdtac97 = { - .irq_mask = s3c2443_irq_wdtac97_mask, - .irq_unmask = s3c2443_irq_wdtac97_unmask, - .irq_ack= s3c2443_irq_wdtac97_ack, -}; - -/* LCD sub interrupts */ - -static void s3c2443_irq_demux_lcd(unsigned int irq, struct irq_desc *desc) -{ - s3c2443_irq_demux(IRQ_S3C2443_LCD1, 4); -} - -#define INTMSK_LCD (1UL << (IRQ_LCD - IRQ_EINT0)) -#define SUBMSK_LCD INTMSK(IRQ_S3C2443_LCD1, IRQ_S3C2443_LCD4) - -static void s3c2443_irq_lcd_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_LCD, SUBMSK_LCD); -} - -static void s3c2443_irq_lcd_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_LCD); -} - -static void s3c2443_irq_lcd_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_LCD, SUBMSK_LCD); -} - -static struct irq_chip s3c2443_irq_lcd = { - .irq_mask = s3c2443_irq_lcd_mask, - .irq_unmask = s3c2443_irq_lcd_unmask, - .irq_ack= s3c2443_irq_lcd_ack, -}; - -/* DMA sub interrupts */ - -static void s3c2443_irq_demux_dma(unsigned int irq, struct irq_desc *desc) -{ - s3c2443_irq_demux(IRQ_S3C2443_DMA0, 6); -} - -#define INTMSK_DMA (1UL << (IRQ_S3C2443_DMA - IRQ_EINT0)) -#define SUBMSK_DMA INTMSK(IRQ_S3C2443_DMA0, IRQ_S3C2443_DMA5) - -static void s3c2443_irq_dma_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_DMA, SUBMSK_DM
[PATCH v4 6/9] ARM: S3C24XX: transform s3c2416 irqs into new structure
Share the common irq code by simply defining a correct mapping declaration for the s3c2416. Signed-off-by: Heiko Stuebner --- arch/arm/plat-s3c24xx/irq.c | 342 +++ 1 file changed, 87 insertions(+), 255 deletions(-) diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c index 3763b91..c6d0d57 100644 --- a/arch/arm/plat-s3c24xx/irq.c +++ b/arch/arm/plat-s3c24xx/irq.c @@ -352,7 +352,8 @@ static int s3c24xx_irq_map(struct irq_domain *h, unsigned int virq, handle_edge_irq); break; case S3C_IRQTYPE_EDGE: - if (irq_data->parent_irq) + if (irq_data->parent_irq || + intc->reg_pending == S3C2416_SRCPND2) irq_set_chip_and_handler(virq, &s3c_irq_level_chip, handle_edge_irq); else @@ -628,273 +629,104 @@ void __init s3c24xx_init_irq(void) } #ifdef CONFIG_CPU_S3C2416 -#define INTMSK(start, end) ((1 << ((end) + 1 - (start))) - 1) - -static inline void s3c2416_irq_demux(unsigned int irq, unsigned int len) -{ - unsigned int subsrc, submsk; - unsigned int end; - - /* read the current pending interrupts, and the mask -* for what it is available */ - - subsrc = __raw_readl(S3C2410_SUBSRCPND); - submsk = __raw_readl(S3C2410_INTSUBMSK); - - subsrc &= ~submsk; - subsrc >>= (irq - S3C2410_IRQSUB(0)); - subsrc &= (1 << len)-1; - - end = len + irq; - - for (; irq < end && subsrc; irq++) { - if (subsrc & 1) - generic_handle_irq(irq); - - subsrc >>= 1; - } -} - -/* WDT/AC97 sub interrupts */ - -static void s3c2416_irq_demux_wdtac97(unsigned int irq, struct irq_desc *desc) -{ - s3c2416_irq_demux(IRQ_S3C2443_WDT, 4); -} - -#define INTMSK_WDTAC97 (1UL << (IRQ_WDT - IRQ_EINT0)) -#define SUBMSK_WDTAC97 INTMSK(IRQ_S3C2443_WDT, IRQ_S3C2443_AC97) - -static void s3c2416_irq_wdtac97_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); -} - -static void s3c2416_irq_wdtac97_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_WDTAC97); -} - -static void s3c2416_irq_wdtac97_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); -} - -static struct irq_chip s3c2416_irq_wdtac97 = { - .irq_mask = s3c2416_irq_wdtac97_mask, - .irq_unmask = s3c2416_irq_wdtac97_unmask, - .irq_ack= s3c2416_irq_wdtac97_ack, -}; - -/* LCD sub interrupts */ - -static void s3c2416_irq_demux_lcd(unsigned int irq, struct irq_desc *desc) -{ - s3c2416_irq_demux(IRQ_S3C2443_LCD1, 4); -} - -#define INTMSK_LCD (1UL << (IRQ_LCD - IRQ_EINT0)) -#define SUBMSK_LCD INTMSK(IRQ_S3C2443_LCD1, IRQ_S3C2443_LCD4) - -static void s3c2416_irq_lcd_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_LCD, SUBMSK_LCD); -} - -static void s3c2416_irq_lcd_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_LCD); -} - -static void s3c2416_irq_lcd_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_LCD, SUBMSK_LCD); -} - -static struct irq_chip s3c2416_irq_lcd = { - .irq_mask = s3c2416_irq_lcd_mask, - .irq_unmask = s3c2416_irq_lcd_unmask, - .irq_ack= s3c2416_irq_lcd_ack, -}; - -/* DMA sub interrupts */ - -static void s3c2416_irq_demux_dma(unsigned int irq, struct irq_desc *desc) -{ - s3c2416_irq_demux(IRQ_S3C2443_DMA0, 6); -} - -#define INTMSK_DMA (1UL << (IRQ_S3C2443_DMA - IRQ_EINT0)) -#define SUBMSK_DMA INTMSK(IRQ_S3C2443_DMA0, IRQ_S3C2443_DMA5) - - -static void s3c2416_irq_dma_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_DMA, SUBMSK_DMA); -} - -static void s3c2416_irq_dma_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_DMA); -} - -static void s3c2416_irq_dma_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_DMA, SUBMSK_DMA); -} - -static struct irq_chip s3c2416_irq_dma = { - .irq_mask = s3c2416_irq_dma_mask, - .irq_unmask = s3c2416_irq_dma_unmask, - .irq_ack= s3c2416_irq_dma_ack, +static struct s3c_irq_data init_s3c2416base[32] = { + { .type = S3C_IRQTYPE_EINT, }, /* EINT0 */ + { .type = S3C_IRQTYPE_EINT, }, /* EINT1 */ + { .type = S3C_IRQTYPE_EINT, }, /* EINT2 */ + { .type = S3C_IRQTYPE_EINT, }, /* EINT3 */ + { .type = S3C_IRQTYPE_LEVEL, }, /* EINT4to7 */ + { .type = S3C_IRQTYPE_LEVEL, }, /* EINT8to23 */ + { .type = S3C_IRQTYPE_NONE, }, /* reserved */ + { .type = S3C_IRQTYPE_EDGE, }, /* nBATT_FLT */ + { .type = S3C_IRQTYPE_EDGE, }, /* TICK */ + { .type = S3C_IRQTYPE_LEVEL, }, /* WDT/AC97 */ + { .type = S3C_IRQTYPE_EDGE, }, /* TIMER0 */ +
[PATCH v4 5/9] ARM: S3C24XX: modify s3c2416 irq init to initialize all irqs
Previously the irq init used s3c24xx_init_irq and an additional arch_initcall to add the cpu specific irqs. To be able to simplyfy the irq init later, create a new function s3c416_init_irq, which then calls s3c24xx_init_irq but also adds the cpu specific irqs. Signed-off-by: Heiko Stuebner --- arch/arm/mach-s3c24xx/mach-smdk2416.c|2 +- arch/arm/plat-s3c24xx/irq.c | 22 -- arch/arm/plat-samsung/include/plat/s3c2416.h |1 + 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/arch/arm/mach-s3c24xx/mach-smdk2416.c b/arch/arm/mach-s3c24xx/mach-smdk2416.c index 7de4120..2abb66f 100644 --- a/arch/arm/mach-s3c24xx/mach-smdk2416.c +++ b/arch/arm/mach-s3c24xx/mach-smdk2416.c @@ -250,7 +250,7 @@ MACHINE_START(SMDK2416, "SMDK2416") /* Maintainer: Yauhen Kharuzhy */ .atag_offset= 0x100, - .init_irq = s3c24xx_init_irq, + .init_irq = s3c2416_init_irq, .map_io = smdk2416_map_io, .init_machine = smdk2416_machine_init, .timer = &s3c24xx_timer, diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c index 131f747..3763b91 100644 --- a/arch/arm/plat-s3c24xx/irq.c +++ b/arch/arm/plat-s3c24xx/irq.c @@ -874,10 +874,11 @@ static void s3c2416_irq_add_second(void) } } -static int s3c2416_irq_add(struct device *dev, - struct subsys_interface *sif) +void __init s3c2416_init_irq(void) { - printk(KERN_INFO "S3C2416: IRQ Support\n"); + pr_info("S3C2416: IRQ Support\n"); + + s3c24xx_init_irq(); s3c2416_add_sub(IRQ_LCD, s3c2416_irq_demux_lcd, &s3c2416_irq_lcd, IRQ_S3C2443_LCD2, IRQ_S3C2443_LCD4); @@ -894,21 +895,6 @@ static int s3c2416_irq_add(struct device *dev, IRQ_S3C2443_WDT, IRQ_S3C2443_AC97); s3c2416_irq_add_second(); - - return 0; } -static struct subsys_interface s3c2416_irq_interface = { - .name = "s3c2416_irq", - .subsys = &s3c2416_subsys, - .add_dev= s3c2416_irq_add, -}; - -static int __init s3c2416_irq_init(void) -{ - return subsys_interface_register(&s3c2416_irq_interface); -} - -arch_initcall(s3c2416_irq_init); - #endif diff --git a/arch/arm/plat-samsung/include/plat/s3c2416.h b/arch/arm/plat-samsung/include/plat/s3c2416.h index 7178e33..f27399a 100644 --- a/arch/arm/plat-samsung/include/plat/s3c2416.h +++ b/arch/arm/plat-samsung/include/plat/s3c2416.h @@ -25,6 +25,7 @@ extern int s3c2416_baseclk_add(void); extern void s3c2416_restart(char mode, const char *cmd); +extern void s3c2416_init_irq(void); extern struct syscore_ops s3c2416_irq_syscore_ops; #else -- 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 0/4] 0/4] ARM: dts: add support for hdmi to exynos4412
Hi, On 01/25/2013 11:39 AM, Rahul Sharma wrote: This patch enables hdmi support for Samsung Exynos4412 soc based Origen Board. This set is base on "for next" branch at git.kernel.org/?p=linux/kernel/git/kgene/linux-samsung.git Rahul Sharma (4): ARM: dts: add support for hdmi to exynos4 ARM: dts: add support for mixer to exynos4 ARM: dts: add support for hdmi-ddc to exynos4412-origen ARM: dts: add support for hdmi-phy to exynos4412 arch/arm/boot/dts/exynos4.dtsi | 24 +++- arch/arm/boot/dts/exynos4412-origen.dts | 13 + arch/arm/boot/dts/exynos4412.dtsi | 11 +++ arch/arm/mach-exynos/mach-exynos4-dt.c | 6 ++ Is the device tree bindings documentation related to this patch series available somewhere else ? 4 files changed, 53 insertions(+), 1 deletion(-) mode change 100644 => 100755 arch/arm/boot/dts/exynos4.dtsi Please make sure you don't change the file permissions to random values. -- Thanks, Sylwester -- 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 v4 4/9] ARM: S3C24XX: move s3c2416 irq init to common irq code
This is needed to further clean up the irq init. Signed-off-by: Heiko Stuebner --- arch/arm/mach-s3c24xx/Makefile |2 +- arch/arm/mach-s3c24xx/irq-pm.c | 23 +++ arch/arm/mach-s3c24xx/irq-s3c2416.c | 348 --- arch/arm/plat-s3c24xx/irq.c | 286 4 files changed, 310 insertions(+), 349 deletions(-) delete mode 100644 arch/arm/mach-s3c24xx/irq-s3c2416.c diff --git a/arch/arm/mach-s3c24xx/Makefile b/arch/arm/mach-s3c24xx/Makefile index 08b87cd..68d134f 100644 --- a/arch/arm/mach-s3c24xx/Makefile +++ b/arch/arm/mach-s3c24xx/Makefile @@ -28,7 +28,7 @@ obj-$(CONFIG_S3C2412_DMA) += dma-s3c2412.o obj-$(CONFIG_S3C2412_PM) += pm-s3c2412.o obj-$(CONFIG_S3C2412_PM_SLEEP) += sleep-s3c2412.o -obj-$(CONFIG_CPU_S3C2416) += s3c2416.o irq-s3c2416.o clock-s3c2416.o +obj-$(CONFIG_CPU_S3C2416) += s3c2416.o clock-s3c2416.o obj-$(CONFIG_S3C2416_PM) += pm-s3c2416.o obj-$(CONFIG_CPU_S3C2440) += s3c2440.o irq-s3c2440.o clock-s3c2440.o diff --git a/arch/arm/mach-s3c24xx/irq-pm.c b/arch/arm/mach-s3c24xx/irq-pm.c index 640ec91..e119959 100644 --- a/arch/arm/mach-s3c24xx/irq-pm.c +++ b/arch/arm/mach-s3c24xx/irq-pm.c @@ -99,3 +99,26 @@ struct syscore_ops s3c24xx_irq_syscore_ops = { .suspend= s3c24xx_irq_suspend, .resume = s3c24xx_irq_resume, }; + +#ifdef CONFIG_CPU_S3C2416 +static struct sleep_save s3c2416_irq_save[] = { + SAVE_ITEM(S3C2416_INTMSK2), +}; + +static int s3c2416_irq_suspend(void) +{ + s3c_pm_do_save(s3c2416_irq_save, ARRAY_SIZE(s3c2416_irq_save)); + + return 0; +} + +static void s3c2416_irq_resume(void) +{ + s3c_pm_do_restore(s3c2416_irq_save, ARRAY_SIZE(s3c2416_irq_save)); +} + +struct syscore_ops s3c2416_irq_syscore_ops = { + .suspend= s3c2416_irq_suspend, + .resume = s3c2416_irq_resume, +}; +#endif diff --git a/arch/arm/mach-s3c24xx/irq-s3c2416.c b/arch/arm/mach-s3c24xx/irq-s3c2416.c deleted file mode 100644 index ff141b0..000 --- a/arch/arm/mach-s3c24xx/irq-s3c2416.c +++ /dev/null @@ -1,348 +0,0 @@ -/* linux/arch/arm/mach-s3c2416/irq.c - * - * Copyright (c) 2009 Yauhen Kharuzhy , - * as part of OpenInkpot project - * Copyright (c) 2009 Promwad Innovation Company - * Yauhen Kharuzhy - * - * 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 Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * 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 -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include - -#include -#include -#include - -#define INTMSK(start, end) ((1 << ((end) + 1 - (start))) - 1) - -static inline void s3c2416_irq_demux(unsigned int irq, unsigned int len) -{ - unsigned int subsrc, submsk; - unsigned int end; - - /* read the current pending interrupts, and the mask -* for what it is available */ - - subsrc = __raw_readl(S3C2410_SUBSRCPND); - submsk = __raw_readl(S3C2410_INTSUBMSK); - - subsrc &= ~submsk; - subsrc >>= (irq - S3C2410_IRQSUB(0)); - subsrc &= (1 << len)-1; - - end = len + irq; - - for (; irq < end && subsrc; irq++) { - if (subsrc & 1) - generic_handle_irq(irq); - - subsrc >>= 1; - } -} - -/* WDT/AC97 sub interrupts */ - -static void s3c2416_irq_demux_wdtac97(unsigned int irq, struct irq_desc *desc) -{ - s3c2416_irq_demux(IRQ_S3C2443_WDT, 4); -} - -#define INTMSK_WDTAC97 (1UL << (IRQ_WDT - IRQ_EINT0)) -#define SUBMSK_WDTAC97 INTMSK(IRQ_S3C2443_WDT, IRQ_S3C2443_AC97) - -static void s3c2416_irq_wdtac97_mask(struct irq_data *data) -{ - s3c_irqsub_mask(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); -} - -static void s3c2416_irq_wdtac97_unmask(struct irq_data *data) -{ - s3c_irqsub_unmask(data->irq, INTMSK_WDTAC97); -} - -static void s3c2416_irq_wdtac97_ack(struct irq_data *data) -{ - s3c_irqsub_maskack(data->irq, INTMSK_WDTAC97, SUBMSK_WDTAC97); -} - -static struct irq_chip s3c2416_irq_wdtac97 = { - .irq_mask = s3c2416_irq_wdtac97_mask, - .irq_unmask = s3c2416_irq_wdtac97_unmask, - .irq_ack= s3c2416_irq_wdtac97_ack, -}; - -/* LCD sub interrupts */ - -static void s3c2416_irq_demux_lcd(unsigned int irq, struct irq_desc *desc) -{ - s3c2416_irq_de
[PATCH v4 3/9] ARM: S3C24XX: Modify s3c_irq_wake to use the hwirq property
This gets rid of the use of static irq mappings there. Signed-off-by: Heiko Stuebner --- arch/arm/mach-s3c24xx/irq-pm.c |8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-s3c24xx/irq-pm.c b/arch/arm/mach-s3c24xx/irq-pm.c index d48126d..640ec91 100644 --- a/arch/arm/mach-s3c24xx/irq-pm.c +++ b/arch/arm/mach-s3c24xx/irq-pm.c @@ -30,18 +30,18 @@ * set bit to 1 in allow bitfield to enable the wakeup settings on it */ -unsigned long s3c_irqwake_intallow = 1L << (IRQ_RTC - IRQ_EINT0) | 0xfL; +unsigned long s3c_irqwake_intallow = 1L << 30 | 0xfL; unsigned long s3c_irqwake_eintallow= 0xfff0L; int s3c_irq_wake(struct irq_data *data, unsigned int state) { - unsigned long irqbit = 1 << (data->irq - IRQ_EINT0); + unsigned long irqbit = 1 << data->hwirq; if (!(s3c_irqwake_intallow & irqbit)) return -ENOENT; - printk(KERN_INFO "wake %s for irq %d\n", - state ? "enabled" : "disabled", data->irq); + pr_info("wake %s for hwirq %lu\n", + state ? "enabled" : "disabled", data->hwirq); if (!state) s3c_irqwake_intmask |= irqbit; -- 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 3/4] ARM: dts: add support for hdmi-ddc to exynos4412-origen
Hi, On 01/25/2013 11:39 AM, Rahul Sharma wrote: Signed-off-by: Rahul Sharma Please explain why this patch is needed, in more detail... --- arch/arm/boot/dts/exynos4.dtsi | 1 - arch/arm/boot/dts/exynos4412-origen.dts | 13 + 2 files changed, 13 insertions(+), 1 deletion(-) mode change 100644 => 100755 arch/arm/boot/dts/exynos4412.dtsi diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi index 07cb7d4..a75e2f5 100644 --- a/arch/arm/boot/dts/exynos4.dtsi +++ b/arch/arm/boot/dts/exynos4.dtsi @@ -219,7 +219,6 @@ compatible = "samsung,s3c2440-i2c"; reg =<0x138C 0x100>; interrupts =<0 64 0>; - status = "disabled"; No, it's not how it is supposed to be done. If you want to enable this specific I2C controller on your board, just add status = "okay"; line in its node in the board-specific dts file. Please see below. }; i2c_7: i2c@138D { diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index 4eba374..6299f1b 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts @@ -59,4 +59,17 @@ serial@1383 { status = "okay"; }; + + i2c_6: i2c@138C { + samsung,i2c-sda-delay =<100>; + samsung,i2c-max-bus-freq =<66000>; + + pinctrl-0 =<&i2c6_bus>; + pinctrl-names = "default"; status = "okay"; + hdmiddc@50 { + compatible = "samsung,exynos4-hdmiddc"; + reg =<0x50>; + }; + }; }; diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi old mode 100644 new mode 100755 Are you sure you need to add all these execute permissions ? Do you think these values are more sane than the previous ones ? I'm afraid there is something going wrong with the file permissions in your environment... -- Thanks, Sylwester -- 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 v4 2/9] ARM: S3C24XX: Move irq syscore-ops to irq-pm
With this the definition of s3c24xx_irq_syscore_ops can also move to common.h from plat/pm.h and the definitions of s3c24xx_irq_suspend and s3c24xx_irq_resume are also not necessary anymore in plat/pm.h Signed-off-by: Heiko Stuebner --- arch/arm/mach-s3c24xx/common.h |2 ++ arch/arm/mach-s3c24xx/irq-pm.c | 10 -- arch/arm/mach-s3c24xx/s3c2410.c |4 +++- arch/arm/mach-s3c24xx/s3c2412.c |4 +++- arch/arm/mach-s3c24xx/s3c2416.c |4 +++- arch/arm/mach-s3c24xx/s3c2440.c |4 +++- arch/arm/mach-s3c24xx/s3c2442.c |4 +++- arch/arm/plat-s3c24xx/irq.c |6 -- arch/arm/plat-samsung/include/plat/pm.h |6 -- 9 files changed, 25 insertions(+), 19 deletions(-) diff --git a/arch/arm/mach-s3c24xx/common.h b/arch/arm/mach-s3c24xx/common.h index c2f596e..ed6276f 100644 --- a/arch/arm/mach-s3c24xx/common.h +++ b/arch/arm/mach-s3c24xx/common.h @@ -15,4 +15,6 @@ void s3c2410_restart(char mode, const char *cmd); void s3c244x_restart(char mode, const char *cmd); +extern struct syscore_ops s3c24xx_irq_syscore_ops; + #endif /* __ARCH_ARM_MACH_S3C24XX_COMMON_H */ diff --git a/arch/arm/mach-s3c24xx/irq-pm.c b/arch/arm/mach-s3c24xx/irq-pm.c index 0efb2e2..d48126d 100644 --- a/arch/arm/mach-s3c24xx/irq-pm.c +++ b/arch/arm/mach-s3c24xx/irq-pm.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -64,7 +65,7 @@ static unsigned long save_extint[3]; static unsigned long save_eintflt[4]; static unsigned long save_eintmask; -int s3c24xx_irq_suspend(void) +static int s3c24xx_irq_suspend(void) { unsigned int i; @@ -80,7 +81,7 @@ int s3c24xx_irq_suspend(void) return 0; } -void s3c24xx_irq_resume(void) +static void s3c24xx_irq_resume(void) { unsigned int i; @@ -93,3 +94,8 @@ void s3c24xx_irq_resume(void) s3c_pm_do_restore(irq_save, ARRAY_SIZE(irq_save)); __raw_writel(save_eintmask, S3C24XX_EINTMASK); } + +struct syscore_ops s3c24xx_irq_syscore_ops = { + .suspend= s3c24xx_irq_suspend, + .resume = s3c24xx_irq_resume, +}; diff --git a/arch/arm/mach-s3c24xx/s3c2410.c b/arch/arm/mach-s3c24xx/s3c2410.c index a3c5cb0..9ebef95 100644 --- a/arch/arm/mach-s3c24xx/s3c2410.c +++ b/arch/arm/mach-s3c24xx/s3c2410.c @@ -49,6 +49,8 @@ #include #include +#include "common.h" + /* Initial IO mappings */ static struct map_desc s3c2410_iodesc[] __initdata = { @@ -182,8 +184,8 @@ int __init s3c2410_init(void) #ifdef CONFIG_PM register_syscore_ops(&s3c2410_pm_syscore_ops); -#endif register_syscore_ops(&s3c24xx_irq_syscore_ops); +#endif return device_register(&s3c2410_dev); } diff --git a/arch/arm/mach-s3c24xx/s3c2412.c b/arch/arm/mach-s3c24xx/s3c2412.c index c511a22..533b4a9 100644 --- a/arch/arm/mach-s3c24xx/s3c2412.c +++ b/arch/arm/mach-s3c24xx/s3c2412.c @@ -52,6 +52,8 @@ #define S3C2412_SWRST (S3C24XX_VA_CLKPWR + 0x30) #define S3C2412_SWRST_RESET(0x533C2412) +#include "common.h" + #ifndef CONFIG_CPU_S3C2412_ONLY void __iomem *s3c24xx_va_gpio2 = S3C24XX_VA_GPIO; @@ -245,8 +247,8 @@ int __init s3c2412_init(void) #ifdef CONFIG_PM register_syscore_ops(&s3c2412_pm_syscore_ops); -#endif register_syscore_ops(&s3c24xx_irq_syscore_ops); +#endif return device_register(&s3c2412_dev); } diff --git a/arch/arm/mach-s3c24xx/s3c2416.c b/arch/arm/mach-s3c24xx/s3c2416.c index 77ee0b7..e30476d 100644 --- a/arch/arm/mach-s3c24xx/s3c2416.c +++ b/arch/arm/mach-s3c24xx/s3c2416.c @@ -63,6 +63,8 @@ #include #include +#include "common.h" + static struct map_desc s3c2416_iodesc[] __initdata = { IODESC_ENT(WATCHDOG), IODESC_ENT(CLKPWR), @@ -105,9 +107,9 @@ int __init s3c2416_init(void) #ifdef CONFIG_PM register_syscore_ops(&s3c2416_pm_syscore_ops); -#endif register_syscore_ops(&s3c24xx_irq_syscore_ops); register_syscore_ops(&s3c2416_irq_syscore_ops); +#endif return device_register(&s3c2416_dev); } diff --git a/arch/arm/mach-s3c24xx/s3c2440.c b/arch/arm/mach-s3c24xx/s3c2440.c index 2b3dddb..559e394 100644 --- a/arch/arm/mach-s3c24xx/s3c2440.c +++ b/arch/arm/mach-s3c24xx/s3c2440.c @@ -40,6 +40,8 @@ #include #include +#include "common.h" + static struct device s3c2440_dev = { .bus= &s3c2440_subsys, }; @@ -57,9 +59,9 @@ int __init s3c2440_init(void) #ifdef CONFIG_PM register_syscore_ops(&s3c2410_pm_syscore_ops); + register_syscore_ops(&s3c24xx_irq_syscore_ops); #endif register_syscore_ops(&s3c244x_pm_syscore_ops); - register_syscore_ops(&s3c24xx_irq_syscore_ops); /* register our system device for everything else */ diff --git a/arch/arm/mach-s3c24xx/s3c2442.c b/arch/arm/mach-s3c24xx/s3c2442.c index 22cb7c9..f732826 100644 --- a/arch/arm/mach-s3c24xx/s3c2442.c +++ b/arch/arm/mach-s3c24xx/s3c2442.c @@ -51,6 +51,8 @@ #inc
[PATCH v4 1/9] ARM: S3C24XX: transform irq handling into a declarative form
The irqs available on the machine and even the bit settings in the irq registers differ a lot through all the s3c24xx subarchitectures. This results in each subarch having its own irq init which adds its specific irqs to the base ones created in plat-s3c24xx/irq.c. This of course makes a future move to devicetree hard to implement. Therefore this patch transforms the base irq handling to a declarative style, where the irq types as well as its parent/child relationship gets read from a predefined datastructure, which later on can hopefully be easily represented in devicetree too. It should also be easy to include the subarch specific irqs here in later patches, reducing code size and duplication. It should not affect anything outside of the file, as the original irq numbers and their handling are preserved (hopefully) correctly. Signed-off-by: Heiko Stuebner --- changes since v2: - redo the initialization, move parts of the upcoming dt init here to enable both init variants to share the code changes since v1: - more generalized irq types, resulting in only types for none, eint, edge and level being needed - use chained_irq_enter/exit to simplify subirq handling arch/arm/plat-s3c24xx/Kconfig |1 + arch/arm/plat-s3c24xx/irq.c | 930 - 2 files changed, 445 insertions(+), 486 deletions(-) diff --git a/arch/arm/plat-s3c24xx/Kconfig b/arch/arm/plat-s3c24xx/Kconfig index eef3b6a..3bb5c8f 100644 --- a/arch/arm/plat-s3c24xx/Kconfig +++ b/arch/arm/plat-s3c24xx/Kconfig @@ -9,6 +9,7 @@ config PLAT_S3C24XX select ARCH_REQUIRE_GPIOLIB select NO_IOPORT select S3C_DEV_NAND + select IRQ_DOMAIN help Base platform code for any Samsung S3C24XX device diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c index fe57bbb..9e24ef5 100644 --- a/arch/arm/plat-s3c24xx/irq.c +++ b/arch/arm/plat-s3c24xx/irq.c @@ -1,7 +1,9 @@ -/* linux/arch/arm/plat-s3c24xx/irq.c +/* + * S3C24XX IRQ handling * * Copyright (c) 2003-2004 Simtec Electronics * Ben Dooks + * Copyright (c) 2012 Heiko Stuebner * * 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 @@ -12,175 +14,124 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * 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 +#include #include +#include +#include #include #include #include #include +#include -#include #include -#include +#include +#include #include +#include #include #include -static void -s3c_irq_mask(struct irq_data *data) -{ - unsigned int irqno = data->irq - IRQ_EINT0; - unsigned long mask; - - mask = __raw_readl(S3C2410_INTMSK); - mask |= 1UL << irqno; - __raw_writel(mask, S3C2410_INTMSK); -} - -static inline void -s3c_irq_ack(struct irq_data *data) -{ - unsigned long bitval = 1UL << (data->irq - IRQ_EINT0); - - __raw_writel(bitval, S3C2410_SRCPND); - __raw_writel(bitval, S3C2410_INTPND); -} - -static inline void -s3c_irq_maskack(struct irq_data *data) -{ - unsigned long bitval = 1UL << (data->irq - IRQ_EINT0); - unsigned long mask; +#define S3C_IRQTYPE_NONE 0 +#define S3C_IRQTYPE_EINT 1 +#define S3C_IRQTYPE_EDGE 2 +#define S3C_IRQTYPE_LEVEL 3 - mask = __raw_readl(S3C2410_INTMSK); - __raw_writel(mask|bitval, S3C2410_INTMSK); +struct s3c_irq_data { + unsigned int type; + unsigned long parent_irq; - __raw_writel(bitval, S3C2410_SRCPND); - __raw_writel(bitval, S3C2410_INTPND); -} - - -static void -s3c_irq_unmask(struct irq_data *data) -{ - unsigned int irqno = data->irq; - unsigned long mask; - - if (irqno != IRQ_TIMER4 && irqno != IRQ_EINT8t23) - irqdbf2("s3c_irq_unmask %d\n", irqno); - - irqno -= IRQ_EINT0; - - mask = __raw_readl(S3C2410_INTMSK); - mask &= ~(1UL << irqno); - __raw_writel(mask, S3C2410_INTMSK); -} - -struct irq_chip s3c_irq_level_chip = { - .name = "s3c-level", - .irq_ack= s3c_irq_maskack, - .irq_mask = s3c_irq_mask, - .irq_unmask = s3c_irq_unmask, - .irq_set_wake = s3c_irq_wake + /* data gets filled during init */ + struct s3c_irq_intc *intc; + unsigned long sub_bits; + struct s3c_irq_intc *sub_intc; }; -struct irq_chip s3c_irq_chip = { - .name = "s3c", - .irq_ack= s3c_irq_ack, - .irq_mask = s3c_irq_mask, - .irq_unmask = s3c_irq_unmask, - .irq_set_wake = s3c_irq_wake +/* +
Re: [PATCH v3 0/9] ARM: S3C24XX: rework irq handling for a later dt usage
Am Freitag, 25. Januar 2013, 19:59:18 schrieb Kukjin Kim: > Heiko Stübner wrote: > > Third version of redoing the s3c24xx irqs in a generic way by using a > > declarative approach. > > > > Main change is the different approach to the init. Moved the > > s3c24xx_init_intc function from the dt patchset here, so that both init > > types (dt and non-dt) can use a similar init scheme. > > > > As in the second version, the 1st patch might be hard to read due to the > > rewrite character, but I didn't see a way to do these changes in > > individual steps. So it might be helpful to look at the result after > > applying this patch. > > > > Runtime-tested on a s3c2416 based board and compile tested for the > > others. > > > > As also written before, inclusion of the other S3C24XX SoCs to follow > > once the general approach is acceptable. > > > > Applies to the most current for-next (from two hours ago) from linux- > > samsung > > > > Heiko Stuebner (9): > > ARM: S3C24XX: transform irq handling into a declarative form > > ARM: S3C24XX: Move irq syscore-ops to irq-pm > > ARM: S3C24XX: Modify s3c_irq_wake to use the hwirq property > > ARM: S3C24XX: move s3c2416 irq init to common irq code > > ARM: S3C24XX: modify s3c2416 irq init to initialize all irqs > > ARM: S3C24XX: transform s3c2416 irqs into new structure > > ARM: S3C24XX: move s3c2443 irq code to irq.c > > ARM: S3C24XX: modify s3c2443 irq init to initialize all irqs > > ARM: S3C24XX: transform s3c2443 subirqs into new structure > > > > arch/arm/mach-s3c24xx/Makefile |4 +- > > arch/arm/mach-s3c24xx/common.h |2 + > > arch/arm/mach-s3c24xx/irq-pm.c | 41 +- > > arch/arm/mach-s3c24xx/irq-s3c2416.c | 348 > > arch/arm/mach-s3c24xx/irq-s3c2443.c | 281 --- > > arch/arm/mach-s3c24xx/mach-smdk2416.c|2 +- > > arch/arm/mach-s3c24xx/mach-smdk2443.c|2 +- > > arch/arm/mach-s3c24xx/s3c2410.c |4 +- > > arch/arm/mach-s3c24xx/s3c2412.c |4 +- > > arch/arm/mach-s3c24xx/s3c2416.c |4 +- > > arch/arm/mach-s3c24xx/s3c2440.c |4 +- > > arch/arm/mach-s3c24xx/s3c2442.c |4 +- > > arch/arm/plat-s3c24xx/Kconfig|1 + > > arch/arm/plat-s3c24xx/irq.c | 1110 > > +++--- arch/arm/plat-samsung/include/plat/pm.h > > |6 - > > arch/arm/plat-samsung/include/plat/s3c2416.h |1 + > > arch/arm/plat-samsung/include/plat/s3c2443.h |2 + > > 17 files changed, 688 insertions(+), 1132 deletions(-) > > delete mode 100644 arch/arm/mach-s3c24xx/irq-s3c2416.c > > delete mode 100644 arch/arm/mach-s3c24xx/irq-s3c2443.c > > > > -- > > 1.7.2.3 > > Heiko, looks good to me :-) very cool :-) > BTW, can you rebase this against on next/cleanup-s3c24xx branch in my tree? will try to do this today 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