RE: [PATCH v6 3/3] input: samsung-keypad - Add samsung keypad driver

2010-07-09 Thread Kukjin Kim
Joonyoung Shim wrote:
 
 On 7/7/2010 8:52 AM, Kukjin Kim wrote:
  Joonyoung Shim wrote:
  Hi, Naveen.
 
  On 6/28/2010 8:33 PM, Joonyoung Shim wrote:
  This patch adds support for keypad driver running on Samsung cpus. This
  driver is tested on GONI and Aquila board using S5PC110 cpu.
 
  Signed-off-by: Joonyoung Shim jy0922.s...@samsung.com
  Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
  ---
   drivers/input/keyboard/Kconfig  |9 +
   drivers/input/keyboard/Makefile |1 +
   drivers/input/keyboard/samsung-keypad.c |  491
  +++
   3 files changed, 501 insertions(+), 0 deletions(-)
   create mode 100644 drivers/input/keyboard/samsung-keypad.c
 
  Could you please test this v6 keypad driver on your various targets?
 
  Hi,
 
  I received the test result from Naveen.
  And now he is debugging about that.
 
  ..his e-mail client has some problem..so I replied...
 
  ---
  From: Naveen Ch
 
  I've tested with v6 patches and they are working fine on SMDK6410, SMDKC100
 and SMDKV210, except for some header inclusion (linux/sched.h) in samsung-
 keypad.c.
 
  The build breaking error is like following:
  (make s5pc100_defconfig and select input-keypad-samsung keypad)
 
  drivers/input/keyboard/samsung-keypad.c: In function 'samsung_keypad_irq':
  drivers/input/keyboard/samsung-keypad.c:170: error: 'TASK_UNINTERRUPTIBLE'
 undeclared (first use in this function)
  drivers/input/keyboard/samsung-keypad.c:170: error: (Each undeclared 
  identifier
 is reported only once
  drivers/input/keyboard/samsung-keypad.c:170: error: for each function it 
  appears
 in.)
  drivers/input/keyboard/samsung-keypad.c:170: error: implicit declaration of
 function 'schedule_timeout'
  drivers/input/keyboard/samsung-keypad.c: In function 'samsung_keypad_stop':
  drivers/input/keyboard/samsung-keypad.c:202: error: 'TASK_NORMAL'
 undeclared (first use in this function)
  make[3]: *** [drivers/input/keyboard/samsung-keypad.o] Error 1
 
 
 This error occurs on s5pc100_defconfig having disabled CONFIG_PREEMPT
 option. I think sched.h should be included to remove like this
 dependency in driver, are there other ways?

I'm not sure root cause is that. But as you said, I think need inclusion it for 
prevent the problem.
Actually didn't happen it before..so maybe the some core functions have moved 
between rc-3 and earlier versions...

Anyway, if no any issues, could you please re-submit updated it soon?

Thanks.

Best regards,
Kgene.
--
Kukjin Kim kgene@samsung.com, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

--
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 v6 3/3] input: samsung-keypad - Add samsung keypad driver

2010-07-09 Thread Joonyoung Shim
On 7/9/2010 4:07 PM, Kukjin Kim wrote:
 Joonyoung Shim wrote:
 On 7/7/2010 8:52 AM, Kukjin Kim wrote:
 Joonyoung Shim wrote:
 Hi, Naveen.

 On 6/28/2010 8:33 PM, Joonyoung Shim wrote:
 This patch adds support for keypad driver running on Samsung cpus. This
 driver is tested on GONI and Aquila board using S5PC110 cpu.

 Signed-off-by: Joonyoung Shim jy0922.s...@samsung.com
 Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  drivers/input/keyboard/Kconfig  |9 +
  drivers/input/keyboard/Makefile |1 +
  drivers/input/keyboard/samsung-keypad.c |  491
 +++
  3 files changed, 501 insertions(+), 0 deletions(-)
  create mode 100644 drivers/input/keyboard/samsung-keypad.c

 Could you please test this v6 keypad driver on your various targets?
 Hi,

 I received the test result from Naveen.
 And now he is debugging about that.

 ..his e-mail client has some problem..so I replied...

 ---
 From: Naveen Ch

 I've tested with v6 patches and they are working fine on SMDK6410, SMDKC100
 and SMDKV210, except for some header inclusion (linux/sched.h) in samsung-
 keypad.c.
 The build breaking error is like following:
 (make s5pc100_defconfig and select input-keypad-samsung keypad)

 drivers/input/keyboard/samsung-keypad.c: In function 'samsung_keypad_irq':
 drivers/input/keyboard/samsung-keypad.c:170: error: 'TASK_UNINTERRUPTIBLE'
 undeclared (first use in this function)
 drivers/input/keyboard/samsung-keypad.c:170: error: (Each undeclared 
 identifier
 is reported only once
 drivers/input/keyboard/samsung-keypad.c:170: error: for each function it 
 appears
 in.)
 drivers/input/keyboard/samsung-keypad.c:170: error: implicit declaration of
 function 'schedule_timeout'
 drivers/input/keyboard/samsung-keypad.c: In function 'samsung_keypad_stop':
 drivers/input/keyboard/samsung-keypad.c:202: error: 'TASK_NORMAL'
 undeclared (first use in this function)
 make[3]: *** [drivers/input/keyboard/samsung-keypad.o] Error 1

 This error occurs on s5pc100_defconfig having disabled CONFIG_PREEMPT
 option. I think sched.h should be included to remove like this
 dependency in driver, are there other ways?
 
 I'm not sure root cause is that. But as you said, I think need inclusion it 
 for prevent the problem.
 Actually didn't happen it before..so maybe the some core functions have moved 
 between rc-3 and earlier versions...

The sched.h is included by below path.

interrupt.h - hardirq.h - smp_lock.h - sched.h

The smp_lock.h in hardirq.h is included if CONFIG_PREEMPT is defined. 
The samsung keypad driver haven't needed including sched.h before
Dmitry's patch is applied..

 
 Anyway, if no any issues, could you please re-submit updated it soon?

I haven't get yet Dmitry's review of v6 patch set, so i am waiting it.

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


[PATCH v4 0/19] Various s3c-fb updates

2010-07-09 Thread Pawel Osciak
Hello,

This series contains various Samsung framebuffer driver updates.
I believe that it has reached the stage of being ready for merging.

The main highlights of this series are:
- Ben Dook's unification of the plethora of Samsung framebuffer header
files with configuration selection at probe time, machine naming;
- palette setup code moved to the main driver;
- added ability to wait for VSYNC and to pan the display;
- better support for new features found in S5PV210 SoCs, including
  shadow register handling and DMA channel control,
- various small changes,
- a number of bugs has also been fixed.


Changes in v4:
- corrected fb_dealloc_cmap condition on window probe failure
- fixed a race condition in wait for VSYNC ioctl
- removed has_osd_size flag from window variant; osd_size_off != 0
  now implies has_osd_size = 1
- cosmetic changes, as suggested by Ben Dooks, and more comments

Changes in v3:
- new patches:
  * fixing a section mismatch error
  * adding support for DMA channel control (enable/disable) found on S5PV210
  * disabling shadow register updates during set_par

- unified function for disabling register updates
- no need to initialize names for 64xx-type framebuffers (is being set as
  default anyway)
- updated to the new version of Ben's branch
- minor fixes

Changes in v2:
- added SHADOWCON register support found on S3C6410 and S5PC100 for disabling
  shadow register updates
- fixed osd and alpha register handling (different configurations for different
  machines)

The series includes:

[PATCH 01/19] s3c-fb: Change to depending on CONFIG_S3C_FB_DEV
[PATCH 02/19] s3c-fb: add default window feature.
[PATCH 03/19] s3c-fb: fixed distortedness situation for the mode more then 
24bpp.
[PATCH 04/19] s3c-fb: only init window colour key controls for windows with 
blending
[PATCH 05/19] s3c-fb: Initial move to unifying the header files
[PATCH 06/19] s3c-fb: udpate to support s3c2416/s3c2443 style hardware
[PATCH 07/19] s3c-fb: Integrate palette setup code into main driver
[PATCH 08/19] s3c-fb: Fix various null references on framebuffer memory alloc 
failure
[PATCH 09/19] s3c-fb: Correct FRAMESEL1 bitfield defines for VIDINTCON0 register
[PATCH 10/19] s3c-fb: Separate S5PC100 and S5PV210 framebuffer driver data 
structures
[PATCH 11/19] s3c-fb: Add device name initialization
[PATCH 12/19] s3c-fb: Add support for display panning
[PATCH 13/19] s3c-fb: Add wait for VSYNC ioctl
[PATCH 14/19] s3c-fb: window 3 of 64xx+ does not have an osd_d register
[PATCH 15/19] s3c-fb: Add SHADOWCON shadow register locking support for S5PV210
[PATCH 16/19] s3c-fb: Correct window osd size and alpha register handling
[PATCH 17/19] s3c-fb: Protect window-specific registers during updates
[PATCH 18/19] s3c-fb: fix section mismatch
[PATCH 19/19] s3c-fb: Add support for DMA channel control on S5PV210

Best regards
--
Pawel Osciak
Linux Platform Group
Samsung Poland RD 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


[PATCH 17/19] s3c-fb: Protect window-specific registers during updates

2010-07-09 Thread Pawel Osciak
Newer hardware (S3C6410, S5P) have the ability to block updates from shadow
registers during reconfiguration. Add protect calls for set_par and clear
protection when resetting.

Signed-off-by: Pawel Osciak p.osc...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 drivers/video/s3c-fb.c |7 +++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 2173869..b10d16d 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -450,6 +450,8 @@ static int s3c_fb_set_par(struct fb_info *info)
 
dev_dbg(sfb-dev, setting framebuffer parameters\n);
 
+   shadow_protect_win(win, 1);
+
switch (var-bits_per_pixel) {
case 32:
case 24:
@@ -632,6 +634,8 @@ static int s3c_fb_set_par(struct fb_info *info)
writel(data, regs + sfb-variant.wincon + (win_no * 4));
writel(0x0, regs + sfb-variant.winmap + (win_no * 4));
 
+   shadow_protect_win(win, 0);
+
return 0;
 }
 
@@ -1228,11 +1232,14 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb 
*sfb, unsigned int win_no,
 static void s3c_fb_clear_win(struct s3c_fb *sfb, int win)
 {
void __iomem *regs = sfb-regs;
+   u32 reg;
 
writel(0, regs + sfb-variant.wincon + (win * 4));
writel(0, regs + VIDOSD_A(win, sfb-variant));
writel(0, regs + VIDOSD_B(win, sfb-variant));
writel(0, regs + VIDOSD_C(win, sfb-variant));
+   reg = readl(regs + SHADOWCON);
+   writel(reg  ~SHADOWCON_WINx_PROTECT(win), regs + SHADOWCON);
 }
 
 static int __devinit s3c_fb_probe(struct platform_device *pdev)
-- 
1.7.1.569.g6f426

--
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 18/19] s3c-fb: fix section mismatch

2010-07-09 Thread Pawel Osciak
From: Marek Szyprowski m.szyprow...@samsung.com

This patch fixes the following section mismatch errors:

WARNING: vmlinux.o(.data+0x20b40): Section mismatch in reference from the 
variable s3c_fb_driver_ids to the (unknown reference) .devinit.data:(unknown)
The variable s3c_fb_driver_ids references
the (unknown reference) __devinitdata (unknown)
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*driver, *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console,

WARNING: vmlinux.o(.data+0x20b58): Section mismatch in reference from the 
variable s3c_fb_driver_ids to the (unknown reference) .devinit.data:(unknown)
The variable s3c_fb_driver_ids references
the (unknown reference) __devinitdata (unknown)
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*driver, *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console,

WARNING: vmlinux.o(.data+0x20b70): Section mismatch in reference from the 
variable s3c_fb_driver_ids to the (unknown reference) .devinit.data:(unknown)
The variable s3c_fb_driver_ids references
the (unknown reference) __devinitdata (unknown)
If the reference is valid then annotate the
variable with __init* or __refdata (see linux/init.h) or name the variable:
*driver, *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console,

Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 drivers/video/s3c-fb.c |   10 +-
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index b10d16d..a95314d 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -1478,7 +1478,7 @@ static int s3c_fb_resume(struct platform_device *pdev)
 #define VALID_BPP124 (VALID_BPP(1) | VALID_BPP(2) | VALID_BPP(4))
 #define VALID_BPP1248 (VALID_BPP124 | VALID_BPP(8))
 
-static struct s3c_fb_win_variant s3c_fb_data_64xx_wins[] __devinitdata = {
+static struct s3c_fb_win_variant s3c_fb_data_64xx_wins[] = {
[0] = {
.has_osd_c  = 1,
.osd_size_off   = 0x8,
@@ -1526,7 +1526,7 @@ static struct s3c_fb_win_variant s3c_fb_data_64xx_wins[] 
__devinitdata = {
},
 };
 
-static struct s3c_fb_driverdata s3c_fb_data_64xx __devinitdata = {
+static struct s3c_fb_driverdata s3c_fb_data_64xx = {
.variant = {
.nr_windows = 5,
.vidtcon= VIDTCON0,
@@ -1556,7 +1556,7 @@ static struct s3c_fb_driverdata s3c_fb_data_64xx 
__devinitdata = {
.win[4] = s3c_fb_data_64xx_wins[4],
 };
 
-static struct s3c_fb_driverdata s3c_fb_data_s5pc100 __devinitdata = {
+static struct s3c_fb_driverdata s3c_fb_data_s5pc100 = {
.variant = {
.nr_windows = 5,
.vidtcon= VIDTCON0,
@@ -1586,7 +1586,7 @@ static struct s3c_fb_driverdata s3c_fb_data_s5pc100 
__devinitdata = {
.win[4] = s3c_fb_data_64xx_wins[4],
 };
 
-static struct s3c_fb_driverdata s3c_fb_data_s5pv210 __devinitdata = {
+static struct s3c_fb_driverdata s3c_fb_data_s5pv210 = {
.variant = {
.nr_windows = 5,
.vidtcon= VIDTCON0,
@@ -1617,7 +1617,7 @@ static struct s3c_fb_driverdata s3c_fb_data_s5pv210 
__devinitdata = {
 };
 
 /* S3C2443/S3C2416 style hardware */
-static struct s3c_fb_driverdata s3c_fb_data_s3c2443 __devinitdata = {
+static struct s3c_fb_driverdata s3c_fb_data_s3c2443 = {
.variant = {
.nr_windows = 2,
.is_2443= 1,
-- 
1.7.1.569.g6f426

--
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 19/19] s3c-fb: Add support for DMA channel control on S5PV210

2010-07-09 Thread Pawel Osciak
S5PV210 SoCs allow enabling/disabling DMA channels per window. For a window
to display data from framebuffer memory, its channel has to be enabled.

Signed-off-by: Pawel Osciak p.osc...@samsung.com
Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 arch/arm/plat-samsung/include/plat/regs-fb.h |4 
 drivers/video/s3c-fb.c   |   15 +++
 2 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/arch/arm/plat-samsung/include/plat/regs-fb.h 
b/arch/arm/plat-samsung/include/plat/regs-fb.h
index 4359918..8f39aa5 100644
--- a/arch/arm/plat-samsung/include/plat/regs-fb.h
+++ b/arch/arm/plat-samsung/include/plat/regs-fb.h
@@ -223,6 +223,10 @@
 /* S5PV210 */
 #define SHADOWCON  (0x34)
 #define SHADOWCON_WINx_PROTECT(_win)   (1  (10 + (_win)))
+/* DMA channels (all windows) */
+#define SHADOWCON_CHx_ENABLE(_win) (1  (_win))
+/* Local input channels (windows 0-2) */
+#define SHADOWCON_CHx_LOCAL_ENABLE(_win)   (1  (5 + (_win)))
 
 #define VIDOSDxA_TOPLEFT_X_MASK(0x7ff  11)
 #define VIDOSDxA_TOPLEFT_X_SHIFT   (11)
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index a95314d..8ea974d 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -634,6 +634,13 @@ static int s3c_fb_set_par(struct fb_info *info)
writel(data, regs + sfb-variant.wincon + (win_no * 4));
writel(0x0, regs + sfb-variant.winmap + (win_no * 4));
 
+   /* Enable DMA channel for this window */
+   if (sfb-variant.has_shadowcon) {
+   data = readl(sfb-regs + SHADOWCON);
+   data |= SHADOWCON_CHx_ENABLE(win_no);
+   writel(data, sfb-regs + SHADOWCON);
+   }
+
shadow_protect_win(win, 0);
 
return 0;
@@ -1091,7 +1098,15 @@ static void s3c_fb_free_memory(struct s3c_fb *sfb, 
struct s3c_fb_win *win)
  */
 static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win)
 {
+   u32 data;
+
if (win-fbinfo) {
+   if (sfb-variant.has_shadowcon) {
+   data = readl(sfb-regs + SHADOWCON);
+   data = ~SHADOWCON_CHx_ENABLE(win-index);
+   data = ~SHADOWCON_CHx_LOCAL_ENABLE(win-index);
+   writel(data, sfb-regs + SHADOWCON);
+   }
unregister_framebuffer(win-fbinfo);
if (win-fbinfo-cmap.len)
fb_dealloc_cmap(win-fbinfo-cmap);
-- 
1.7.1.569.g6f426

--
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 01/19] s3c-fb: Change to depending on CONFIG_S3C_FB_DEV

2010-07-09 Thread Pawel Osciak
From: Ben Dooks ben-li...@fluff.org

As suggested by Marek Szyprowski, we should make the driver depend on
the configuration currently being used to build the platform device
into the kernel.

Signed-off-by: Ben Dooks ben-li...@fluff.org
Signed-off-by: Pawel Osciak p.osc...@samsung.com
---
 drivers/video/Kconfig |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 3d94a14..858f1ca 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -1930,7 +1930,7 @@ config FB_TMIO_ACCELL
 
 config FB_S3C
tristate Samsung S3C framebuffer support
-   depends on FB  ARCH_S3C64XX
+   depends on FB  S3C_DEV_FB
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
-- 
1.7.1.569.g6f426

--
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 07/19] s3c-fb: Integrate palette setup code into main driver

2010-07-09 Thread Pawel Osciak
From: Ben Dooks ben-li...@fluff.org

Remove the palette setup code from the header files and
put it into the main driver.

Signed-off-by: Ben Dooks ben-li...@fluff.org
Signed-off-by: Pawel Osciak p.osc...@samsung.com
---
 arch/arm/plat-samsung/include/plat/regs-fb-v4.h |   34 ---
 drivers/video/s3c-fb.c  |   33 +-
 2 files changed, 32 insertions(+), 35 deletions(-)

diff --git a/arch/arm/plat-samsung/include/plat/regs-fb-v4.h 
b/arch/arm/plat-samsung/include/plat/regs-fb-v4.h
index 8352f5dc..4c3647f 100644
--- a/arch/arm/plat-samsung/include/plat/regs-fb-v4.h
+++ b/arch/arm/plat-samsung/include/plat/regs-fb-v4.h
@@ -137,40 +137,6 @@
 #define WPALCON_W2PAL_16BPP_A555   (1  6)
 
 
-/* system specific implementation code for palette sizes, and other
- * information that changes depending on which architecture is being
- * compiled.
-*/
-
-struct s3c_fb_palette {
-   struct fb_bitfield  r;
-   struct fb_bitfield  g;
-   struct fb_bitfield  b;
-   struct fb_bitfield  a;
-};
-
-static inline void s3c_fb_init_palette(unsigned int window,
-  struct s3c_fb_palette *palette)
-{
-   if (window  2) {
-   /* Windows 0/1 are 8/8/8 or A/8/8/8 */
-   palette-r.offset = 16;
-   palette-r.length = 8;
-   palette-g.offset = 8;
-   palette-g.length = 8;
-   palette-b.offset = 0;
-   palette-b.length = 8;
-   } else {
-   /* currently we assume RGB 5/6/5 */
-   palette-r.offset = 11;
-   palette-r.length = 5;
-   palette-g.offset = 5;
-   palette-g.length = 6;
-   palette-b.offset = 0;
-   palette-b.length = 5;
-   }
-}
-
 /* Notes on per-window bpp settings
  *
  * Value   Win0 Win1 Win2 Win3 Win 4
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 5c7ac01..b00c064 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -116,6 +116,20 @@ struct s3c_fb_driverdata {
 };
 
 /**
+ * struct s3c_fb_palette - palette information
+ * @r: Red bitfield.
+ * @g: Green bitfield.
+ * @b: Blue bitfield.
+ * @a: Alpha bitfield.
+ */
+struct s3c_fb_palette {
+   struct fb_bitfield  r;
+   struct fb_bitfield  g;
+   struct fb_bitfield  b;
+   struct fb_bitfield  a;
+};
+
+/**
  * struct s3c_fb_win - per window private data for each framebuffer.
  * @windata: The platform data supplied for the window configuration.
  * @parent: The hardware that this window is part of.
@@ -866,7 +880,24 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, 
unsigned int win_no,
}
 
/* setup the r/b/g positions for the window's palette */
-   s3c_fb_init_palette(win_no, win-palette);
+   if (win-variant.palette_16bpp) {
+   /* Set RGB 5:6:5 as default */
+   win-palette.r.offset = 11;
+   win-palette.r.length = 5;
+   win-palette.g.offset = 5;
+   win-palette.g.length = 6;
+   win-palette.b.offset = 0;
+   win-palette.b.length = 5;
+
+   } else {
+   /* Set 8bpp or 8bpp and 1bit alpha */
+   win-palette.r.offset = 16;
+   win-palette.r.length = 8;
+   win-palette.g.offset = 8;
+   win-palette.g.length = 8;
+   win-palette.b.offset = 0;
+   win-palette.b.length = 8;
+   }
 
/* setup the initial video mode from the window */
fb_videomode_to_var(fbinfo-var, initmode);
-- 
1.7.1.569.g6f426

--
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 10/19] s3c-fb: Separate S5PC100 and S5PV210 framebuffer driver data structures

2010-07-09 Thread Pawel Osciak
S5PC100 and S5PV210 framebuffer devices differ slightly in terms of
available registers and their driver data structures have to be separate.
Those differences include dissimilar ways to control shadow register
updates.

Signed-off-by: Pawel Osciak p.osc...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 drivers/video/s3c-fb.c |   37 ++---
 1 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 77f5765..5f931b4 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -1251,7 +1251,35 @@ static struct s3c_fb_driverdata s3c_fb_data_64xx 
__devinitdata = {
.win[4] = s3c_fb_data_64xx_wins[4],
 };
 
-static struct s3c_fb_driverdata s3c_fb_data_s5p __devinitdata = {
+static struct s3c_fb_driverdata s3c_fb_data_s5pc100 __devinitdata = {
+   .variant = {
+   .nr_windows = 5,
+   .vidtcon= VIDTCON0,
+   .wincon = WINCON(0),
+   .winmap = WINxMAP(0),
+   .keycon = WKEYCON,
+   .osd= VIDOSD_BASE,
+   .osd_stride = 16,
+   .buf_start  = VIDW_BUF_START(0),
+   .buf_size   = VIDW_BUF_SIZE(0),
+   .buf_end= VIDW_BUF_END(0),
+
+   .palette = {
+   [0] = 0x2400,
+   [1] = 0x2800,
+   [2] = 0x2c00,
+   [3] = 0x3000,
+   [4] = 0x3400,
+   },
+   },
+   .win[0] = s3c_fb_data_64xx_wins[0],
+   .win[1] = s3c_fb_data_64xx_wins[1],
+   .win[2] = s3c_fb_data_64xx_wins[2],
+   .win[3] = s3c_fb_data_64xx_wins[3],
+   .win[4] = s3c_fb_data_64xx_wins[4],
+};
+
+static struct s3c_fb_driverdata s3c_fb_data_s5pv210 __devinitdata = {
.variant = {
.nr_windows = 5,
.vidtcon= VIDTCON0,
@@ -1319,8 +1347,11 @@ static struct platform_device_id s3c_fb_driver_ids[] = {
.name   = s3c-fb,
.driver_data= (unsigned long)s3c_fb_data_64xx,
}, {
-   .name   = s5p-fb,
-   .driver_data= (unsigned long)s3c_fb_data_s5p,
+   .name   = s5pc100-fb,
+   .driver_data= (unsigned long)s3c_fb_data_s5pc100,
+   }, {
+   .name   = s5pv210-fb,
+   .driver_data= (unsigned long)s3c_fb_data_s5pv210,
}, {
.name   = s3c2443-fb,
.driver_data= (unsigned long)s3c_fb_data_s3c2443,
-- 
1.7.1.569.g6f426

--
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 02/19] s3c-fb: add default window feature.

2010-07-09 Thread Pawel Osciak
From: InKi Dae inki@samsung.com

s5pv210 has five window layers (window0 ~ 4), among them,
window0 ~ 2 could be used for local path with fimc(capture device)
and fimd writeback feature so this patch makes default window layer
for UI to be set at machine code.

Signed-off-by: InKi Dae inki@samsung.com
Reviewed-by: KyungMin Park kyungmin.park.samsung.com
Signed-off-by: Ben Dooks ben-li...@fluff.org
Signed-off-by: Pawel Osciak p.osc...@samsung.com
---
 arch/arm/plat-samsung/include/plat/fb.h |3 +++
 drivers/video/s3c-fb.c  |6 +++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/arm/plat-samsung/include/plat/fb.h 
b/arch/arm/plat-samsung/include/plat/fb.h
index 27d3b49..cb3ca3a 100644
--- a/arch/arm/plat-samsung/include/plat/fb.h
+++ b/arch/arm/plat-samsung/include/plat/fb.h
@@ -42,6 +42,7 @@ struct s3c_fb_pd_win {
  * @setup_gpio: Setup the external GPIO pins to the right state to transfer
  * the data from the display system to the connected display
  * device.
+ * @default_win: default window layer number to be used for UI layer.
  * @vidcon0: The base vidcon0 values to control the panel data format.
  * @vidcon1: The base vidcon1 values to control the panel data output.
  * @win: The setup data for each hardware window, or NULL for unused.
@@ -58,6 +59,8 @@ struct s3c_fb_platdata {
 
struct s3c_fb_pd_win*win[S3C_FB_MAX_WIN];
 
+   u32  default_win;
+
u32  vidcon0;
u32  vidcon1;
 };
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 9682ecc..c4639c4 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -300,9 +300,9 @@ static int s3c_fb_set_par(struct fb_info *info)
/* disable the window whilst we update it */
writel(0, regs + WINCON(win_no));
 
-   /* use window 0 as the basis for the lcd output timings */
+   /* use platform specified window as the basis for the lcd timings */
 
-   if (win_no == 0) {
+   if (win_no == sfb-pdata-default_win) {
clkdiv = s3c_fb_calc_pixclk(sfb, var-pixclock);
 
data = sfb-pdata-vidcon0;
@@ -636,7 +636,7 @@ static int s3c_fb_blank(int blank_mode, struct fb_info 
*info)
/* we're stuck with this until we can do something about overriding
 * the power control using the blanking event for a single fb.
 */
-   if (index == 0)
+   if (index == sfb-pdata-default_win)
s3c_fb_enable(sfb, blank_mode != FB_BLANK_POWERDOWN ? 1 : 0);
 
return 0;
-- 
1.7.1.569.g6f426

--
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 08/19] s3c-fb: Fix various null references on framebuffer memory alloc failure

2010-07-09 Thread Pawel Osciak
The following problems were found in the above situation:

sfb-windows[win] was being assigned at the end of s3c_fb_probe_win only.
This resulted in passing a NULL to s3c_fb_release_win if probe_win returned
early and a memory leak.

dma_free_writecombine does not allow its third argument to be NULL.

fb_dealloc_cmap does not verify whether its argument is not NULL.

Signed-off-by: Pawel Osciak p.osc...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 drivers/video/s3c-fb.c |8 +---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index b00c064..77f5765 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -804,7 +804,8 @@ static void s3c_fb_free_memory(struct s3c_fb *sfb, struct 
s3c_fb_win *win)
 {
struct fb_info *fbi = win-fbinfo;
 
-   dma_free_writecombine(sfb-dev, PAGE_ALIGN(fbi-fix.smem_len),
+   if (fbi-screen_base)
+   dma_free_writecombine(sfb-dev, PAGE_ALIGN(fbi-fix.smem_len),
  fbi-screen_base, fbi-fix.smem_start);
 }
 
@@ -819,7 +820,8 @@ static void s3c_fb_release_win(struct s3c_fb *sfb, struct 
s3c_fb_win *win)
 {
if (win-fbinfo) {
unregister_framebuffer(win-fbinfo);
-   fb_dealloc_cmap(win-fbinfo-cmap);
+   if (win-fbinfo-cmap.len)
+   fb_dealloc_cmap(win-fbinfo-cmap);
s3c_fb_free_memory(sfb, win);
framebuffer_release(win-fbinfo);
}
@@ -865,6 +867,7 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, 
unsigned int win_no,
WARN_ON(windata-win_mode.yres == 0);
 
win = fbinfo-par;
+   *res = win;
var = fbinfo-var;
win-variant = *variant;
win-fbinfo = fbinfo;
@@ -939,7 +942,6 @@ static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, 
unsigned int win_no,
return ret;
}
 
-   *res = win;
dev_info(sfb-dev, window %d: fb %s\n, win_no, fbinfo-fix.id);
 
return 0;
-- 
1.7.1.569.g6f426

--
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 14/19] s3c-fb: window 3 of 64xx+ does not have an osd_d register

2010-07-09 Thread Pawel Osciak
Signed-off-by: Pawel Osciak p.osc...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 drivers/video/s3c-fb.c |1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 2e82adf..6cbddc4 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -1434,7 +1434,6 @@ static struct s3c_fb_win_variant s3c_fb_data_64xx_wins[] 
__devinitdata = {
},
[3] = {
.has_osd_c  = 1,
-   .has_osd_d  = 1,
.palette_sz = 16,
.palette_16bpp  = 1,
.valid_bpp  = (VALID_BPP124  | VALID_BPP(16) |
-- 
1.7.1.569.g6f426

--
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 16/19] s3c-fb: Correct window osd size and alpha register handling

2010-07-09 Thread Pawel Osciak
S3C64xx and S5P OSD registers for OSD size and alpha are as follows:
VIDOSDC: win 0 - size, win 1-4: alpha
VIDOSDD: win 1-2 - size; not present for windows 0, 3 and 4

Signed-off-by: Pawel Osciak p.osc...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 drivers/video/s3c-fb.c |   54 +--
 1 files changed, 47 insertions(+), 7 deletions(-)

diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index f767911..2173869 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -103,8 +103,11 @@ struct s3c_fb_variant {
  * struct s3c_fb_win_variant
  * @has_osd_c: Set if has OSD C register.
  * @has_osd_d: Set if has OSD D register.
+ * @has_osd_alpha: Set if can change alpha transparency for a window.
  * @palette_sz: Size of palette in entries.
  * @palette_16bpp: Set if palette is 16bits wide.
+ * @osd_size_off: If != 0, supports setting up OSD for a window; the 
appropriate
+ *register is located at the given offset from OSD_BASE.
  * @valid_bpp: 1 bit per BPP setting to show valid bits-per-pixel.
  *
  * valid_bpp bit x is set if (x+1)BPP is supported.
@@ -112,7 +115,9 @@ struct s3c_fb_variant {
 struct s3c_fb_win_variant {
unsigned inthas_osd_c:1;
unsigned inthas_osd_d:1;
+   unsigned inthas_osd_alpha:1;
unsigned intpalette_16bpp:1;
+   unsigned short  osd_size_off;
unsigned short  palette_sz;
u32 valid_bpp;
 };
@@ -365,6 +370,36 @@ static int s3c_fb_align_word(unsigned int bpp, unsigned 
int pix)
 }
 
 /**
+ * vidosd_set_size() - set OSD size for a window
+ *
+ * @win: the window to set OSD size for
+ * @size: OSD size register value
+ */
+static void vidosd_set_size(struct s3c_fb_win *win, u32 size)
+{
+   struct s3c_fb *sfb = win-parent;
+
+   /* OSD can be set up if osd_size_off != 0 for this window */
+   if (win-variant.osd_size_off)
+   writel(size, sfb-regs + OSD_BASE(win-index, sfb-variant)
+   + win-variant.osd_size_off);
+}
+
+/**
+ * vidosd_set_alpha() - set alpha transparency for a window
+ *
+ * @win: the window to set OSD size for
+ * @alpha: alpha register value
+ */
+static void vidosd_set_alpha(struct s3c_fb_win *win, u32 alpha)
+{
+   struct s3c_fb *sfb = win-parent;
+
+   if (win-variant.has_osd_alpha)
+   writel(alpha, sfb-regs + VIDOSD_C(win-index, sfb-variant));
+}
+
+/**
  * shadow_protect_win() - disable updating values from shadow registers at 
vsync
  *
  * @win: window to protect registers for
@@ -408,7 +443,7 @@ static int s3c_fb_set_par(struct fb_info *info)
void __iomem *regs = sfb-regs;
void __iomem *buf = regs;
int win_no = win-index;
-   u32 osdc_data = 0;
+   u32 alpha = 0;
u32 data;
u32 pagewidth;
int clkdiv;
@@ -511,15 +546,12 @@ static int s3c_fb_set_par(struct fb_info *info)
 
data = var-xres * var-yres;
 
-   osdc_data = VIDISD14C_ALPHA1_R(0xf) |
+   alpha = VIDISD14C_ALPHA1_R(0xf) |
VIDISD14C_ALPHA1_G(0xf) |
VIDISD14C_ALPHA1_B(0xf);
 
-   if (win-variant.has_osd_d) {
-   writel(data, regs + VIDOSD_D(win_no, sfb-variant));
-   writel(osdc_data, regs + VIDOSD_C(win_no, sfb-variant));
-   } else
-   writel(data, regs + VIDOSD_C(win_no, sfb-variant));
+   vidosd_set_alpha(win, alpha);
+   vidosd_set_size(win, data);
 
data = WINCONx_ENWIN;
 
@@ -1442,12 +1474,15 @@ static int s3c_fb_resume(struct platform_device *pdev)
 static struct s3c_fb_win_variant s3c_fb_data_64xx_wins[] __devinitdata = {
[0] = {
.has_osd_c  = 1,
+   .osd_size_off   = 0x8,
.palette_sz = 256,
.valid_bpp  = VALID_BPP1248 | VALID_BPP(16) | VALID_BPP(24),
},
[1] = {
.has_osd_c  = 1,
.has_osd_d  = 1,
+   .osd_size_off   = 0x12,
+   .has_osd_alpha  = 1,
.palette_sz = 256,
.valid_bpp  = (VALID_BPP1248 | VALID_BPP(16) |
   VALID_BPP(18) | VALID_BPP(19) |
@@ -1456,6 +1491,8 @@ static struct s3c_fb_win_variant s3c_fb_data_64xx_wins[] 
__devinitdata = {
[2] = {
.has_osd_c  = 1,
.has_osd_d  = 1,
+   .osd_size_off   = 0x12,
+   .has_osd_alpha  = 1,
.palette_sz = 16,
.palette_16bpp  = 1,
.valid_bpp  = (VALID_BPP1248 | VALID_BPP(16) |
@@ -1464,6 +1501,7 @@ static struct s3c_fb_win_variant s3c_fb_data_64xx_wins[] 
__devinitdata = {
},
[3] = {
.has_osd_c  = 1,
+   .has_osd_alpha  = 1,
.palette_sz = 16,
.palette_16bpp  = 1,
.valid_bpp  = (VALID_BPP124  | 

[PATCH 13/19] s3c-fb: Add wait for VSYNC ioctl

2010-07-09 Thread Pawel Osciak
Add VSYNC interrupt support and an ioctl that allows waiting for it.
Interrupts are turned on only when needed.

Signed-off-by: Pawel Osciak p.osc...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 arch/arm/plat-samsung/include/plat/regs-fb.h |1 +
 drivers/video/s3c-fb.c   |  166 +-
 2 files changed, 166 insertions(+), 1 deletions(-)

diff --git a/arch/arm/plat-samsung/include/plat/regs-fb.h 
b/arch/arm/plat-samsung/include/plat/regs-fb.h
index dbb6c0a..564594e 100644
--- a/arch/arm/plat-samsung/include/plat/regs-fb.h
+++ b/arch/arm/plat-samsung/include/plat/regs-fb.h
@@ -300,6 +300,7 @@
 #define VIDINTCON0_FRAMESEL0_FRONTPORCH(0x3  15)
 
 #define VIDINTCON0_FRAMESEL1   (1  13)
+#define VIDINTCON0_FRAMESEL1_MASK  (0x3  13)
 #define VIDINTCON0_FRAMESEL1_NONE  (0x0  13)
 #define VIDINTCON0_FRAMESEL1_BACKPORCH (0x1  13)
 #define VIDINTCON0_FRAMESEL1_VSYNC (0x2  13)
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index de427d9..2e82adf 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -21,6 +21,8 @@
 #include linux/clk.h
 #include linux/fb.h
 #include linux/io.h
+#include linux/uaccess.h
+#include linux/interrupt.h
 
 #include mach/map.h
 #include plat/regs-fb-v4.h
@@ -48,6 +50,11 @@
__raw_writel(v, r); } while(0)
 #endif /* FB_S3C_DEBUG_REGWRITE */
 
+/* irq_flags bits */
+#define S3C_FB_VSYNC_IRQ_EN0
+
+#define VSYNC_TIMEOUT_MSEC 50
+
 struct s3c_fb;
 
 #define VALID_BPP(x) (1  ((x) - 1))
@@ -156,6 +163,16 @@ struct s3c_fb_win {
 };
 
 /**
+ * struct s3c_fb_vsync - vsync information
+ * @wait:  a queue for processes waiting for vsync
+ * @count: vsync interrupt count
+ */
+struct s3c_fb_vsync {
+   wait_queue_head_t   wait;
+   unsigned intcount;
+};
+
+/**
  * struct s3c_fb - overall hardware state of the hardware
  * @dev: The device that we bound to, for printing, etc.
  * @regs_res: The resource we claimed for the IO registers.
@@ -165,6 +182,9 @@ struct s3c_fb_win {
  * @enabled: A bitmask of enabled hardware windows.
  * @pdata: The platform configuration data passed with the device.
  * @windows: The hardware windows that have been claimed.
+ * @irq_no: IRQ line number
+ * @irq_flags: irq flags
+ * @vsync_info: VSYNC-related information (count, queues...)
  */
 struct s3c_fb {
struct device   *dev;
@@ -177,6 +197,10 @@ struct s3c_fb {
 
struct s3c_fb_platdata  *pdata;
struct s3c_fb_win   *windows[S3C_FB_MAX_WIN];
+
+   int  irq_no;
+   unsigned longirq_flags;
+   struct s3c_fb_vsync  vsync_info;
 };
 
 /**
@@ -798,6 +822,124 @@ static int s3c_fb_pan_display(struct fb_var_screeninfo 
*var,
return 0;
 }
 
+/**
+ * s3c_fb_enable_irq() - enable framebuffer interrupts
+ * @sfb: main hardware state
+ */
+static void s3c_fb_enable_irq(struct s3c_fb *sfb)
+{
+   void __iomem *regs = sfb-regs;
+   u32 irq_ctrl_reg;
+
+   if (!test_and_set_bit(S3C_FB_VSYNC_IRQ_EN, sfb-irq_flags)) {
+   /* IRQ disabled, enable it */
+   irq_ctrl_reg = readl(regs + VIDINTCON0);
+
+   irq_ctrl_reg |= VIDINTCON0_INT_ENABLE;
+   irq_ctrl_reg |= VIDINTCON0_INT_FRAME;
+
+   irq_ctrl_reg = ~VIDINTCON0_FRAMESEL0_MASK;
+   irq_ctrl_reg |= VIDINTCON0_FRAMESEL0_VSYNC;
+   irq_ctrl_reg = ~VIDINTCON0_FRAMESEL1_MASK;
+   irq_ctrl_reg |= VIDINTCON0_FRAMESEL1_NONE;
+
+   writel(irq_ctrl_reg, regs + VIDINTCON0);
+   }
+}
+
+/**
+ * s3c_fb_disable_irq() - disable framebuffer interrupts
+ * @sfb: main hardware state
+ */
+static void s3c_fb_disable_irq(struct s3c_fb *sfb)
+{
+   void __iomem *regs = sfb-regs;
+   u32 irq_ctrl_reg;
+
+   if (test_and_clear_bit(S3C_FB_VSYNC_IRQ_EN, sfb-irq_flags)) {
+   /* IRQ enabled, disable it */
+   irq_ctrl_reg = readl(regs + VIDINTCON0);
+
+   irq_ctrl_reg = ~VIDINTCON0_INT_FRAME;
+   irq_ctrl_reg = ~VIDINTCON0_INT_ENABLE;
+
+   writel(irq_ctrl_reg, regs + VIDINTCON0);
+   }
+}
+
+static irqreturn_t s3c_fb_irq(int irq, void *dev_id)
+{
+   struct s3c_fb *sfb = dev_id;
+   void __iomem  *regs = sfb-regs;
+   u32 irq_sts_reg;
+
+   irq_sts_reg = readl(regs + VIDINTCON1);
+
+   if (irq_sts_reg  VIDINTCON1_INT_FRAME) {
+
+   /* VSYNC interrupt, accept it */
+   writel(VIDINTCON1_INT_FRAME, regs + VIDINTCON1);
+
+   sfb-vsync_info.count++;
+   wake_up_interruptible(sfb-vsync_info.wait);
+   }
+
+   /* We only support waiting for VSYNC for now, so it's safe
+* to always disable irqs here.
+*/
+   s3c_fb_disable_irq(sfb);
+
+   return IRQ_HANDLED;
+}
+
+/**
+ * s3c_fb_wait_for_vsync() - sleep until next VSYNC 

[PATCH 05/19] s3c-fb: Initial move to unifying the header files

2010-07-09 Thread Pawel Osciak
From: Ben Dooks ben-li...@fluff.org

Remove the various header files that configure this driver and use the
platform device name to select the correct configuration at probe time.

Currently this does not remove the header files, only updates the driver
and the relevant platform files.

Signed-off-by: Ben Dooks ben-li...@fluff.org
Signed-off-by: Pawel Osciak p.osc...@samsung.com
---
 arch/arm/mach-s3c64xx/include/mach/regs-fb.h|   20 ---
 arch/arm/mach-s5pc100/include/mach/regs-fb.h|   34 
 arch/arm/plat-samsung/include/plat/regs-fb-v4.h |   36 
 drivers/video/s3c-fb.c  |  208 ---
 4 files changed, 180 insertions(+), 118 deletions(-)

diff --git a/arch/arm/mach-s3c64xx/include/mach/regs-fb.h 
b/arch/arm/mach-s3c64xx/include/mach/regs-fb.h
index f566115..a06ee0a 100644
--- a/arch/arm/mach-s3c64xx/include/mach/regs-fb.h
+++ b/arch/arm/mach-s3c64xx/include/mach/regs-fb.h
@@ -18,24 +18,4 @@
 
 #include plat/regs-fb-v4.h
 
-/* Palette registers */
-#define WIN2_PAL(_entry)   (0x300 + ((_entry) * 2))
-#define WIN3_PAL(_entry)   (0x320 + ((_entry) * 2))
-#define WIN4_PAL(_entry)   (0x340 + ((_entry) * 2))
-#define WIN0_PAL(_entry)   (0x400 + ((_entry) * 4))
-#define WIN1_PAL(_entry)   (0x800 + ((_entry) * 4))
-
-static inline unsigned int s3c_fb_pal_reg(unsigned int window, int reg)
-{
-   switch (window) {
-   case 0: return WIN0_PAL(reg);
-   case 1: return WIN1_PAL(reg);
-   case 2: return WIN2_PAL(reg);
-   case 3: return WIN3_PAL(reg);
-   case 4: return WIN4_PAL(reg);
-   }
-
-   BUG();
-}
-
 #endif /* __ASM_ARCH_MACH_REGS_FB_H */
diff --git a/arch/arm/mach-s5pc100/include/mach/regs-fb.h 
b/arch/arm/mach-s5pc100/include/mach/regs-fb.h
index 1732cd2..4be4cc9 100644
--- a/arch/arm/mach-s5pc100/include/mach/regs-fb.h
+++ b/arch/arm/mach-s5pc100/include/mach/regs-fb.h
@@ -100,40 +100,6 @@
 #define BLENDCON   (0x260)
 #define BLENDCON_8BIT_ALPHA(1  0)
 
-/* Per-window palette base addresses (start of palette memory).
- * Each window palette area consists of 256 32-bit entries.
- * START is the first address (entry 0th), END is the address of 255th entry.
- */
-#define WIN0_PAL_BASE  (0x2400)
-#define WIN0_PAL_END   (0x27fc)
-#define WIN1_PAL_BASE  (0x2800)
-#define WIN1_PAL_END   (0x2bfc)
-#define WIN2_PAL_BASE  (0x2c00)
-#define WIN2_PAL_END   (0x2ffc)
-#define WIN3_PAL_BASE  (0x3000)
-#define WIN3_PAL_END   (0x33fc)
-#define WIN4_PAL_BASE  (0x3400)
-#define WIN4_PAL_END   (0x37fc)
-
-#define WIN0_PAL(_entry)   (WIN0_PAL_BASE + ((_entry) * 4))
-#define WIN1_PAL(_entry)   (WIN1_PAL_BASE + ((_entry) * 4))
-#define WIN2_PAL(_entry)   (WIN2_PAL_BASE + ((_entry) * 4))
-#define WIN3_PAL(_entry)   (WIN3_PAL_BASE + ((_entry) * 4))
-#define WIN4_PAL(_entry)   (WIN4_PAL_BASE + ((_entry) * 4))
-
-static inline unsigned int s3c_fb_pal_reg(unsigned int window, int reg)
-{
-   switch (window) {
-   case 0: return WIN0_PAL(reg);
-   case 1: return WIN1_PAL(reg);
-   case 2: return WIN2_PAL(reg);
-   case 3: return WIN3_PAL(reg);
-   case 4: return WIN4_PAL(reg);
-   }
-
-   BUG();
-}
-
 
 #endif /* __ASM_ARCH_REGS_FB_H */
 
diff --git a/arch/arm/plat-samsung/include/plat/regs-fb-v4.h 
b/arch/arm/plat-samsung/include/plat/regs-fb-v4.h
index 0f43599..0477e8a 100644
--- a/arch/arm/plat-samsung/include/plat/regs-fb-v4.h
+++ b/arch/arm/plat-samsung/include/plat/regs-fb-v4.h
@@ -148,42 +148,6 @@
  * compiled.
 */
 
-/* return true if window _win has OSD register D */
-#define s3c_fb_has_osd_d(_win) ((_win) != 4  (_win) != 0)
-
-static inline unsigned int s3c_fb_win_pal_size(unsigned int win)
-{
-   if (win  2)
-   return 256;
-   if (win  4)
-   return 16;
-   if (win == 4)
-   return 4;
-
-   BUG();  /* shouldn't get here */
-}
-
-static inline int s3c_fb_validate_win_bpp(unsigned int win, unsigned int bpp)
-{
-   /* all windows can do 1/2 bpp */
-
-   if ((bpp == 25 || bpp == 19)  win == 0)
-   return 0;   /* win 0 does not have 19 or 25bpp modes */
-
-   if (bpp == 4  win == 4)
-   return 0;
-
-   if (bpp == 8  (win = 3))
-   return 0;   /* win 3/4 cannot do 8bpp in any mode */
-
-   return 1;
-}
-
-static inline int s3c_fb_pal_is16(unsigned int window)
-{
-   return window  1;
-}
-
 struct s3c_fb_palette {

[PATCH 15/19] s3c-fb: Add SHADOWCON shadow register locking support for S5PV210

2010-07-09 Thread Pawel Osciak
S5PV210 allows per-window locking of register value updates from shadow
registers.

Signed-off-by: Pawel Osciak p.osc...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 arch/arm/plat-samsung/include/plat/regs-fb.h |3 ++
 drivers/video/s3c-fb.c   |   40 +++--
 2 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/arch/arm/plat-samsung/include/plat/regs-fb.h 
b/arch/arm/plat-samsung/include/plat/regs-fb.h
index 564594e..4359918 100644
--- a/arch/arm/plat-samsung/include/plat/regs-fb.h
+++ b/arch/arm/plat-samsung/include/plat/regs-fb.h
@@ -220,6 +220,9 @@
 #define WINCON1_BPPMODE_25BPP_A1888(0xd  2)
 #define WINCON1_BPPMODE_28BPP_A4888(0xd  2)
 
+/* S5PV210 */
+#define SHADOWCON  (0x34)
+#define SHADOWCON_WINx_PROTECT(_win)   (1  (10 + (_win)))
 
 #define VIDOSDxA_TOPLEFT_X_MASK(0x7ff  11)
 #define VIDOSDxA_TOPLEFT_X_SHIFT   (11)
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 6cbddc4..f767911 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -79,6 +79,7 @@ struct s3c_fb;
  * @osd: The base for the OSD registers.
  * @palette: Address of palette memory, or 0 if none.
  * @has_prtcon: Set if has PRTCON register.
+ * @has_shadowcon: Set if has SHADOWCON register.
  */
 struct s3c_fb_variant {
unsigned intis_2443:1;
@@ -95,6 +96,7 @@ struct s3c_fb_variant {
unsigned short  palette[S3C_FB_MAX_WIN];
 
unsigned inthas_prtcon:1;
+   unsigned inthas_shadowcon:1;
 };
 
 /**
@@ -363,6 +365,36 @@ static int s3c_fb_align_word(unsigned int bpp, unsigned 
int pix)
 }
 
 /**
+ * shadow_protect_win() - disable updating values from shadow registers at 
vsync
+ *
+ * @win: window to protect registers for
+ * @protect: 1 to protect (disable updates)
+ */
+static void shadow_protect_win(struct s3c_fb_win *win, bool protect)
+{
+   struct s3c_fb *sfb = win-parent;
+   u32 reg;
+
+   if (protect) {
+   if (sfb-variant.has_prtcon) {
+   writel(PRTCON_PROTECT, sfb-regs + PRTCON);
+   } else if (sfb-variant.has_shadowcon) {
+   reg = readl(sfb-regs + SHADOWCON);
+   writel(reg | SHADOWCON_WINx_PROTECT(win-index),
+   sfb-regs + SHADOWCON);
+   }
+   } else {
+   if (sfb-variant.has_prtcon) {
+   writel(0, sfb-regs + PRTCON);
+   } else if (sfb-variant.has_shadowcon) {
+   reg = readl(sfb-regs + SHADOWCON);
+   writel(reg  ~SHADOWCON_WINx_PROTECT(win-index),
+   sfb-regs + SHADOWCON);
+   }
+   }
+}
+
+/**
  * s3c_fb_set_par() - framebuffer request to set new framebuffer state.
  * @info: The framebuffer to change.
  *
@@ -810,14 +842,12 @@ static int s3c_fb_pan_display(struct fb_var_screeninfo 
*var,
 
/* Temporarily turn off per-vsync update from shadow registers until
 * both start and end addresses are updated to prevent corruption */
-   if (sfb-variant.has_prtcon)
-   writel(PRTCON_PROTECT, sfb-regs + PRTCON);
+   shadow_protect_win(win, 1);
 
writel(info-fix.smem_start + start_boff, buf + sfb-variant.buf_start);
writel(info-fix.smem_start + end_boff, buf + sfb-variant.buf_end);
 
-   if (sfb-variant.has_prtcon)
-   writel(0, sfb-regs + PRTCON);
+   shadow_protect_win(win, 0);
 
return 0;
 }
@@ -1530,6 +1560,8 @@ static struct s3c_fb_driverdata s3c_fb_data_s5pv210 
__devinitdata = {
[3] = 0x3000,
[4] = 0x3400,
},
+
+   .has_shadowcon  = 1,
},
.win[0] = s3c_fb_data_64xx_wins[0],
.win[1] = s3c_fb_data_64xx_wins[1],
-- 
1.7.1.569.g6f426

--
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 06/11] USB: s3c-hsotg: Only load packet per fifo write

2010-07-09 Thread Sergei Shtylyov

Hello.

Ben Dooks wrote:


Limit the IN FIFO write to a single packet per attempt at writing,
as per the specifications and ensure that we don't return fifo-full
so that we can continue writing packets if we have the space.



Signed-off-by: Ben Dooks ben-li...@fluff.org

[...]

diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index 4196e37..df6a39d 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -538,6 +538,17 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
if (can_write  512)
can_write = 512;
 
+	/* limit the write to one max-packet size worth of data, but allow

+* the transfer to return that it did not run out of fifo space
+* doing it. */


  According to CodingStyle, the preferred style for the multi-line commnets 
is this:


/*
 * bla
 * bla
 */

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 01/19] s3c-fb: Change to depending on CONFIG_S3C_FB_DEV

2010-07-09 Thread Kukjin Kim
Pawel Osciak wrote:
 
 From: Ben Dooks ben-li...@fluff.org
 
 As suggested by Marek Szyprowski, we should make the driver depend on
 the configuration currently being used to build the platform device
 into the kernel.
 
 Signed-off-by: Ben Dooks ben-li...@fluff.org
 Signed-off-by: Pawel Osciak p.osc...@samsung.com

Actually, already submitted by Ben Dooks.
http://lists.infradead.org/pipermail/linux-arm-kernel/2010-May/015616.html

So...I'm not sure adding your signedoff and re-submitting are right.

In my opinion, it's enough to add comments which includes information about
that without re-submitting.

 ---
  drivers/video/Kconfig |2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
 diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
 index 3d94a14..858f1ca 100644
 --- a/drivers/video/Kconfig
 +++ b/drivers/video/Kconfig
 @@ -1930,7 +1930,7 @@ config FB_TMIO_ACCELL
 
  config FB_S3C
   tristate Samsung S3C framebuffer support
 - depends on FB  ARCH_S3C64XX
 + depends on FB  S3C_DEV_FB
   select FB_CFB_FILLRECT
   select FB_CFB_COPYAREA
   select FB_CFB_IMAGEBLIT
 --

Thanks.

Best regards,
Kgene.
--
Kukjin Kim kgene@samsung.com, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

--
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 01/19] s3c-fb: Change to depending on CONFIG_S3C_FB_DEV

2010-07-09 Thread Pawel Osciak
Kukjin Kim kgene@samsung.com:
Pawel Osciak wrote:

 From: Ben Dooks ben-li...@fluff.org

 As suggested by Marek Szyprowski, we should make the driver depend on
 the configuration currently being used to build the platform device
 into the kernel.

 Signed-off-by: Ben Dooks ben-li...@fluff.org
 Signed-off-by: Pawel Osciak p.osc...@samsung.com

Actually, already submitted by Ben Dooks.
http://lists.infradead.org/pipermail/linux-arm-kernel/2010-May/015616.html

So...I'm not sure adding your signedoff and re-submitting are right.

In my opinion, it's enough to add comments which includes information about
that without re-submitting.


Adding signoffs is a normal procedure when submitting somebody else's patches
with their permission. The problem here is that I wasn't aware of them being
already posted, there must've been a miscommunication between me and Ben when
I asked him if it was ok to submit his patches along with mine.
Sorry Ben!

Anyway, thank you for pointing this out.  Of course, my sign-offs can be
removed from the first 7 patches.


Best regards
--
Pawel Osciak
Linux Platform Group
Samsung Poland RD Center


 ---
  drivers/video/Kconfig |2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)

 diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
 index 3d94a14..858f1ca 100644
 --- a/drivers/video/Kconfig
 +++ b/drivers/video/Kconfig
 @@ -1930,7 +1930,7 @@ config FB_TMIO_ACCELL

  config FB_S3C
  tristate Samsung S3C framebuffer support
 -depends on FB  ARCH_S3C64XX
 +depends on FB  S3C_DEV_FB
  select FB_CFB_FILLRECT
  select FB_CFB_COPYAREA
  select FB_CFB_IMAGEBLIT
 --

Thanks.

Best regards,
Kgene.
--
Kukjin Kim kgene@samsung.com, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.


--
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 v4 0/19] Various s3c-fb updates

2010-07-09 Thread Kukjin Kim
Pawel Osciak wrote:
 
 Hello,
 
Hi,

 This series contains various Samsung framebuffer driver updates.
 I believe that it has reached the stage of being ready for merging.
 
 The main highlights of this series are:
 - Ben Dook's unification of the plethora of Samsung framebuffer header
 files with configuration selection at probe time, machine naming;
 - palette setup code moved to the main driver;
 - added ability to wait for VSYNC and to pan the display;
 - better support for new features found in S5PV210 SoCs, including
   shadow register handling and DMA channel control,
 - various small changes,
 - a number of bugs has also been fixed.
 
 
 Changes in v4:
 - corrected fb_dealloc_cmap condition on window probe failure
 - fixed a race condition in wait for VSYNC ioctl
 - removed has_osd_size flag from window variant; osd_size_off != 0
   now implies has_osd_size = 1
 - cosmetic changes, as suggested by Ben Dooks, and more comments
 
 Changes in v3:
 - new patches:
   * fixing a section mismatch error
   * adding support for DMA channel control (enable/disable) found on
S5PV210
   * disabling shadow register updates during set_par
 
 - unified function for disabling register updates
 - no need to initialize names for 64xx-type framebuffers (is being set as
   default anyway)
 - updated to the new version of Ben's branch
 - minor fixes
 
 Changes in v2:
 - added SHADOWCON register support found on S3C6410 and S5PC100 for
 disabling
   shadow register updates
 - fixed osd and alpha register handling (different configurations for
different
   machines)
 
 The series includes:
 
 [PATCH 01/19] s3c-fb: Change to depending on CONFIG_S3C_FB_DEV
 [PATCH 02/19] s3c-fb: add default window feature.
 [PATCH 03/19] s3c-fb: fixed distortedness situation for the mode more then
24bpp.
 [PATCH 04/19] s3c-fb: only init window colour key controls for windows
with
 blending
 [PATCH 05/19] s3c-fb: Initial move to unifying the header files
 [PATCH 06/19] s3c-fb: udpate to support s3c2416/s3c2443 style hardware
 [PATCH 07/19] s3c-fb: Integrate palette setup code into main driver

Actually, already submitted 1st and 4th to 7th patches in here by Ben Dooks.
http://lists.infradead.org/pipermail/linux-arm-kernel/2010-May/015614.html
threads

So I think no need to re-submit them..and just need to add comments about
that.

 [PATCH 08/19] s3c-fb: Fix various null references on framebuffer memory
alloc
 failure
 [PATCH 09/19] s3c-fb: Correct FRAMESEL1 bitfield defines for VIDINTCON0
 register
 [PATCH 10/19] s3c-fb: Separate S5PC100 and S5PV210 framebuffer driver data
 structures
 [PATCH 11/19] s3c-fb: Add device name initialization
 [PATCH 12/19] s3c-fb: Add support for display panning
 [PATCH 13/19] s3c-fb: Add wait for VSYNC ioctl
 [PATCH 14/19] s3c-fb: window 3 of 64xx+ does not have an osd_d register
 [PATCH 15/19] s3c-fb: Add SHADOWCON shadow register locking support for
 S5PV210
 [PATCH 16/19] s3c-fb: Correct window osd size and alpha register handling
 [PATCH 17/19] s3c-fb: Protect window-specific registers during updates
 [PATCH 18/19] s3c-fb: fix section mismatch
 [PATCH 19/19] s3c-fb: Add support for DMA channel control on S5PV210
 


Thanks.

Best regards,
Kgene.
--
Kukjin Kim kgene@samsung.com, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

--
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] sdhci-s3c: add support for the non standard minimal clock value

2010-07-09 Thread Andrew Morton
On Wed, 16 Jun 2010 08:49:55 +0200
Marek Szyprowski m.szyprow...@samsung.com wrote:

 S3C SDHCI host controller can change the source for generating mmc clock.
 By default host bus clock is used, what causes some problems on machines
 with 133MHz bus, because the SDHCI divider cannot be as high get proper
 clock value for identification mode. This is not a problem for the
 controller, because it can generate lower frequencies from other clock
 sources. This patch adds a new quirk to SDHCI driver to calculate the
 minimal supported clock frequency.
 
 This fixes the flood of the following warnings on Samsung S5PV210 SoCs:
 mmc0: Minimum clock frequency too high for identification mode
 
 Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
 Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  drivers/mmc/host/sdhci-of-esdhc.c |1 +
  drivers/mmc/host/sdhci-s3c.c  |   29 +
  drivers/mmc/host/sdhci.c  |2 +-
  drivers/mmc/host/sdhci.h  |2 ++
  4 files changed, 33 insertions(+), 1 deletions(-)

This patch doesn't know about Anton's
sdhci-pltfm-add-support-for-cns3xxx-soc-devices.patch.  Please check my fixup:

--- 
a/drivers/mmc/host/sdhci-cns3xxx.c~sdhci-s3c-add-support-for-the-non-standard-minimal-clock-value-fix
+++ a/drivers/mmc/host/sdhci-cns3xxx.c
@@ -93,5 +93,6 @@ struct sdhci_pltfm_data sdhci_cns3xxx_pd
  SDHCI_QUIRK_INVERTED_WRITE_PROTECT |
  SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
  SDHCI_QUIRK_BROKEN_TIMEOUT_VAL |
+ SDHCI_QUIRK_NONSTANDARD_MINCLOCK |
  SDHCI_QUIRK_NONSTANDARD_CLOCK,
 };


--
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] sdhci-s3c: add support for new card detection methods

2010-07-09 Thread Andrew Morton
On Wed, 16 Jun 2010 08:49:56 +0200
Marek Szyprowski m.szyprow...@samsung.com wrote:

 On some Samsung SoCs not all SDHCI controllers have card detect (CD)
 line. For some embedded designs it is not even needed, because ususally
 the device (like SDIO flash memory or wifi controller) is permanently
 wired to the controller. There are also systems which have a card detect
 line connected to some of the external interrupt lines or the presence
 of the card depends on some other actions (like enabling a power
 regulator).
 
 This patch adds support for all these cases. The following card
 detection methods are possible:
 
 1. internal sdhci host card detect line
 2. external event
 3. external gpio interrupt
 4. no card detect line, controller will poll for the card
 5. no card detect line, card is permanently wired to the controller
 (once detected host won't poll it any more)
 
 By default, all existing code would use method #1, what is compatible
 with the previous version of the driver.
 
 In case of external event, two callbacks must be provided in platdata:
 ext_cd_init and ext_cd_cleanup. Both of them get a callback to a
 function that notifies the s3c-sdhci host contoller as their argument.
 That callback function should be called from the even dispatcher to let
 host notice the card insertion/removal.
 
 In case of external gpio interrupt, a gpio pin number must be provided
 in platdata (ext_cd_gpio parameter), as well as the information about
 the polarity of that gpio pin (ext_cd_gpio_invert). By default
 (ext_cd_gpio_invert == 0) gpio value 0 means 'card has been removed',
 but this can be changed to 'card has been removed' when
 ext_cd_gpio_invert == 1.
 
 This patch adds changes to sdhci-s3c driver.
 
 ...
  
 +static void sdhci_s3c_notify_change(struct platform_device *dev, int state)
 +{
 + struct sdhci_host *host;
 + unsigned long flags;
 +
 + local_irq_save(flags);
 + host = platform_get_drvdata(dev);
 + if (host) {
 + if (state) {
 + dev_dbg(dev-dev, card inserted.\n);
 + host-flags = ~SDHCI_DEVICE_DEAD;
 + host-quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
 + tasklet_schedule(host-card_tasklet);
 + } else {
 + dev_dbg(dev-dev, card removed.\n);
 + host-flags |= SDHCI_DEVICE_DEAD;
 + host-quirks = ~SDHCI_QUIRK_BROKEN_CARD_DETECTION;
 + tasklet_schedule(host-card_tasklet);
 + }
 + }
 + local_irq_restore(flags);
 +}

What's the local_irq_save() there for?

Presumably it is for local-cpu-only protection of some data.  But which
data is it there to protect?

It doesn't provide protection on SMP systems and if I'm guessing
correctly about why it was added, it would be much better to use
spin_lock_irq[save]() here.  That sets a better example, it means the
code has a hope of working correctly on SMP systems and will devolve to
local_irq_save() on UP kernels anyway.


--
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] sdhci-s3c: add missing remove function

2010-07-09 Thread Andrew Morton
On Wed, 16 Jun 2010 08:49:54 +0200
Marek Szyprowski m.szyprow...@samsung.com wrote:

 Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com
 Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  drivers/mmc/host/sdhci-s3c.c |   20 
  1 files changed, 20 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
 index af21792..ad30f07 100644
 --- a/drivers/mmc/host/sdhci-s3c.c
 +++ b/drivers/mmc/host/sdhci-s3c.c
 @@ -365,6 +365,26 @@ static int __devinit sdhci_s3c_probe(struct 
 platform_device *pdev)
  
  static int __devexit sdhci_s3c_remove(struct platform_device *pdev)
  {
 + struct sdhci_host *host =  platform_get_drvdata(pdev);
 + struct sdhci_s3c *sc = sdhci_priv(host);
 + int ptr;
 +
 + sdhci_remove_host(host, 1);
 +
 + for (ptr = 0; ptr  3; ptr++) {
 + clk_disable(sc-clk_bus[ptr]);
 + clk_put(sc-clk_bus[ptr]);
 + }
 + clk_disable(sc-clk_io);
 + clk_put(sc-clk_io);
 +
 + iounmap(host-ioaddr);
 + release_resource(sc-ioarea);
 + kfree(sc-ioarea);
 +
 + sdhci_free_host(host);
 + platform_set_drvdata(pdev, NULL);
 +
   return 0;
  }

This looks like it fixes a pretty serious omission.  What happens if
the user rmmods this driver on a 2.6.34 kernel?

Because I have a suspicion that this fix should be backported into
2.6.34.x?

--
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