* [GIT PULL] fbdev changes for 3.13
From: Tomi Valkeinen @ 2013-11-13 12:08 UTC (permalink / raw)
To: Linus Torvalds
Cc: linux-fbdev, linux-kernel, Jean-Christophe PLAGNIOL-VILLARD
[-- Attachment #1: Type: text/plain, Size: 21565 bytes --]
Hi Linus,
The following changes since commit 272b98c6455f00884f0350f775c5342358ebb73f:
Linux 3.12-rc1 (2013-09-16 16:17:51 -0400)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git tags/fbdev-3.13
for you to fetch changes up to 3a41c5dbe8bc396a7fb16ca8739e945bb003342e:
fb: reorder the lock sequence to fix potential dead lock (2013-11-11 15:52:59 +0200)
----------------------------------------------------------------
fbdev changes for 3.13
Nothing particularly stands out in this pull request. The biggest part of the
changes are cleanups.
Maybe one fix to mention is the "fb: reorder the lock sequence to fix potential
dead lock" which hopefully fixes the fb locking issues reported by multiple
persons.
There are also a few commits that have changes to arch/arm/mach-at91 and
arch/avr32, which have been acked by the maintainers.
----------------------------------------------------------------
Archit Taneja (10):
omapdss: HDMI: create a Wrapper library
omapdss: HDMI: create a PLL library
omapdss: HDMI: create a PHY library
omapdss: HDMI: Use OMAP4 HDMI core functions directly and remove hdmi_ip_ops
omapdss: HDMI: remove hdmi_ip_data struct
omapdss: HDMI: Clean up the header files
omapdss: HDMI: add HDMI wrapper IRQ flags
omapdss: HDMI: Rename hdmi driver files to nicer names
omapdss: OMAP4: HDMI: remove unnecessary edid macros
omapdss: HDMI: move common functions to a separate file
David Herrmann (2):
simplefb: fix unmapping fb during destruction
simplefb: use write-combined remapping
Gerd Hoffmann (2):
hyperv-fb: add pci stub
hyperv-fb: add blanking support
Gu Zheng (1):
fb: reorder the lock sequence to fix potential dead lock
Guoqing Li (2):
video: mmp: rb swap setting update for mmp display
video: mmp: optimize some register setting code
Hanjun Guo (10):
Video / hecubafb: Use module_platform_driver() to simplify code
Video / bfin-t350mcqb-fb: Use module_platform_driver() to simplify code
Video / metronomefb: Use module_platform_driver() to simplify code
Video / jz4740_fb: Use module_platform_driver() to simplify code
Video / da8xx-fb: Use module_platform_driver() to simplify code
Video / cobalt_lcdfb: Use module_platform_driver() to simplify code
Video / broadsheetfb: Use module_platform_driver() to simplify code
Video / bf54x-lq043fb: Use module_platform_driver() to simplify code
Video / au1200fb: Use module_platform_driver() to simplify code
Video / au1100fb: Use module_platform_driver() to simplify code
James Bates (1):
efifb: prevent null-deref when iterating dmi_list
Jean-Christophe PLAGNIOL-VILLARD (4):
video: atmel_lcdfb: fix platform data struct
video: atmel_lcdfb: introduce atmel_lcdfb_power_control
video: atmel_lcdfb: pass the pdata as params
video: atmel_lcdfb: add device tree suport
Jett.Zhou (1):
ARM: mmp: remove the legacy rbswap setting for ttc_dkb platform
Jing Xiang (2):
video: mmp: calculate pitch value when fb set win
video: mmp: add pitch info in mmp_win structure
Jingoo Han (41):
video: au1100fb: Remove casting the return value which is a void pointer
video: arkfb: remove unnecessary pci_set_drvdata()
video: carminefb: remove unnecessary pci_set_drvdata()
video: cirrusfb: remove unnecessary pci_set_drvdata()
video: cyber2000fb: remove unnecessary pci_set_drvdata()
video: lxfb: remove unnecessary pci_set_drvdata()
video: gx1fb: remove unnecessary pci_set_drvdata()
video: gxfb: remove unnecessary pci_set_drvdata()
video: i740fb: remove unnecessary pci_set_drvdata()
video: i810fb: remove unnecessary pci_set_drvdata()
video: intelfb: remove unnecessary pci_set_drvdata()
video: kyrofb: remove unnecessary pci_set_drvdata()
video: mb862xxfb: remove unnecessary pci_set_drvdata()
video: neofb: remove unnecessary pci_set_drvdata()
video: pm2fb: remove unnecessary pci_set_drvdata()
video: pm3fb: remove unnecessary pci_set_drvdata()
video: s3fb: remove unnecessary pci_set_drvdata()
video: savagefb: remove unnecessary pci_set_drvdata()
video: sisfb: remove unnecessary pci_set_drvdata()
video: tdfxfb: remove unnecessary pci_set_drvdata()
video: tridentfb: remove unnecessary pci_set_drvdata()
video: vt8623fb: remove unnecessary pci_set_drvdata()
video: atmel_lcdfb: use dev_get_platdata()
video: mx3fb: use dev_get_platdata()
video: nuc900fb: use dev_get_platdata()
video: omapfb: use dev_get_platdata()
video: pxa168fb: use dev_get_platdata()
video: pxafb: use dev_get_platdata()
video: s3c2410: use dev_get_platdata()
video: sa1100fb: use dev_get_platdata()
video: sh_mobile_hdmi: use dev_get_platdata()
video: amba-clcd: use dev_get_platdata()
video: da8xx-fb: use dev_get_platdata()
video: ep93xx-fb: use dev_get_platdata()
video: imxfb: use dev_get_platdata()
video: mbxfb: use dev_get_platdata()
video: s1d13xxxfb: use dev_get_platdata()
video: s3c-fb: use dev_get_platdata()
video: simplefb: use dev_get_platdata()
video: tmiofb: use dev_get_platdata()
video: w100fb: use dev_get_platdata()
Joe Perches (4):
framebuffer: arkfb: Fix framebugger typo
framebuffer: Add fb_<level> convenience logging macros
framebuffer: Use fb_<level>
video: Remove unnecessary semicolons
Jon Mason (2):
aty128fb: Use pci_dev pm_cap
radeonfb: Use pci_dev pm_cap
Lars-Peter Clausen (2):
video: jz4740-fb: Fix LCD_CMD bit definitions
video: jz4740-fb: Use clk_prepare_enable/clk_disable_unprepare
Laurent Pinchart (2):
fbdev: shmobile-hdmi: Convert to clk_prepare/unprepare
fbdev: shmobile-lcdcfb: Convert to clk_prepare/unprepare
Manish Badarkhe (1):
video: da8xx-fb: remove unwanted define
Marek Belisko (1):
omapdss: Add new panel driver for Topolly td028ttec1 LCD.
Michal Simek (4):
video: amba-clcd: Remove unnecessary amba_set_drvdata()
video: xilinxfb: Use standard variable name convention
video: xilinxfb: Use devm_kzalloc instead of kzalloc
video: xilinxfb: Simplify error path
Peter Huewe (1):
video/matrox/matroxfb_maven: Use module_i2c_driver to register driver
Peter Senna Tschudin (1):
OMAPDSS: DISPC: Fix assignment of 0/1 to bool variables
Ricardo Neri (7):
OMAPDSS: HDMI: OMAP4: Complete register definitions for wrapper
OMAPDSS: HDMI: OMAP4: Complete dumping of wrapper registers
OMAPDSS: HDMI: OMAP4: Complete register definitions for DPLL
OMAPDSS: HDMI: OMAP4: Complete dumping of DPLL registers
OMAPDSS: HDMI: OMAP4: Rename the HDMI_CORE_CTRL1 register
OMAPDSS: HDMI: OMAP4: Complete register definitions for core
OMAPDSS: HDMI: OMAP4: Complete dumping of core registers
Richard Röjfors (1):
OMAPDSS: HDMI: Correctly compare timings
Roel Kluin (1):
OMAPDSS: Fix de_level in videomode_to_omap_video_timings()
Sachin Kamat (33):
video: grvga: Use module_platform_driver
backlight: l4f00242t03: Remove redundant spi_set_drvdata
backlight: tosa: Remove redundant spi_set_drvdata
video: udlfb: Use NULL instead of 0
video: smscufx: Use NULL instead of 0
video: da8xx-fb: Staticize reg_context
video: aty: Remove redundant break
video: kyro: Remove redundant break
video: uvesafb: Remove redundant NULL check
video: vfb: Remove incorrect check
video: cirrusfb: Remove incorrect checks
video: aty: Remove incorrect checks
video: riva: Remove incorrect checks
video: atmel_lcdfb: Remove redundant dev_set_drvdata
video: grvga: Remove redundant dev_set_drvdata
video: leo: Remove redundant dev_set_drvdata
video: mb862xx: Remove redundant dev_set_drvdata
video: amifb: Remove redundant dev_set_drvdata
video: bw2: Remove redundant dev_set_drvdata
video: cg14: Remove redundant dev_set_drvdata
video: cg3: Remove redundant dev_set_drvdata
video: cg6: Remove redundant dev_set_drvdata
video: ffb: Remove redundant dev_set_drvdata
video: p9100: Remove redundant dev_set_drvdata
video: platinumfb: Remove redundant dev_set_drvdata
video: sunxvr1000: Remove redundant dev_set_drvdata
video: tcx: Remove redundant dev_set_drvdata
video: xilinxfb: Remove redundant dev_set_drvdata
video: ssd1307fb: Remove redundant of_match_ptr
video: wm8505fb: Remove redundant of_match_ptr
video: wmt_ge_rops: Remove redundant of_match_ptr
video: wmt_ge_rops: Fix a trivial typo
video: exynos_mipi_dsi: Unlock the mutex before returning
Sangjung Woo (1):
fbdev: sh_mobile_hdmi: Use devm_kzalloc()
Stephen Rothwell (1):
video: xilinxfb: Fix for "Use standard variable name convention"
Thierry Reding (1):
radeon: Conditionally compile PM code
Tom Gundersen (1):
simplefb: print some info about the registered fb
Tomi Valkeinen (2):
OMAPDSS: DSI: fix perf measuring ifdefs
OMAPDSS: connector-dvi: fix releasing i2c_adapter
Wei Yongjun (1):
fbdev: fix error return code in metronomefb_probe()
.../devicetree/bindings/video/atmel,lcdc.txt | 75 ++
arch/arm/mach-at91/at91sam9261_devices.c | 6 +-
arch/arm/mach-at91/at91sam9263_devices.c | 6 +-
arch/arm/mach-at91/at91sam9g45_devices.c | 6 +-
arch/arm/mach-at91/at91sam9rl_devices.c | 6 +-
arch/arm/mach-at91/board-sam9261ek.c | 10 +-
arch/arm/mach-at91/board-sam9263ek.c | 6 +-
arch/arm/mach-at91/board-sam9m10g45ek.c | 4 +-
arch/arm/mach-at91/board-sam9rlek.c | 6 +-
arch/arm/mach-at91/board.h | 4 +-
arch/arm/mach-mmp/ttc_dkb.c | 4 +-
arch/avr32/boards/atngw100/evklcd10x.c | 8 +-
arch/avr32/boards/atngw100/mrmt.c | 4 +-
arch/avr32/boards/atstk1000/atstk1000.h | 2 +-
arch/avr32/boards/atstk1000/setup.c | 2 +-
arch/avr32/boards/favr-32/setup.c | 2 +-
arch/avr32/boards/hammerhead/setup.c | 2 +-
arch/avr32/boards/merisc/display.c | 2 +-
arch/avr32/boards/mimc200/setup.c | 4 +-
arch/avr32/mach-at32ap/at32ap700x.c | 8 +-
arch/avr32/mach-at32ap/include/mach/board.h | 4 +-
drivers/auxdisplay/cfag12864bfb.c | 3 +-
drivers/video/68328fb.c | 9 +-
drivers/video/Kconfig | 2 +
drivers/video/amba-clcd.c | 4 +-
drivers/video/amifb.c | 6 +-
drivers/video/arcfb.c | 8 +-
drivers/video/arkfb.c | 49 +-
drivers/video/asiliantfb.c | 4 +-
drivers/video/atafb.c | 7 +-
drivers/video/atmel_lcdfb.c | 344 ++++--
drivers/video/aty/aty128fb.c | 8 +-
drivers/video/aty/atyfb_base.c | 1 -
drivers/video/aty/radeon_base.c | 5 -
drivers/video/aty/radeon_pm.c | 22 +-
drivers/video/aty/radeonfb.h | 1 -
drivers/video/au1100fb.c | 16 +-
drivers/video/au1200fb.c | 16 +-
drivers/video/backlight/l4f00242t03.c | 1 -
drivers/video/backlight/tosa_lcd.c | 6 +-
drivers/video/bf54x-lq043fb.c | 14 +-
drivers/video/bfin-t350mcqb-fb.c | 14 +-
drivers/video/broadsheetfb.c | 19 +-
drivers/video/bw2.c | 2 -
drivers/video/carminefb.c | 4 +-
drivers/video/cfbimgblt.c | 2 +-
drivers/video/cg14.c | 6 +-
drivers/video/cg3.c | 2 -
drivers/video/cg6.c | 4 +-
drivers/video/cirrusfb.c | 6 -
drivers/video/cobalt_lcdfb.c | 17 +-
drivers/video/controlfb.c | 4 +-
drivers/video/cyber2000fb.c | 5 -
drivers/video/da8xx-fb.c | 21 +-
drivers/video/efifb.c | 7 +-
drivers/video/ep93xx-fb.c | 2 +-
drivers/video/exynos/exynos_mipi_dsi_common.c | 3 +-
drivers/video/fb-puv3.c | 5 +-
drivers/video/fbmem.c | 50 +-
drivers/video/fbsysfs.c | 19 +-
drivers/video/ffb.c | 2 -
drivers/video/fm2fb.c | 2 +-
drivers/video/fsl-diu-fb.c | 2 +-
drivers/video/gbefb.c | 6 +-
drivers/video/geode/gx1fb_core.c | 3 +-
drivers/video/geode/gxfb_core.c | 3 +-
drivers/video/geode/lxfb_core.c | 4 +-
drivers/video/grvga.c | 16 +-
drivers/video/gxt4500.c | 3 +-
drivers/video/hecubafb.c | 19 +-
drivers/video/hgafb.c | 3 +-
drivers/video/hitfb.c | 3 +-
drivers/video/hpfb.c | 3 +-
drivers/video/hyperv_fb.c | 45 +-
drivers/video/i740fb.c | 9 +-
drivers/video/i810/i810_main.c | 1 -
drivers/video/igafb.c | 5 +-
drivers/video/imsttfb.c | 4 +-
drivers/video/imxfb.c | 6 +-
drivers/video/intelfb/intelfbdrv.c | 2 -
drivers/video/jz4740_fb.c | 29 +-
drivers/video/kyro/fbdev.c | 10 +-
drivers/video/leo.c | 4 +-
drivers/video/macfb.c | 3 +-
drivers/video/matrox/matroxfb_DAC1064.c | 4 +-
drivers/video/matrox/matroxfb_Ti3026.c | 2 +-
drivers/video/matrox/matroxfb_base.c | 6 +-
drivers/video/matrox/matroxfb_maven.c | 14 +-
drivers/video/mb862xx/mb862xxfbdrv.c | 3 -
drivers/video/mbx/mbxfb.c | 4 +-
drivers/video/metronomefb.c | 17 +-
drivers/video/mmp/fb/mmpfb.c | 34 +-
drivers/video/mmp/hw/mmp_ctrl.c | 71 +-
drivers/video/mmp/hw/mmp_ctrl.h | 5 +
drivers/video/mx3fb.c | 4 +-
drivers/video/neofb.c | 9 +-
drivers/video/nuc900fb.c | 9 +-
drivers/video/nvidia/nv_hw.c | 2 +-
drivers/video/offb.c | 3 +-
drivers/video/omap/hwa742.c | 2 +-
drivers/video/omap/omapfb_main.c | 4 +-
drivers/video/omap2/displays-new/Kconfig | 6 +
drivers/video/omap2/displays-new/Makefile | 1 +
drivers/video/omap2/displays-new/connector-dvi.c | 7 +
drivers/video/omap2/displays-new/panel-dsi-cm.c | 2 +-
.../omap2/displays-new/panel-tpo-td028ttec1.c | 480 ++++++++
drivers/video/omap2/dss/Makefile | 3 +-
drivers/video/omap2/dss/core.c | 4 +-
drivers/video/omap2/dss/dispc.c | 10 +-
drivers/video/omap2/dss/display.c | 2 +-
drivers/video/omap2/dss/dsi.c | 12 +-
drivers/video/omap2/dss/dss.h | 4 +-
drivers/video/omap2/dss/dss_features.c | 44 -
drivers/video/omap2/dss/dss_features.h | 8 -
drivers/video/omap2/dss/hdmi.c | 1184 --------------------
drivers/video/omap2/dss/hdmi.h | 444 ++++++++
drivers/video/omap2/dss/hdmi4.c | 696 ++++++++++++
.../omap2/dss/{ti_hdmi_4xxx_ip.c => hdmi4_core.c} | 771 ++++---------
.../omap2/dss/{ti_hdmi_4xxx_ip.h => hdmi4_core.h} | 303 ++---
drivers/video/omap2/dss/hdmi_common.c | 423 +++++++
drivers/video/omap2/dss/hdmi_phy.c | 160 +++
drivers/video/omap2/dss/hdmi_pll.c | 230 ++++
drivers/video/omap2/dss/hdmi_wp.c | 271 +++++
drivers/video/omap2/dss/ti_hdmi.h | 187 ----
drivers/video/p9100.c | 2 -
drivers/video/platinumfb.c | 3 +-
drivers/video/pm2fb.c | 5 +-
drivers/video/pm3fb.c | 4 +-
drivers/video/pmag-ba-fb.c | 4 +-
drivers/video/pmagb-b-fb.c | 9 +-
drivers/video/pvr2fb.c | 25 +-
drivers/video/pxa168fb.c | 6 +-
drivers/video/pxafb.c | 16 +-
drivers/video/q40fb.c | 3 +-
drivers/video/riva/fbdev.c | 5 -
drivers/video/s1d13xxxfb.c | 15 +-
drivers/video/s3c-fb.c | 2 +-
drivers/video/s3c2410fb.c | 6 +-
drivers/video/s3fb.c | 63 +-
drivers/video/sa1100fb.c | 4 +-
drivers/video/savage/savagefb_driver.c | 6 -
drivers/video/sbuslib.c | 2 +-
drivers/video/sgivwfb.c | 4 +-
drivers/video/sh_mobile_hdmi.c | 19 +-
drivers/video/sh_mobile_lcdcfb.c | 14 +-
drivers/video/simplefb.c | 24 +-
drivers/video/sis/sis_main.c | 8 +-
drivers/video/skeletonfb.c | 3 +-
drivers/video/smscufx.c | 2 +-
drivers/video/ssd1307fb.c | 2 +-
drivers/video/sstfb.c | 8 +-
drivers/video/stifb.c | 4 +-
drivers/video/sunxvr1000.c | 2 -
drivers/video/svgalib.c | 4 +-
drivers/video/sysimgblt.c | 2 +-
drivers/video/tcx.c | 6 +-
drivers/video/tdfxfb.c | 1 -
drivers/video/tgafb.c | 4 +-
drivers/video/tmiofb.c | 13 +-
drivers/video/tridentfb.c | 1 -
drivers/video/udlfb.c | 2 +-
drivers/video/uvesafb.c | 25 +-
drivers/video/valkyriefb.c | 2 +-
drivers/video/vesafb.c | 3 +-
drivers/video/vfb.c | 10 +-
drivers/video/vga16fb.c | 3 +-
drivers/video/vt8500lcdfb.c | 2 +-
drivers/video/vt8623fb.c | 41 +-
drivers/video/w100fb.c | 7 +-
drivers/video/wm8505fb.c | 14 +-
drivers/video/wmt_ge_rops.c | 4 +-
drivers/video/xilinxfb.c | 61 +-
include/linux/fb.h | 12 +
include/video/atmel_lcdc.h | 25 +-
include/video/mmp_disp.h | 6 +
include/video/omap-panel-data.h | 13 +
176 files changed, 3948 insertions(+), 3104 deletions(-)
create mode 100644 Documentation/devicetree/bindings/video/atmel,lcdc.txt
create mode 100644 drivers/video/omap2/displays-new/panel-tpo-td028ttec1.c
delete mode 100644 drivers/video/omap2/dss/hdmi.c
create mode 100644 drivers/video/omap2/dss/hdmi.h
create mode 100644 drivers/video/omap2/dss/hdmi4.c
rename drivers/video/omap2/dss/{ti_hdmi_4xxx_ip.c => hdmi4_core.c} (55%)
rename drivers/video/omap2/dss/{ti_hdmi_4xxx_ip.h => hdmi4_core.h} (51%)
create mode 100644 drivers/video/omap2/dss/hdmi_common.c
create mode 100644 drivers/video/omap2/dss/hdmi_phy.c
create mode 100644 drivers/video/omap2/dss/hdmi_pll.c
create mode 100644 drivers/video/omap2/dss/hdmi_wp.c
delete mode 100644 drivers/video/omap2/dss/ti_hdmi.h
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
^ permalink raw reply
* Re: [GIT PULL] fbdev changes for 3.13
From: Peter Hurley @ 2013-11-13 14:24 UTC (permalink / raw)
To: John Tapsell
Cc: Tomi Valkeinen, Linus Torvalds, linux-fbdev, linux-kernel,
Jean-Christophe PLAGNIOL-VILLARD
In-Reply-To: <52836BBB.4010502@ti.com>
On 11/13/2013 07:08 AM, Tomi Valkeinen wrote:
> Hi Linus,
>
> The following changes since commit 272b98c6455f00884f0350f775c5342358ebb73f:
>
> Linux 3.12-rc1 (2013-09-16 16:17:51 -0400)
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux.git tags/fbdev-3.13
>
> for you to fetch changes up to 3a41c5dbe8bc396a7fb16ca8739e945bb003342e:
>
> fb: reorder the lock sequence to fix potential dead lock (2013-11-11 15:52:59 +0200)
>
> ----------------------------------------------------------------
> fbdev changes for 3.13
>
> Nothing particularly stands out in this pull request. The biggest part of the
> changes are cleanups.
>
> Maybe one fix to mention is the "fb: reorder the lock sequence to fix potential
> dead lock" which hopefully fixes the fb locking issues reported by multiple
> persons.
>
...<snip>
>
> Gu Zheng (1):
> fb: reorder the lock sequence to fix potential dead lock
John,
The above patch should fix the deadlock you found in fbcon_generic_blank().
Please re-test 3.13-rc1 when released [or Tomi's for-next branch now].
Regards,
Peter Hurley
^ permalink raw reply
* Re: [PATCH 1/1] video: exynos_mipi_dsi: Remove unused variable
From: Sachin Kamat @ 2013-11-14 6:25 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1382333533-32740-1-git-send-email-sachin.kamat@linaro.org>
Hi Tomi,
On 24 October 2013 21:25, Kishon Vijay Abraham I <kishon@ti.com> wrote:
> On Monday 21 October 2013 11:02 AM, Sachin Kamat wrote:
>> 'pdev' is not used anymore (Removed vide commit 7e0be9f9 "video:
>> exynos_mipi_dsim: Use the generic PHY driver"). Remove it and
>> silence the following compilation warning:
>> drivers/video/exynos/exynos_mipi_dsi.c:144:26: warning:
>> unused variable ‘pdev’ [-Wunused-variable]
>>
>> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
> Reviewed-by: Kishon Vijay Abraham I <kishon@ti.com>
Now that phy patchset and your tree is already merged into Linus' tree,
please queue this patch in your tree.
--
With warm regards,
Sachin
^ permalink raw reply
* [patch 1/2] video: mmp: delete a stray mutex_unlock()
From: Dan Carpenter @ 2013-11-14 8:19 UTC (permalink / raw)
To: linux-fbdev
We aren't holding the disp_lock so we shouldn't release it.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
diff --git a/drivers/video/mmp/core.c b/drivers/video/mmp/core.c
index 84de263..c8d4265 100644
--- a/drivers/video/mmp/core.c
+++ b/drivers/video/mmp/core.c
@@ -173,7 +173,7 @@ struct mmp_path *mmp_register_path(struct mmp_path_info *info)
+ sizeof(struct mmp_overlay) * info->overlay_num;
path = kzalloc(size, GFP_KERNEL);
if (!path)
- goto failed;
+ return NULL;
/* path set */
mutex_init(&path->access_ok);
@@ -219,11 +219,6 @@ struct mmp_path *mmp_register_path(struct mmp_path_info *info)
mutex_unlock(&disp_lock);
return path;
-
-failed:
- kfree(path);
- mutex_unlock(&disp_lock);
- return NULL;
}
EXPORT_SYMBOL_GPL(mmp_register_path);
^ permalink raw reply related
* [patch 2/2] video: mmp: Using plain integer as NULL pointer
From: Dan Carpenter @ 2013-11-14 8:19 UTC (permalink / raw)
To: linux-fbdev
Sparse complains here:
drivers/video/mmp/core.c:33:16:
warning: Using plain integer as NULL pointer
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
diff --git a/drivers/video/mmp/core.c b/drivers/video/mmp/core.c
index c8d4265..b563b92 100644
--- a/drivers/video/mmp/core.c
+++ b/drivers/video/mmp/core.c
@@ -30,7 +30,7 @@ static struct mmp_overlay *path_get_overlay(struct mmp_path *path,
{
if (path && overlay_id < path->overlay_num)
return &path->overlays[overlay_id];
- return 0;
+ return NULL;
}
static int path_check_status(struct mmp_path *path)
^ permalink raw reply related
* [PATCH] video: exynos_mipi_dsim: Remove unused variable
From: Olof Johansson @ 2013-11-14 21:09 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Kishon Vijay Abraham I, linux-fbdev, linux-samsung-soc,
linux-kernel, Olof Johansson, Sylwester Nawrocki
commit 7e0be9f9f7cba3356f75b86737dbe3a005da067e ('video: exynos_mipi_dsim:
Use the generic PHY driver') resulted in a warning about an unused
variable:
drivers/video/exynos/exynos_mipi_dsi.c:144:26: warning: unused variable
'pdev' [-Wunused-variable]
It is indeed unused; remove it.
Signed-off-by: Olof Johansson <olof@lixom.net>
Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
---
drivers/video/exynos/exynos_mipi_dsi.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/video/exynos/exynos_mipi_dsi.c b/drivers/video/exynos/exynos_mipi_dsi.c
index 00b3a52..cee9602 100644
--- a/drivers/video/exynos/exynos_mipi_dsi.c
+++ b/drivers/video/exynos/exynos_mipi_dsi.c
@@ -141,7 +141,6 @@ static int exynos_mipi_dsi_early_blank_mode(struct mipi_dsim_device *dsim,
static int exynos_mipi_dsi_blank_mode(struct mipi_dsim_device *dsim, int power)
{
- struct platform_device *pdev = to_platform_device(dsim->dev);
struct mipi_dsim_lcd_driver *client_drv = dsim->dsim_lcd_drv;
struct mipi_dsim_lcd_device *client_dev = dsim->dsim_lcd_dev;
--
1.7.10.4
^ permalink raw reply related
* Re: [PATCH] video: exynos_mipi_dsim: Remove unused variable
From: Greg Kroah-Hartman @ 2013-11-15 1:32 UTC (permalink / raw)
To: Olof Johansson
Cc: Kishon Vijay Abraham I, linux-fbdev, linux-samsung-soc,
linux-kernel, Sylwester Nawrocki
In-Reply-To: <1384463364-28864-1-git-send-email-olof@lixom.net>
On Thu, Nov 14, 2013 at 01:09:24PM -0800, Olof Johansson wrote:
> commit 7e0be9f9f7cba3356f75b86737dbe3a005da067e ('video: exynos_mipi_dsim:
> Use the generic PHY driver') resulted in a warning about an unused
> variable:
>
> drivers/video/exynos/exynos_mipi_dsi.c:144:26: warning: unused variable
> 'pdev' [-Wunused-variable]
>
> It is indeed unused; remove it.
>
> Signed-off-by: Olof Johansson <olof@lixom.net>
> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
> drivers/video/exynos/exynos_mipi_dsi.c | 1 -
> 1 file changed, 1 deletion(-)
I had to take the offending patch through my tree due to the phy
changes, but I'm not the maintainer of it, nor the video mantainer, so I
can't really take this patch through my trees, sorry.
greg k-h
^ permalink raw reply
* Re: [PATCH] video: exynos_mipi_dsim: Remove unused variable
From: Olof Johansson @ 2013-11-15 1:48 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Kishon Vijay Abraham I, linux-fbdev@vger.kernel.org,
linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,
Sylwester Nawrocki, InKi Dae
In-Reply-To: <20131115013248.GA6541@kroah.com>
On Thu, Nov 14, 2013 at 5:32 PM, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
> On Thu, Nov 14, 2013 at 01:09:24PM -0800, Olof Johansson wrote:
>> commit 7e0be9f9f7cba3356f75b86737dbe3a005da067e ('video: exynos_mipi_dsim:
>> Use the generic PHY driver') resulted in a warning about an unused
>> variable:
>>
>> drivers/video/exynos/exynos_mipi_dsi.c:144:26: warning: unused variable
>> 'pdev' [-Wunused-variable]
>>
>> It is indeed unused; remove it.
>>
>> Signed-off-by: Olof Johansson <olof@lixom.net>
>> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
>> ---
>> drivers/video/exynos/exynos_mipi_dsi.c | 1 -
>> 1 file changed, 1 deletion(-)
>
> I had to take the offending patch through my tree due to the phy
> changes, but I'm not the maintainer of it, nor the video mantainer, so I
> can't really take this patch through my trees, sorry.
I was wondering why you had signed off, since it didn't follow the
regular path. Makes sense.
So, looks like most historical patches to this file have gone through
Andrew. Can I get an ack from someone and just take it through arm-soc
in this case, please? Inki?
-Olof
^ permalink raw reply
* RE: [PATCH] video: exynos_mipi_dsim: Remove unused variable
From: Inki Dae @ 2013-11-15 2:00 UTC (permalink / raw)
To: linux-fbdev
In-Reply-To: <1384463364-28864-1-git-send-email-olof@lixom.net>
Hi Olof,
> -----Original Message-----
> From: Olof Johansson [mailto:olof@lixom.net]
> Sent: Friday, November 15, 2013 10:49 AM
> To: Greg Kroah-Hartman
> Cc: Kishon Vijay Abraham I; linux-fbdev@vger.kernel.org; linux-samsung-
> soc@vger.kernel.org; linux-kernel@vger.kernel.org; Sylwester Nawrocki;
> InKi Dae
> Subject: Re: [PATCH] video: exynos_mipi_dsim: Remove unused variable
>
> On Thu, Nov 14, 2013 at 5:32 PM, Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> > On Thu, Nov 14, 2013 at 01:09:24PM -0800, Olof Johansson wrote:
> >> commit 7e0be9f9f7cba3356f75b86737dbe3a005da067e ('video:
> exynos_mipi_dsim:
> >> Use the generic PHY driver') resulted in a warning about an unused
> >> variable:
> >>
> >> drivers/video/exynos/exynos_mipi_dsi.c:144:26: warning: unused variable
> >> 'pdev' [-Wunused-variable]
> >>
> >> It is indeed unused; remove it.
> >>
> >> Signed-off-by: Olof Johansson <olof@lixom.net>
> >> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
> >> ---
> >> drivers/video/exynos/exynos_mipi_dsi.c | 1 -
> >> 1 file changed, 1 deletion(-)
> >
> > I had to take the offending patch through my tree due to the phy
> > changes, but I'm not the maintainer of it, nor the video mantainer, so I
> > can't really take this patch through my trees, sorry.
>
> I was wondering why you had signed off, since it didn't follow the
> regular path. Makes sense.
>
> So, looks like most historical patches to this file have gone through
> Andrew. Can I get an ack from someone and just take it through arm-soc
> in this case, please? Inki?
>
Acked-by: Inki Dae <inki.dae@samsung.com>
Thanks,
Inki Dae
>
> -Olof
^ permalink raw reply
* Re: [PATCH] video: exynos_mipi_dsim: Remove unused variable
From: Sachin Kamat @ 2013-11-15 2:52 UTC (permalink / raw)
To: Olof Johansson
Cc: Greg Kroah-Hartman, Kishon Vijay Abraham I,
linux-fbdev@vger.kernel.org, linux-samsung-soc, LKML,
Sylwester Nawrocki, Valkeinen, Tomi
In-Reply-To: <1384463364-28864-1-git-send-email-olof@lixom.net>
+ Tomi
Hi Olof,
On 15 November 2013 02:39, Olof Johansson <olof@lixom.net> wrote:
> commit 7e0be9f9f7cba3356f75b86737dbe3a005da067e ('video: exynos_mipi_dsim:
> Use the generic PHY driver') resulted in a warning about an unused
> variable:
>
> drivers/video/exynos/exynos_mipi_dsi.c:144:26: warning: unused variable
> 'pdev' [-Wunused-variable]
>
> It is indeed unused; remove it.
>
> Signed-off-by: Olof Johansson <olof@lixom.net>
> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
I had already sent a similar patch to fix this issue [1] which is
reviewed by Kishon.
But the patch that caused the warning was in Greg's tree at that time
and he wanted
the follow up patch to go through the video tree. I have pinged Tomi yesterday
regarding this (now that his tree as well as the original patches are merged).
[1] http://www.spinics.net/lists/linux-fbdev/msg12755.html
--
With warm regards,
Sachin
^ permalink raw reply
* Re: [PATCH 16/51] DMA-API: ppc: vio.c: replace dma_set_mask()+dma_set_coherent_mask() with new helpe
From: Cedric Le Goater @ 2013-11-15 16:16 UTC (permalink / raw)
To: Russell King
Cc: alsa-devel, b43-dev, devel, devicetree, dri-devel, e1000-devel,
linux-arm-kernel, linux-crypto, linux-doc, linux-fbdev, linux-ide,
linux-media, linux-mmc, linux-nvme, linux-omap, linuxppc-dev,
linux-samsung-soc, linux-scsi, linux-tegra, linux-usb,
linux-wireless, netdev, Solarflare linux maintainers,
uclinux-dist-devel, Paul Mackerras, Benjamin Herrenschmidt
In-Reply-To: <E1VMly8-0007gy-Ru@rmk-PC.arm.linux.org.uk>
Hi,
On 09/19/2013 11:41 PM, Russell King wrote:
> Replace the following sequence:
>
> dma_set_mask(dev, mask);
> dma_set_coherent_mask(dev, mask);
>
> with a call to the new helper dma_set_mask_and_coherent().
>
> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> ---
> arch/powerpc/kernel/vio.c | 3 +--
> 1 files changed, 1 insertions(+), 2 deletions(-)
>
> diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
> index 78a3506..96b6c97 100644
> --- a/arch/powerpc/kernel/vio.c
> +++ b/arch/powerpc/kernel/vio.c
> @@ -1413,8 +1413,7 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
>
> /* needed to ensure proper operation of coherent allocations
> * later, in case driver doesn't set it explicitly */
> - dma_set_mask(&viodev->dev, DMA_BIT_MASK(64));
> - dma_set_coherent_mask(&viodev->dev, DMA_BIT_MASK(64));
> + dma_set_mask_and_coherent(&viodev->dev, DMA_BIT_MASK(64));
> }
>
> /* register with generic device framework */
>
The new helper routine dma_set_mask_and_coherent() breaks the
initialization of the pseries vio devices which do not have an
initial dev->dma_mask. I think we need to use dma_coerce_mask_and_coherent()
instead.
Signed-off-by: Cédric Le Goater <clg@fr.ibm.com>
---
arch/powerpc/kernel/vio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index e7d0c88f..76a6482 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -1419,7 +1419,7 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
/* needed to ensure proper operation of coherent allocations
* later, in case driver doesn't set it explicitly */
- dma_set_mask_and_coherent(&viodev->dev, DMA_BIT_MASK(64));
+ dma_coerce_mask_and_coherent(&viodev->dev, DMA_BIT_MASK(64));
}
/* register with generic device framework */
--
1.7.10.4
^ permalink raw reply related
* [RFC 03/23] OMAPDSS: raw read and write endian fix
From: Taras Kondratiuk @ 2013-11-16 0:01 UTC (permalink / raw)
To: linux-omap
Cc: linaro-networking, Victor Kamensky, Tomi Valkeinen,
Jean-Christophe Plagniol-Villard, linux-fbdev, linux-kernel
In-Reply-To: <1384560086-11994-1-git-send-email-taras.kondratiuk@linaro.org>
From: Victor Kamensky <victor.kamensky@linaro.org>
All OMAP IP blocks expect LE data, but CPU may operate in BE mode.
Need to use endian neutral functions to read/write h/w registers.
I.e instead of __raw_read[lw] and __raw_write[lw] functions code
need to use read[lw]_relaxed and write[lw]_relaxed functions.
If the first simply reads/writes register, the second will byteswap
it if host operates in BE mode.
Changes are trivial sed like replacement of __raw_xxx functions
with xxx_relaxed variant.
Signed-off-by: Victor Kamensky <victor.kamensky@linaro.org>
Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org>
---
drivers/video/omap2/dss/dispc.c | 4 ++--
drivers/video/omap2/dss/dsi.c | 4 ++--
drivers/video/omap2/dss/dss.c | 4 ++--
drivers/video/omap2/dss/rfbi.c | 16 ++++++++--------
drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c | 4 ++--
drivers/video/omap2/dss/venc.c | 4 ++--
drivers/video/omap2/omapfb/omapfb-main.c | 10 +++++-----
drivers/video/omap2/vrfb.c | 6 +++---
8 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index 4779750..87a3682 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -228,12 +228,12 @@ static unsigned long dispc_plane_lclk_rate(enum omap_plane plane);
static inline void dispc_write_reg(const u16 idx, u32 val)
{
- __raw_writel(val, dispc.base + idx);
+ writel_relaxed(val, dispc.base + idx);
}
static inline u32 dispc_read_reg(const u16 idx)
{
- return __raw_readl(dispc.base + idx);
+ return readl_relaxed(dispc.base + idx);
}
static u32 mgr_fld_read(enum omap_channel channel, enum mgr_reg_fields regfld)
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index a598b58..c5af3fa 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -414,7 +414,7 @@ static inline void dsi_write_reg(struct platform_device *dsidev,
{
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
- __raw_writel(val, dsi->base + idx.idx);
+ writel_relaxed(val, dsi->base + idx.idx);
}
static inline u32 dsi_read_reg(struct platform_device *dsidev,
@@ -422,7 +422,7 @@ static inline u32 dsi_read_reg(struct platform_device *dsidev,
{
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
- return __raw_readl(dsi->base + idx.idx);
+ return readl_relaxed(dsi->base + idx.idx);
}
static void dsi_bus_lock(struct omap_dss_device *dssdev)
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index bd01608..e53f663 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -104,12 +104,12 @@ static const char * const dss_generic_clk_source_names[] = {
static inline void dss_write_reg(const struct dss_reg idx, u32 val)
{
- __raw_writel(val, dss.base + idx.idx);
+ writel_relaxed(val, dss.base + idx.idx);
}
static inline u32 dss_read_reg(const struct dss_reg idx)
{
- return __raw_readl(dss.base + idx.idx);
+ return readl_relaxed(dss.base + idx.idx);
}
#define SR(reg) \
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index c8a81a2..7772e33 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -122,12 +122,12 @@ static struct {
static inline void rfbi_write_reg(const struct rfbi_reg idx, u32 val)
{
- __raw_writel(val, rfbi.base + idx.idx);
+ writel_relaxed(val, rfbi.base + idx.idx);
}
static inline u32 rfbi_read_reg(const struct rfbi_reg idx)
{
- return __raw_readl(rfbi.base + idx.idx);
+ return readl_relaxed(rfbi.base + idx.idx);
}
static int rfbi_runtime_get(void)
@@ -263,8 +263,8 @@ static void rfbi_write_pixels(const void __iomem *buf, int scr_width,
for (; h; --h) {
for (i = 0; i < w; ++i) {
const u8 __iomem *b = (const u8 __iomem *)pd;
- rfbi_write_reg(RFBI_PARAM, __raw_readb(b+1));
- rfbi_write_reg(RFBI_PARAM, __raw_readb(b+0));
+ rfbi_write_reg(RFBI_PARAM, readb_relaxed(b+1));
+ rfbi_write_reg(RFBI_PARAM, readb_relaxed(b+0));
++pd;
}
pd += horiz_offset;
@@ -277,9 +277,9 @@ static void rfbi_write_pixels(const void __iomem *buf, int scr_width,
for (; h; --h) {
for (i = 0; i < w; ++i) {
const u8 __iomem *b = (const u8 __iomem *)pd;
- rfbi_write_reg(RFBI_PARAM, __raw_readb(b+2));
- rfbi_write_reg(RFBI_PARAM, __raw_readb(b+1));
- rfbi_write_reg(RFBI_PARAM, __raw_readb(b+0));
+ rfbi_write_reg(RFBI_PARAM, readb_relaxed(b+2));
+ rfbi_write_reg(RFBI_PARAM, readb_relaxed(b+1));
+ rfbi_write_reg(RFBI_PARAM, readb_relaxed(b+0));
++pd;
}
pd += horiz_offset;
@@ -291,7 +291,7 @@ static void rfbi_write_pixels(const void __iomem *buf, int scr_width,
for (; h; --h) {
for (i = 0; i < w; ++i) {
- rfbi_write_reg(RFBI_PARAM, __raw_readw(pd));
+ rfbi_write_reg(RFBI_PARAM, readw_relaxed(pd));
++pd;
}
pd += horiz_offset;
diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
index 3dfe009..59936fa 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
@@ -43,13 +43,13 @@
static inline void hdmi_write_reg(void __iomem *base_addr,
const u16 idx, u32 val)
{
- __raw_writel(val, base_addr + idx);
+ writel_relaxed(val, base_addr + idx);
}
static inline u32 hdmi_read_reg(void __iomem *base_addr,
const u16 idx)
{
- return __raw_readl(base_addr + idx);
+ return readl_relaxed(base_addr + idx);
}
static inline void __iomem *hdmi_wp_base(struct hdmi_ip_data *ip_data)
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index 5f88ac4..74e6973 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -309,12 +309,12 @@ static struct {
static inline void venc_write_reg(int idx, u32 val)
{
- __raw_writel(val, venc.base + idx);
+ writel_relaxed(val, venc.base + idx);
}
static inline u32 venc_read_reg(int idx)
{
- u32 l = __raw_readl(venc.base + idx);
+ u32 l = readl_relaxed(venc.base + idx);
return l;
}
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c
index 27d6905..f7a347c 100644
--- a/drivers/video/omap2/omapfb/omapfb-main.c
+++ b/drivers/video/omap2/omapfb/omapfb-main.c
@@ -82,18 +82,18 @@ static void draw_pixel(struct fb_info *fbi, int x, int y, unsigned color)
g = g * 64 / 256;
b = b * 32 / 256;
- __raw_writew((r << 11) | (g << 5) | (b << 0), p);
+ writew_relaxed((r << 11) | (g << 5) | (b << 0), p);
} else if (var->bits_per_pixel = 24) {
u8 __iomem *p = (u8 __iomem *)addr;
p += (y * line_len + x) * 3;
- __raw_writeb(b, p + 0);
- __raw_writeb(g, p + 1);
- __raw_writeb(r, p + 2);
+ writeb_relaxed(b, p + 0);
+ writeb_relaxed(g, p + 1);
+ writeb_relaxed(r, p + 2);
} else if (var->bits_per_pixel = 32) {
u32 __iomem *p = (u32 __iomem *)addr;
p += y * line_len + x;
- __raw_writel(color, p);
+ writel_relaxed(color, p);
}
}
diff --git a/drivers/video/omap2/vrfb.c b/drivers/video/omap2/vrfb.c
index f346b02..0324690 100644
--- a/drivers/video/omap2/vrfb.c
+++ b/drivers/video/omap2/vrfb.c
@@ -82,17 +82,17 @@ static bool vrfb_loaded;
static void omap2_sms_write_rot_control(u32 val, unsigned ctx)
{
- __raw_writel(val, vrfb_base + SMS_ROT_CONTROL(ctx));
+ writel_relaxed(val, vrfb_base + SMS_ROT_CONTROL(ctx));
}
static void omap2_sms_write_rot_size(u32 val, unsigned ctx)
{
- __raw_writel(val, vrfb_base + SMS_ROT_SIZE(ctx));
+ writel_relaxed(val, vrfb_base + SMS_ROT_SIZE(ctx));
}
static void omap2_sms_write_rot_physical_ba(u32 val, unsigned ctx)
{
- __raw_writel(val, vrfb_base + SMS_ROT_PHYSICAL_BA(ctx));
+ writel_relaxed(val, vrfb_base + SMS_ROT_PHYSICAL_BA(ctx));
}
static inline void restore_hw_context(int ctx)
--
1.7.9.5
^ permalink raw reply related
* [PATCH] RFC: framebuffer: provide generic get_fb_unmapped_area
From: Uwe Kleine-König @ 2013-11-18 10:57 UTC (permalink / raw)
To: linux-arm-kernel
This patch makes mmapping the simple-framebuffer device work on a no-MMU
ARM target. The code is mostly taken from
arch/blackfin/kernel/sys_bfin.c.
Note this is only tested on this no-MMU machine and I don't know enough
about framebuffers and mm to decide if this patch is sane. Also I'm
unsure about the size check because it triggers if userspace page aligns
the len parameter. (I don't know how usual it is to do, I'd say it's
wrong, but my test program (fbtest by Geert Uytterhoeven) does it.)
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/video/fbmem.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index dacaf74..70b328c 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -1483,6 +1483,24 @@ __releases(&info->lock)
return 0;
}
+#ifdef HAVE_ARCH_FB_UNMAPPED_AREA
+#define fb_get_unmapped_area get_fb_unmapped_area
+#else
+unsigned long fb_get_unmapped_area(struct file *filp, unsigned long orig_addr,
+ unsigned long len, unsigned long pgoff, unsigned long flags)
+{
+ struct fb_info * const info = filp->private_data;
+ unsigned long screen_size = info->screen_size ?: info->fix.smem_len;
+
+ if (len > screen_size) {
+ pr_info("%lu > %lu (%lu, %lu)\n", len, screen_size, info->screen_size, info->fix.smem_len);
+ return -EINVAL;
+ }
+
+ return (unsigned long)info->screen_base;
+}
+#endif
+
static const struct file_operations fb_fops = {
.owner = THIS_MODULE,
.read = fb_read,
@@ -1494,9 +1512,7 @@ static const struct file_operations fb_fops = {
.mmap = fb_mmap,
.open = fb_open,
.release = fb_release,
-#ifdef HAVE_ARCH_FB_UNMAPPED_AREA
- .get_unmapped_area = get_fb_unmapped_area,
-#endif
+ .get_unmapped_area = fb_get_unmapped_area,
#ifdef CONFIG_FB_DEFERRED_IO
.fsync = fb_deferred_io_fsync,
#endif
--
1.8.4.2
^ permalink raw reply related
* Re: [PATCH] RFC: framebuffer: provide generic get_fb_unmapped_area
From: Geert Uytterhoeven @ 2013-11-18 11:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1384772231-20993-1-git-send-email-u.kleine-koenig@pengutronix.de>
On Mon, Nov 18, 2013 at 11:57 AM, Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:
> This patch makes mmapping the simple-framebuffer device work on a no-MMU
> ARM target. The code is mostly taken from
> arch/blackfin/kernel/sys_bfin.c.
>
> Note this is only tested on this no-MMU machine and I don't know enough
> about framebuffers and mm to decide if this patch is sane. Also I'm
> unsure about the size check because it triggers if userspace page aligns
> the len parameter. (I don't know how usual it is to do, I'd say it's
> wrong, but my test program (fbtest by Geert Uytterhoeven) does it.)
It's quite common: the granularity of mmap() is PAGE_SIZE, i.e. if you
try to map a partial page, you'll get access to the full page anyway
(with MMU; without MMU, you can access everything anyway).
Fbtest always mmap()s the full (page aligned) smem_len.
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
> drivers/video/fbmem.c | 22 +++++++++++++++++++---
> 1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
> index dacaf74..70b328c 100644
> --- a/drivers/video/fbmem.c
> +++ b/drivers/video/fbmem.c
> @@ -1483,6 +1483,24 @@ __releases(&info->lock)
> return 0;
> }
>
> +#ifdef HAVE_ARCH_FB_UNMAPPED_AREA
> +#define fb_get_unmapped_area get_fb_unmapped_area
> +#else
> +unsigned long fb_get_unmapped_area(struct file *filp, unsigned long orig_addr,
> + unsigned long len, unsigned long pgoff, unsigned long flags)
> +{
> + struct fb_info * const info = filp->private_data;
> + unsigned long screen_size = info->screen_size ?: info->fix.smem_len;
Why restrict this to screen_size? Fbtest will map the whole frame buffer memory.
Typically screen_size is not a multiple of PAGE_SIZE, so this is another
reason why your size check fails.
> + if (len > screen_size) {
> + pr_info("%lu > %lu (%lu, %lu)\n", len, screen_size, info->screen_size, info->fix.smem_len);
> + return -EINVAL;
> + }
> +
> + return (unsigned long)info->screen_base;
Shouldn't you take into account pgoff?
> +}
> +#endif
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply
* [PATCH 0/7] OMAPDSS: func clock handling improvements
From: Tomi Valkeinen @ 2013-11-18 12:38 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
Some of the new TI SoCs using DSS have a dedicated PLL for the DSS functional
clock. This series adds support to omapdss for that kind of clocking scheme.
This series also needs the following commits, which are now in mainline, to
work:
ARM: OMAP3: fix dpll4_m3_ck and dpll4_m4_ck dividers
ARM: OMAP3: use CLK_SET_RATE_PARENT for dss clocks
ARM: OMAP4: use CLK_SET_RATE_PARENT for dss_dss_clk
Tomi
Tomi Valkeinen (7):
OMAPDSS: fix omap2 dss fck handling
OMAPDSS: remove struct dss_clock_info
OMAPDSS: simplify dss clk dump
OMAPDSS: rename parent clk variables
OMAPDSS: cleanup fck parent handling
OMAPDSS: pass pck to dss fck clock calc
OMAPDSS: add dedicated fck PLL support
drivers/video/omap2/dss/dpi.c | 15 ++--
drivers/video/omap2/dss/dss.c | 163 ++++++++++++++----------------------------
drivers/video/omap2/dss/dss.h | 17 ++---
drivers/video/omap2/dss/sdi.c | 21 +++---
4 files changed, 76 insertions(+), 140 deletions(-)
--
1.8.3.2
^ permalink raw reply
* [PATCH 1/7] OMAPDSS: fix omap2 dss fck handling
From: Tomi Valkeinen @ 2013-11-18 12:38 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778344-8226-1-git-send-email-tomi.valkeinen@ti.com>
The driver considers OMAP2 DSS's functional clock as a fixed clock.
However, it can be changed, but the possible dividers are not continuous
which is why it was just handled as a fixed clock.
As a partial fix, this patch changes the code to handle the continous
part of the dividers, from 1 to 6. This let's us handle the OMAP2 fck
the same way as fcks on other OMAPs.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dss.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index bd01608..e59577a 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -484,11 +484,6 @@ bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data)
unsigned m;
if (dss.dpll4_m4_ck = NULL) {
- /*
- * TODO: dss1_fclk can be changed on OMAP2, but the available
- * dividers are not continuous. We just use the pre-set rate for
- * now.
- */
fck = clk_get_rate(dss.dss_clk);
fckd = 1;
return func(fckd, fck, data);
@@ -761,9 +756,13 @@ void dss_debug_dump_clocks(struct seq_file *s)
#endif
static const struct dss_features omap24xx_dss_feats __initconst = {
- .fck_div_max = 16,
+ /*
+ * fck div max is really 16, but the divider range has gaps. The range
+ * from 1 to 6 has no gaps, so let's use that as a max.
+ */
+ .fck_div_max = 6,
.dss_fck_multiplier = 2,
- .clk_name = NULL,
+ .clk_name = "dss1_fck",
.dpi_select_source = &dss_dpi_select_source_omap2_omap3,
};
--
1.8.3.2
^ permalink raw reply related
* [PATCH 2/7] OMAPDSS: remove struct dss_clock_info
From: Tomi Valkeinen @ 2013-11-18 12:38 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778344-8226-1-git-send-email-tomi.valkeinen@ti.com>
Remove struct dss_clock_info, as it is not usable in a case where DSS
fclk comes from a dedicated PLL. Instead, just use the fclk rate in
place of dss_clock_info, as that is all that's needed.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dpi.c | 13 +++++-----
drivers/video/omap2/dss/dss.c | 59 ++++++++++---------------------------------
drivers/video/omap2/dss/dss.h | 13 ++--------
drivers/video/omap2/dss/sdi.c | 19 +++++++-------
4 files changed, 30 insertions(+), 74 deletions(-)
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index bd48cde..16acddd 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -117,7 +117,7 @@ struct dpi_clk_calc_ctx {
/* outputs */
struct dsi_clock_info dsi_cinfo;
- struct dss_clock_info dss_cinfo;
+ unsigned long long fck;
struct dispc_clock_info dispc_cinfo;
};
@@ -184,12 +184,11 @@ static bool dpi_calc_pll_cb(int regn, int regm, unsigned long fint,
dpi_calc_hsdiv_cb, ctx);
}
-static bool dpi_calc_dss_cb(int fckd, unsigned long fck, void *data)
+static bool dpi_calc_dss_cb(unsigned long fck, void *data)
{
struct dpi_clk_calc_ctx *ctx = data;
- ctx->dss_cinfo.fck = fck;
- ctx->dss_cinfo.fck_div = fckd;
+ ctx->fck = fck;
return dispc_div_calc(fck, ctx->pck_min, ctx->pck_max,
dpi_calc_dispc_cb, ctx);
@@ -286,13 +285,13 @@ static int dpi_set_dispc_clk(unsigned long pck_req, unsigned long *fck,
if (!ok)
return -EINVAL;
- r = dss_set_clock_div(&ctx.dss_cinfo);
+ r = dss_set_fck_rate(ctx.fck);
if (r)
return r;
dpi.mgr_config.clock_info = ctx.dispc_cinfo;
- *fck = ctx.dss_cinfo.fck;
+ *fck = ctx.fck;
*lck_div = ctx.dispc_cinfo.lck_div;
*pck_div = ctx.dispc_cinfo.pck_div;
@@ -495,7 +494,7 @@ static int dpi_check_timings(struct omap_dss_device *dssdev,
if (!ok)
return -EINVAL;
- fck = ctx.dss_cinfo.fck;
+ fck = ctx.fck;
}
lck_div = ctx.dispc_cinfo.lck_div;
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index e59577a..c37d934 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -81,7 +81,6 @@ static struct {
unsigned long cache_req_pck;
unsigned long cache_prate;
- struct dss_clock_info cache_dss_cinfo;
struct dispc_clock_info cache_dispc_cinfo;
enum omap_dss_clk_source dsi_clk_source[MAX_NUM_DSI];
@@ -451,29 +450,6 @@ enum omap_dss_clk_source dss_get_lcd_clk_source(enum omap_channel channel)
}
}
-/* calculate clock rates using dividers in cinfo */
-int dss_calc_clock_rates(struct dss_clock_info *cinfo)
-{
- if (dss.dpll4_m4_ck) {
- unsigned long prate;
-
- if (cinfo->fck_div > dss.feat->fck_div_max ||
- cinfo->fck_div = 0)
- return -EINVAL;
-
- prate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
-
- cinfo->fck = prate / cinfo->fck_div *
- dss.feat->dss_fck_multiplier;
- } else {
- if (cinfo->fck_div != 0)
- return -EINVAL;
- cinfo->fck = clk_get_rate(dss.dss_clk);
- }
-
- return 0;
-}
-
bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data)
{
int fckd, fckd_start, fckd_stop;
@@ -485,8 +461,7 @@ bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data)
if (dss.dpll4_m4_ck = NULL) {
fck = clk_get_rate(dss.dss_clk);
- fckd = 1;
- return func(fckd, fck, data);
+ return func(fck, data);
}
fck_hw_max = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK);
@@ -503,38 +478,35 @@ bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data)
for (fckd = fckd_start; fckd >= fckd_stop; --fckd) {
fck = prate / fckd * m;
- if (func(fckd, fck, data))
+ if (func(fck, data))
return true;
}
return false;
}
-int dss_set_clock_div(struct dss_clock_info *cinfo)
+int dss_set_fck_rate(unsigned long rate)
{
+ DSSDBG("set fck to %lu\n", rate);
+
if (dss.dpll4_m4_ck) {
unsigned long prate;
+ unsigned m;
int r;
prate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
- DSSDBG("dpll4_m4 = %ld\n", prate);
+ m = dss.feat->dss_fck_multiplier;
- r = clk_set_rate(dss.dpll4_m4_ck,
- DIV_ROUND_UP(prate, cinfo->fck_div));
+ r = clk_set_rate(dss.dpll4_m4_ck, rate * m);
if (r)
return r;
- } else {
- if (cinfo->fck_div != 0)
- return -EINVAL;
}
dss.dss_clk_rate = clk_get_rate(dss.dss_clk);
- WARN_ONCE(dss.dss_clk_rate != cinfo->fck,
+ WARN_ONCE(dss.dss_clk_rate != rate,
"clk rate mismatch: %lu != %lu", dss.dss_clk_rate,
- cinfo->fck);
-
- DSSDBG("fck = %ld (%d)\n", cinfo->fck, cinfo->fck_div);
+ rate);
return 0;
}
@@ -555,8 +527,8 @@ unsigned long dss_get_dispc_clk_rate(void)
static int dss_setup_default_clock(void)
{
unsigned long max_dss_fck, prate;
+ unsigned long fck;
unsigned fck_div;
- struct dss_clock_info dss_cinfo = { 0 };
int r;
if (dss.dpll4_m4_ck = NULL)
@@ -568,14 +540,9 @@ static int dss_setup_default_clock(void)
fck_div = DIV_ROUND_UP(prate * dss.feat->dss_fck_multiplier,
max_dss_fck);
+ fck = prate / fck_div * dss.feat->dss_fck_multiplier;
- dss_cinfo.fck_div = fck_div;
-
- r = dss_calc_clock_rates(&dss_cinfo);
- if (r)
- return r;
-
- r = dss_set_clock_div(&dss_cinfo);
+ r = dss_set_fck_rate(fck);
if (r)
return r;
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index e172531..ead1960 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -100,14 +100,6 @@ enum dss_writeback_channel {
DSS_WB_LCD3_MGR = 7,
};
-struct dss_clock_info {
- /* rates that we get with dividers below */
- unsigned long fck;
-
- /* dividers */
- u16 fck_div;
-};
-
struct dispc_clock_info {
/* rates that we get with dividers below */
unsigned long lck;
@@ -251,10 +243,9 @@ void dss_set_venc_output(enum omap_dss_venc_type type);
void dss_set_dac_pwrdn_bgz(bool enable);
unsigned long dss_get_dpll4_rate(void);
-int dss_calc_clock_rates(struct dss_clock_info *cinfo);
-int dss_set_clock_div(struct dss_clock_info *cinfo);
+int dss_set_fck_rate(unsigned long rate);
-typedef bool (*dss_div_calc_func)(int fckd, unsigned long fck, void *data);
+typedef bool (*dss_div_calc_func)(unsigned long fck, void *data);
bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data);
/* SDI */
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index ccc569a..221fd34 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -46,7 +46,7 @@ static struct {
struct sdi_clk_calc_ctx {
unsigned long pck_min, pck_max;
- struct dss_clock_info dss_cinfo;
+ unsigned long long fck;
struct dispc_clock_info dispc_cinfo;
};
@@ -63,19 +63,18 @@ static bool dpi_calc_dispc_cb(int lckd, int pckd, unsigned long lck,
return true;
}
-static bool dpi_calc_dss_cb(int fckd, unsigned long fck, void *data)
+static bool dpi_calc_dss_cb(unsigned long fck, void *data)
{
struct sdi_clk_calc_ctx *ctx = data;
- ctx->dss_cinfo.fck = fck;
- ctx->dss_cinfo.fck_div = fckd;
+ ctx->fck = fck;
return dispc_div_calc(fck, ctx->pck_min, ctx->pck_max,
dpi_calc_dispc_cb, ctx);
}
static int sdi_calc_clock_div(unsigned long pclk,
- struct dss_clock_info *dss_cinfo,
+ unsigned long *fck,
struct dispc_clock_info *dispc_cinfo)
{
int i;
@@ -100,7 +99,7 @@ static int sdi_calc_clock_div(unsigned long pclk,
ok = dss_div_calc(ctx.pck_min, dpi_calc_dss_cb, &ctx);
if (ok) {
- *dss_cinfo = ctx.dss_cinfo;
+ *fck = ctx.fck;
*dispc_cinfo = ctx.dispc_cinfo;
return 0;
}
@@ -128,7 +127,7 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
{
struct omap_dss_device *out = &sdi.output;
struct omap_video_timings *t = &sdi.timings;
- struct dss_clock_info dss_cinfo;
+ unsigned long fck;
struct dispc_clock_info dispc_cinfo;
unsigned long pck;
int r;
@@ -150,13 +149,13 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
t->data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE;
t->sync_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE;
- r = sdi_calc_clock_div(t->pixel_clock * 1000, &dss_cinfo, &dispc_cinfo);
+ r = sdi_calc_clock_div(t->pixel_clock * 1000, &fck, &dispc_cinfo);
if (r)
goto err_calc_clock_div;
sdi.mgr_config.clock_info = dispc_cinfo;
- pck = dss_cinfo.fck / dispc_cinfo.lck_div / dispc_cinfo.pck_div / 1000;
+ pck = fck / dispc_cinfo.lck_div / dispc_cinfo.pck_div / 1000;
if (pck != t->pixel_clock) {
DSSWARN("Could not find exact pixel clock. Requested %d kHz, "
@@ -169,7 +168,7 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
dss_mgr_set_timings(out->manager, t);
- r = dss_set_clock_div(&dss_cinfo);
+ r = dss_set_fck_rate(fck);
if (r)
goto err_set_dss_clock_div;
--
1.8.3.2
^ permalink raw reply related
* [PATCH 3/7] OMAPDSS: simplify dss clk dump
From: Tomi Valkeinen @ 2013-11-18 12:39 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778344-8226-1-git-send-email-tomi.valkeinen@ti.com>
Simplify dss_dump_clocks() so that it doesn't make any presumptions
about the DSS fclks nature.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dss.c | 20 +++-----------------
1 file changed, 3 insertions(+), 17 deletions(-)
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index c37d934..3dea532 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -264,8 +264,6 @@ const char *dss_get_generic_clk_source_name(enum omap_dss_clk_source clk_src)
void dss_dump_clocks(struct seq_file *s)
{
- unsigned long dpll4_ck_rate;
- unsigned long dpll4_m4_ck_rate;
const char *fclk_name, *fclk_real_name;
unsigned long fclk_rate;
@@ -278,21 +276,9 @@ void dss_dump_clocks(struct seq_file *s)
fclk_real_name = dss_feat_get_clk_source_name(OMAP_DSS_CLK_SRC_FCK);
fclk_rate = clk_get_rate(dss.dss_clk);
- if (dss.dpll4_m4_ck) {
- dpll4_ck_rate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
- dpll4_m4_ck_rate = clk_get_rate(dss.dpll4_m4_ck);
-
- seq_printf(s, "dpll4_ck %lu\n", dpll4_ck_rate);
-
- seq_printf(s, "%s (%s) = %lu / %lu * %d = %lu\n",
- fclk_name, fclk_real_name, dpll4_ck_rate,
- dpll4_ck_rate / dpll4_m4_ck_rate,
- dss.feat->dss_fck_multiplier, fclk_rate);
- } else {
- seq_printf(s, "%s (%s) = %lu\n",
- fclk_name, fclk_real_name,
- fclk_rate);
- }
+ seq_printf(s, "%s (%s) = %lu\n",
+ fclk_name, fclk_real_name,
+ fclk_rate);
dss_runtime_put();
}
--
1.8.3.2
^ permalink raw reply related
* [PATCH 4/7] OMAPDSS: rename parent clk variables
From: Tomi Valkeinen @ 2013-11-18 12:39 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778344-8226-1-git-send-email-tomi.valkeinen@ti.com>
Rename the variables related to DSS fclk's parent: "clk_name" and
"dpll4_m4_ck", to "parent_clk_name" and "parent_clk", which much better
tell what they mean.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dss.c | 40 ++++++++++++++++++++--------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 3dea532..d510ba3 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -67,7 +67,7 @@ static void dss_runtime_put(void);
struct dss_features {
u8 fck_div_max;
u8 dss_fck_multiplier;
- const char *clk_name;
+ const char *parent_clk_name;
int (*dpi_select_source)(enum omap_channel channel);
};
@@ -75,7 +75,7 @@ static struct {
struct platform_device *pdev;
void __iomem *base;
- struct clk *dpll4_m4_ck;
+ struct clk *parent_clk;
struct clk *dss_clk;
unsigned long dss_clk_rate;
@@ -445,7 +445,7 @@ bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data)
unsigned long prate;
unsigned m;
- if (dss.dpll4_m4_ck = NULL) {
+ if (dss.parent_clk = NULL) {
fck = clk_get_rate(dss.dss_clk);
return func(fck, data);
}
@@ -475,15 +475,15 @@ int dss_set_fck_rate(unsigned long rate)
{
DSSDBG("set fck to %lu\n", rate);
- if (dss.dpll4_m4_ck) {
+ if (dss.parent_clk) {
unsigned long prate;
unsigned m;
int r;
- prate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
+ prate = clk_get_rate(clk_get_parent(dss.parent_clk));
m = dss.feat->dss_fck_multiplier;
- r = clk_set_rate(dss.dpll4_m4_ck, rate * m);
+ r = clk_set_rate(dss.parent_clk, rate * m);
if (r)
return r;
}
@@ -499,8 +499,8 @@ int dss_set_fck_rate(unsigned long rate)
unsigned long dss_get_dpll4_rate(void)
{
- if (dss.dpll4_m4_ck)
- return clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
+ if (dss.parent_clk)
+ return clk_get_rate(clk_get_parent(dss.parent_clk));
else
return 0;
}
@@ -517,7 +517,7 @@ static int dss_setup_default_clock(void)
unsigned fck_div;
int r;
- if (dss.dpll4_m4_ck = NULL)
+ if (dss.parent_clk = NULL)
return 0;
max_dss_fck = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK);
@@ -654,25 +654,25 @@ static int dss_get_clocks(void)
dss.dss_clk = clk;
- if (dss.feat->clk_name) {
- clk = clk_get(NULL, dss.feat->clk_name);
+ if (dss.feat->parent_clk_name) {
+ clk = clk_get(NULL, dss.feat->parent_clk_name);
if (IS_ERR(clk)) {
- DSSERR("Failed to get %s\n", dss.feat->clk_name);
+ DSSERR("Failed to get %s\n", dss.feat->parent_clk_name);
return PTR_ERR(clk);
}
} else {
clk = NULL;
}
- dss.dpll4_m4_ck = clk;
+ dss.parent_clk = clk;
return 0;
}
static void dss_put_clocks(void)
{
- if (dss.dpll4_m4_ck)
- clk_put(dss.dpll4_m4_ck);
+ if (dss.parent_clk)
+ clk_put(dss.parent_clk);
}
static int dss_runtime_get(void)
@@ -715,35 +715,35 @@ static const struct dss_features omap24xx_dss_feats __initconst = {
*/
.fck_div_max = 6,
.dss_fck_multiplier = 2,
- .clk_name = "dss1_fck",
+ .parent_clk_name = "dss1_fck",
.dpi_select_source = &dss_dpi_select_source_omap2_omap3,
};
static const struct dss_features omap34xx_dss_feats __initconst = {
.fck_div_max = 16,
.dss_fck_multiplier = 2,
- .clk_name = "dpll4_m4_ck",
+ .parent_clk_name = "dpll4_m4_ck",
.dpi_select_source = &dss_dpi_select_source_omap2_omap3,
};
static const struct dss_features omap3630_dss_feats __initconst = {
.fck_div_max = 32,
.dss_fck_multiplier = 1,
- .clk_name = "dpll4_m4_ck",
+ .parent_clk_name = "dpll4_m4_ck",
.dpi_select_source = &dss_dpi_select_source_omap2_omap3,
};
static const struct dss_features omap44xx_dss_feats __initconst = {
.fck_div_max = 32,
.dss_fck_multiplier = 1,
- .clk_name = "dpll_per_m5x2_ck",
+ .parent_clk_name = "dpll_per_m5x2_ck",
.dpi_select_source = &dss_dpi_select_source_omap4,
};
static const struct dss_features omap54xx_dss_feats __initconst = {
.fck_div_max = 64,
.dss_fck_multiplier = 1,
- .clk_name = "dpll_per_h12x2_ck",
+ .parent_clk_name = "dpll_per_h12x2_ck",
.dpi_select_source = &dss_dpi_select_source_omap5,
};
--
1.8.3.2
^ permalink raw reply related
* [PATCH 5/7] OMAPDSS: cleanup fck parent handling
From: Tomi Valkeinen @ 2013-11-18 12:39 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778344-8226-1-git-send-email-tomi.valkeinen@ti.com>
The dss parent_clk_name currently points to a clock node which we use to
change the fclk rate. Now that we have CLK_SET_RATE_PARENT properly set,
we can set the rate directly to the fclk node.
However, we still need to calculate the possible clock rates. For this,
we need the rate of the parent of the current parent_clk.
To simplify the code, this patch changes the parent_clk_name to point to
the above mentioned parent, so that we can get the rate directly.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dss.c | 39 ++++++++++++---------------------------
drivers/video/omap2/dss/dss.h | 1 -
2 files changed, 12 insertions(+), 28 deletions(-)
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index d510ba3..7af9719 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -454,7 +454,7 @@ bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data)
fckd_hw_max = dss.feat->fck_div_max;
m = dss.feat->dss_fck_multiplier;
- prate = dss_get_dpll4_rate();
+ prate = clk_get_rate(dss.parent_clk);
fck_min = fck_min ? fck_min : 1;
@@ -473,20 +473,13 @@ bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data)
int dss_set_fck_rate(unsigned long rate)
{
- DSSDBG("set fck to %lu\n", rate);
-
- if (dss.parent_clk) {
- unsigned long prate;
- unsigned m;
- int r;
+ int r;
- prate = clk_get_rate(clk_get_parent(dss.parent_clk));
- m = dss.feat->dss_fck_multiplier;
+ DSSDBG("set fck to %lu\n", rate);
- r = clk_set_rate(dss.parent_clk, rate * m);
- if (r)
- return r;
- }
+ r = clk_set_rate(dss.dss_clk, rate);
+ if (r)
+ return r;
dss.dss_clk_rate = clk_get_rate(dss.dss_clk);
@@ -497,14 +490,6 @@ int dss_set_fck_rate(unsigned long rate)
return 0;
}
-unsigned long dss_get_dpll4_rate(void)
-{
- if (dss.parent_clk)
- return clk_get_rate(clk_get_parent(dss.parent_clk));
- else
- return 0;
-}
-
unsigned long dss_get_dispc_clk_rate(void)
{
return dss.dss_clk_rate;
@@ -522,7 +507,7 @@ static int dss_setup_default_clock(void)
max_dss_fck = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK);
- prate = dss_get_dpll4_rate();
+ prate = clk_get_rate(dss.parent_clk);
fck_div = DIV_ROUND_UP(prate * dss.feat->dss_fck_multiplier,
max_dss_fck);
@@ -715,35 +700,35 @@ static const struct dss_features omap24xx_dss_feats __initconst = {
*/
.fck_div_max = 6,
.dss_fck_multiplier = 2,
- .parent_clk_name = "dss1_fck",
+ .parent_clk_name = "core_ck",
.dpi_select_source = &dss_dpi_select_source_omap2_omap3,
};
static const struct dss_features omap34xx_dss_feats __initconst = {
.fck_div_max = 16,
.dss_fck_multiplier = 2,
- .parent_clk_name = "dpll4_m4_ck",
+ .parent_clk_name = "dpll4_ck",
.dpi_select_source = &dss_dpi_select_source_omap2_omap3,
};
static const struct dss_features omap3630_dss_feats __initconst = {
.fck_div_max = 32,
.dss_fck_multiplier = 1,
- .parent_clk_name = "dpll4_m4_ck",
+ .parent_clk_name = "dpll4_ck",
.dpi_select_source = &dss_dpi_select_source_omap2_omap3,
};
static const struct dss_features omap44xx_dss_feats __initconst = {
.fck_div_max = 32,
.dss_fck_multiplier = 1,
- .parent_clk_name = "dpll_per_m5x2_ck",
+ .parent_clk_name = "dpll_per_x2_ck",
.dpi_select_source = &dss_dpi_select_source_omap4,
};
static const struct dss_features omap54xx_dss_feats __initconst = {
.fck_div_max = 64,
.dss_fck_multiplier = 1,
- .parent_clk_name = "dpll_per_h12x2_ck",
+ .parent_clk_name = "dpll_per_x2_ck",
.dpi_select_source = &dss_dpi_select_source_omap5,
};
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index ead1960..6fc786f 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -242,7 +242,6 @@ enum omap_dss_clk_source dss_get_lcd_clk_source(enum omap_channel channel);
void dss_set_venc_output(enum omap_dss_venc_type type);
void dss_set_dac_pwrdn_bgz(bool enable);
-unsigned long dss_get_dpll4_rate(void);
int dss_set_fck_rate(unsigned long rate);
typedef bool (*dss_div_calc_func)(unsigned long fck, void *data);
--
1.8.3.2
^ permalink raw reply related
* [PATCH 6/7] OMAPDSS: pass pck to dss fck clock calc
From: Tomi Valkeinen @ 2013-11-18 12:39 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778344-8226-1-git-send-email-tomi.valkeinen@ti.com>
We need the required pixel clock rate when calculating the dss fclk on
SoCs that have a dedicated DSS PLL.
This patch changes the code to pass the pck to the calc functions. The
pck rate is taken into use in the next patch.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dpi.c | 2 +-
drivers/video/omap2/dss/dss.c | 3 ++-
drivers/video/omap2/dss/dss.h | 3 ++-
drivers/video/omap2/dss/sdi.c | 2 +-
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index 16acddd..ae1c8b9 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -236,7 +236,7 @@ static bool dpi_dss_clk_calc(unsigned long pck, struct dpi_clk_calc_ctx *ctx)
ctx->pck_min = 0;
ctx->pck_max = pck + 1000 * i * i * i;
- ok = dss_div_calc(ctx->pck_min, dpi_calc_dss_cb, ctx);
+ ok = dss_div_calc(pck, ctx->pck_min, dpi_calc_dss_cb, ctx);
if (ok)
return ok;
}
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 7af9719..08c58eb 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -436,7 +436,8 @@ enum omap_dss_clk_source dss_get_lcd_clk_source(enum omap_channel channel)
}
}
-bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data)
+bool dss_div_calc(unsigned long pck, unsigned long fck_min,
+ dss_div_calc_func func, void *data)
{
int fckd, fckd_start, fckd_stop;
unsigned long fck;
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 6fc786f..2acc661 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -245,7 +245,8 @@ void dss_set_dac_pwrdn_bgz(bool enable);
int dss_set_fck_rate(unsigned long rate);
typedef bool (*dss_div_calc_func)(unsigned long fck, void *data);
-bool dss_div_calc(unsigned long fck_min, dss_div_calc_func func, void *data);
+bool dss_div_calc(unsigned long pck, unsigned long fck_min,
+ dss_div_calc_func func, void *data);
/* SDI */
int sdi_init_platform_driver(void) __init;
diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
index 221fd34..3bf47c9 100644
--- a/drivers/video/omap2/dss/sdi.c
+++ b/drivers/video/omap2/dss/sdi.c
@@ -97,7 +97,7 @@ static int sdi_calc_clock_div(unsigned long pclk,
ctx.pck_min = 0;
ctx.pck_max = pclk + 1000 * i * i * i;
- ok = dss_div_calc(ctx.pck_min, dpi_calc_dss_cb, &ctx);
+ ok = dss_div_calc(pclk, ctx.pck_min, dpi_calc_dss_cb, &ctx);
if (ok) {
*fck = ctx.fck;
*dispc_cinfo = ctx.dispc_cinfo;
--
1.8.3.2
^ permalink raw reply related
* [PATCH 7/7] OMAPDSS: add dedicated fck PLL support
From: Tomi Valkeinen @ 2013-11-18 12:39 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778344-8226-1-git-send-email-tomi.valkeinen@ti.com>
This patch adds support for SoCs that have a dedicated DSS PLL used for
DSS function clock.
If there is no dss parent clock defined, it is presumed that the
functionl clock rate can be set (almost) freely. The code calculates the
highest allowed fck rate, which when divided with some integer gives the
required pck.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dss.c | 27 ++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 08c58eb..9a145da 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -446,12 +446,20 @@ bool dss_div_calc(unsigned long pck, unsigned long fck_min,
unsigned long prate;
unsigned m;
+ fck_hw_max = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK);
+
if (dss.parent_clk = NULL) {
- fck = clk_get_rate(dss.dss_clk);
+ unsigned pckd;
+
+ pckd = fck_hw_max / pck;
+
+ fck = pck * pckd;
+
+ fck = clk_round_rate(dss.dss_clk, fck);
+
return func(fck, data);
}
- fck_hw_max = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK);
fckd_hw_max = dss.feat->fck_div_max;
m = dss.feat->dss_fck_multiplier;
@@ -503,16 +511,17 @@ static int dss_setup_default_clock(void)
unsigned fck_div;
int r;
- if (dss.parent_clk = NULL)
- return 0;
-
max_dss_fck = dss_feat_get_param_max(FEAT_PARAM_DSS_FCK);
- prate = clk_get_rate(dss.parent_clk);
+ if (dss.parent_clk = NULL) {
+ fck = clk_round_rate(dss.dss_clk, max_dss_fck);
+ } else {
+ prate = clk_get_rate(dss.parent_clk);
- fck_div = DIV_ROUND_UP(prate * dss.feat->dss_fck_multiplier,
- max_dss_fck);
- fck = prate / fck_div * dss.feat->dss_fck_multiplier;
+ fck_div = DIV_ROUND_UP(prate * dss.feat->dss_fck_multiplier,
+ max_dss_fck);
+ fck = prate / fck_div * dss.feat->dss_fck_multiplier;
+ }
r = dss_set_fck_rate(fck);
if (r)
--
1.8.3.2
^ permalink raw reply related
* [PATCH 1/4] OMAPDSS: fix missing EXPORT_SYMBOL()s
From: Tomi Valkeinen @ 2013-11-18 12:44 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
Functions dispc_ovl_set_fifo_threshold and
dispc_ovl_compute_fifo_thresholds need to be exported. Add the
EXPORT_SYMBOLs.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dispc.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index 91c687f..aa95ba5 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -1201,6 +1201,7 @@ void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high)
FLD_VAL(high, hi_start, hi_end) |
FLD_VAL(low, lo_start, lo_end));
}
+EXPORT_SYMBOL(dispc_ovl_set_fifo_threshold);
void dispc_enable_fifomerge(bool enable)
{
@@ -1259,6 +1260,7 @@ void dispc_ovl_compute_fifo_thresholds(enum omap_plane plane,
*fifo_high = total_fifo_size - buf_unit;
}
}
+EXPORT_SYMBOL(dispc_ovl_compute_fifo_thresholds);
static void dispc_ovl_set_fir(enum omap_plane plane,
int hinc, int vinc,
--
1.8.3.2
^ permalink raw reply related
* [PATCH 2/4] OMAPDSS: fix debug prints
From: Tomi Valkeinen @ 2013-11-18 12:44 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778649-9396-1-git-send-email-tomi.valkeinen@ti.com>
Fix debug prints all over omapdss:
* add missing linefeeds
* change pr_err/pr_debug to DSSERR/DSSDBG
* add missing DSS_SUBSYS_NAMEs
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/apply.c | 8 ++++----
drivers/video/omap2/dss/hdmi4_core.c | 16 +++++++++-------
drivers/video/omap2/dss/hdmi_common.c | 2 ++
drivers/video/omap2/dss/hdmi_pll.c | 16 +++++++++-------
drivers/video/omap2/dss/hdmi_wp.c | 12 +++++++-----
5 files changed, 31 insertions(+), 23 deletions(-)
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c
index 60758db..24cd7c2 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/omap2/dss/apply.c
@@ -629,7 +629,7 @@ static void dss_ovl_write_regs(struct omap_overlay *ovl)
struct mgr_priv_data *mp;
int r;
- DSSDBG("writing ovl %d regs", ovl->id);
+ DSSDBG("writing ovl %d regs\n", ovl->id);
if (!op->enabled || !op->info_dirty)
return;
@@ -664,7 +664,7 @@ static void dss_ovl_write_regs_extra(struct omap_overlay *ovl)
struct ovl_priv_data *op = get_ovl_priv(ovl);
struct mgr_priv_data *mp;
- DSSDBG("writing ovl %d regs extra", ovl->id);
+ DSSDBG("writing ovl %d regs extra\n", ovl->id);
if (!op->extra_info_dirty)
return;
@@ -687,7 +687,7 @@ static void dss_mgr_write_regs(struct omap_overlay_manager *mgr)
struct mgr_priv_data *mp = get_mgr_priv(mgr);
struct omap_overlay *ovl;
- DSSDBG("writing mgr %d regs", mgr->id);
+ DSSDBG("writing mgr %d regs\n", mgr->id);
if (!mp->enabled)
return;
@@ -713,7 +713,7 @@ static void dss_mgr_write_regs_extra(struct omap_overlay_manager *mgr)
{
struct mgr_priv_data *mp = get_mgr_priv(mgr);
- DSSDBG("writing mgr %d regs extra", mgr->id);
+ DSSDBG("writing mgr %d regs extra\n", mgr->id);
if (!mp->extra_info_dirty)
return;
diff --git a/drivers/video/omap2/dss/hdmi4_core.c b/drivers/video/omap2/dss/hdmi4_core.c
index 5dd5e54..2386a3d 100644
--- a/drivers/video/omap2/dss/hdmi4_core.c
+++ b/drivers/video/omap2/dss/hdmi4_core.c
@@ -19,6 +19,8 @@
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#define DSS_SUBSYS_NAME "HDMICORE"
+
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/err.h>
@@ -125,12 +127,12 @@ static int hdmi_core_ddc_edid(struct hdmi_core_data *core,
/* HDMI_CORE_DDC_STATUS_BUS_LOW */
if (REG_GET(base, HDMI_CORE_DDC_STATUS, 6, 6) = 1) {
- pr_err("I2C Bus Low?\n");
+ DSSERR("I2C Bus Low?\n");
return -EIO;
}
/* HDMI_CORE_DDC_STATUS_NO_ACK */
if (REG_GET(base, HDMI_CORE_DDC_STATUS, 5, 5) = 1) {
- pr_err("I2C No Ack\n");
+ DSSERR("I2C No Ack\n");
return -EIO;
}
@@ -161,7 +163,7 @@ static int hdmi_core_ddc_edid(struct hdmi_core_data *core,
checksum += pedid[i];
if (checksum != 0) {
- pr_err("E-EDID checksum failed!!\n");
+ DSSERR("E-EDID checksum failed!!\n");
return -EIO;
}
@@ -199,7 +201,7 @@ static void hdmi_core_init(struct hdmi_core_video_config *video_cfg,
struct hdmi_core_infoframe_avi *avi_cfg,
struct hdmi_core_packet_enable_repeat *repeat_cfg)
{
- pr_debug("Enter hdmi_core_init\n");
+ DSSDBG("Enter hdmi_core_init\n");
/* video core */
video_cfg->ip_bus_width = HDMI_INPUT_8BIT;
@@ -241,19 +243,19 @@ static void hdmi_core_init(struct hdmi_core_video_config *video_cfg,
static void hdmi_core_powerdown_disable(struct hdmi_core_data *core)
{
- pr_debug("Enter hdmi_core_powerdown_disable\n");
+ DSSDBG("Enter hdmi_core_powerdown_disable\n");
REG_FLD_MOD(core->base, HDMI_CORE_SYS_SYS_CTRL1, 0x0, 0, 0);
}
static void hdmi_core_swreset_release(struct hdmi_core_data *core)
{
- pr_debug("Enter hdmi_core_swreset_release\n");
+ DSSDBG("Enter hdmi_core_swreset_release\n");
REG_FLD_MOD(core->base, HDMI_CORE_SYS_SRST, 0x0, 0, 0);
}
static void hdmi_core_swreset_assert(struct hdmi_core_data *core)
{
- pr_debug("Enter hdmi_core_swreset_assert\n");
+ DSSDBG("Enter hdmi_core_swreset_assert\n");
REG_FLD_MOD(core->base, HDMI_CORE_SYS_SRST, 0x1, 0, 0);
}
diff --git a/drivers/video/omap2/dss/hdmi_common.c b/drivers/video/omap2/dss/hdmi_common.c
index 5586aaa..0614922 100644
--- a/drivers/video/omap2/dss/hdmi_common.c
+++ b/drivers/video/omap2/dss/hdmi_common.c
@@ -13,6 +13,8 @@
* map it to corresponding CEA or VESA index.
*/
+#define DSS_SUBSYS_NAME "HDMI"
+
#include <linux/kernel.h>
#include <linux/err.h>
#include <video/omapdss.h>
diff --git a/drivers/video/omap2/dss/hdmi_pll.c b/drivers/video/omap2/dss/hdmi_pll.c
index d3e6e78..a06f4ee 100644
--- a/drivers/video/omap2/dss/hdmi_pll.c
+++ b/drivers/video/omap2/dss/hdmi_pll.c
@@ -8,6 +8,8 @@
* the Free Software Foundation.
*/
+#define DSS_SUBSYS_NAME "HDMIPLL"
+
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/err.h>
@@ -127,24 +129,24 @@ static int hdmi_pll_config(struct hdmi_pll_data *pll)
/* wait for bit change */
if (hdmi_wait_for_bit_change(pll->base, PLLCTRL_PLL_GO,
0, 0, 1) != 1) {
- pr_err("PLL GO bit not set\n");
+ DSSERR("PLL GO bit not set\n");
return -ETIMEDOUT;
}
/* Wait till the lock bit is set in PLL status */
if (hdmi_wait_for_bit_change(pll->base,
PLLCTRL_PLL_STATUS, 1, 1, 1) != 1) {
- pr_err("cannot lock PLL\n");
- pr_err("CFG1 0x%x\n",
+ DSSERR("cannot lock PLL\n");
+ DSSERR("CFG1 0x%x\n",
hdmi_read_reg(pll->base, PLLCTRL_CFG1));
- pr_err("CFG2 0x%x\n",
+ DSSERR("CFG2 0x%x\n",
hdmi_read_reg(pll->base, PLLCTRL_CFG2));
- pr_err("CFG4 0x%x\n",
+ DSSERR("CFG4 0x%x\n",
hdmi_read_reg(pll->base, PLLCTRL_CFG4));
return -ETIMEDOUT;
}
- pr_debug("PLL locked!\n");
+ DSSDBG("PLL locked!\n");
return 0;
}
@@ -157,7 +159,7 @@ static int hdmi_pll_reset(struct hdmi_pll_data *pll)
/* READ 0x0 reset is in progress */
if (hdmi_wait_for_bit_change(pll->base, PLLCTRL_PLL_STATUS, 0, 0, 1)
!= 1) {
- pr_err("Failed to sysreset PLL\n");
+ DSSERR("Failed to sysreset PLL\n");
return -ETIMEDOUT;
}
diff --git a/drivers/video/omap2/dss/hdmi_wp.c b/drivers/video/omap2/dss/hdmi_wp.c
index 8151d89..fa8e094 100644
--- a/drivers/video/omap2/dss/hdmi_wp.c
+++ b/drivers/video/omap2/dss/hdmi_wp.c
@@ -8,6 +8,8 @@
* the Free Software Foundation.
*/
+#define DSS_SUBSYS_NAME "HDMIWP"
+
#include <linux/kernel.h>
#include <linux/err.h>
#include <linux/io.h>
@@ -76,7 +78,7 @@ int hdmi_wp_set_phy_pwr(struct hdmi_wp_data *wp, enum hdmi_phy_pwr val)
/* Status of the power control of HDMI PHY */
if (hdmi_wait_for_bit_change(wp->base, HDMI_WP_PWR_CTRL, 5, 4, val)
!= val) {
- pr_err("Failed to set PHY power mode to %d\n", val);
+ DSSERR("Failed to set PHY power mode to %d\n", val);
return -ETIMEDOUT;
}
@@ -92,7 +94,7 @@ int hdmi_wp_set_pll_pwr(struct hdmi_wp_data *wp, enum hdmi_pll_pwr val)
/* wait till PHY_PWR_STATUS is set */
if (hdmi_wait_for_bit_change(wp->base, HDMI_WP_PWR_CTRL, 1, 0, val)
!= val) {
- pr_err("Failed to set PLL_PWR_STATUS\n");
+ DSSERR("Failed to set PLL_PWR_STATUS\n");
return -ETIMEDOUT;
}
@@ -129,7 +131,7 @@ void hdmi_wp_video_config_interface(struct hdmi_wp_data *wp,
{
u32 r;
bool vsync_pol, hsync_pol;
- pr_debug("Enter hdmi_wp_video_config_interface\n");
+ DSSDBG("Enter hdmi_wp_video_config_interface\n");
vsync_pol = timings->vsync_level = OMAPDSS_SIG_ACTIVE_HIGH;
hsync_pol = timings->hsync_level = OMAPDSS_SIG_ACTIVE_HIGH;
@@ -148,7 +150,7 @@ void hdmi_wp_video_config_timing(struct hdmi_wp_data *wp,
u32 timing_h = 0;
u32 timing_v = 0;
- pr_debug("Enter hdmi_wp_video_config_timing\n");
+ DSSDBG("Enter hdmi_wp_video_config_timing\n");
timing_h |= FLD_VAL(timings->hbp, 31, 20);
timing_h |= FLD_VAL(timings->hfp, 19, 8);
@@ -164,7 +166,7 @@ void hdmi_wp_video_config_timing(struct hdmi_wp_data *wp,
void hdmi_wp_init_vid_fmt_timings(struct hdmi_video_format *video_fmt,
struct omap_video_timings *timings, struct hdmi_config *param)
{
- pr_debug("Enter hdmi_wp_video_init_format\n");
+ DSSDBG("Enter hdmi_wp_video_init_format\n");
video_fmt->packing_mode = HDMI_PACK_10b_RGB_YUV444;
video_fmt->y_res = param->timings.y_res;
--
1.8.3.2
^ permalink raw reply related
* [PATCH 3/4] OMAPDSS: apply fixes
From: Tomi Valkeinen @ 2013-11-18 12:44 UTC (permalink / raw)
To: linux-fbdev, linux-omap; +Cc: Archit Taneja, Tomi Valkeinen
In-Reply-To: <1384778649-9396-1-git-send-email-tomi.valkeinen@ti.com>
When omapfb does ovl->get_overlay_info, ovl->set_overlay_info, the set
function may fail even if the info has not been changed. This is because
omapdss doesn't initialize the info, but expect the caller to set valid
values.
Normally that is the case, but there is at least one corner case: if
omapfb has not allocated memory for the overlay yet, and the user uses
ioctl to disable the overlay to make sure it's disabled. In this case
get_overlay_info returns invalid data, but the user is only interested
in setting the overlay to disabled, not configuring it, and
set_overlay_info fails.
The issue is made possible by the omapfb's setup_plane ioctl, which
groups overlay configuration and overlay enable/disable bit into the
same struct. Thus, when you are disabling an overlay, you are also
configuring it.
This is a bit counter intuitive, so I think it's better to initialize
the info to some valid values.
The fields requiring initialization are color_mode and rotation_type,
and also we need to remove the check for (paddr = 0), as paddr is 0 for
unallocated overlay (but it's still fine to disable the overlay).
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/apply.c | 3 +++
drivers/video/omap2/dss/overlay.c | 5 -----
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/video/omap2/dss/apply.c b/drivers/video/omap2/dss/apply.c
index 24cd7c2..0a0b084 100644
--- a/drivers/video/omap2/dss/apply.c
+++ b/drivers/video/omap2/dss/apply.c
@@ -149,6 +149,9 @@ static void apply_init_priv(void)
op = &dss_data.ovl_priv_data_array[i];
+ op->info.color_mode = OMAP_DSS_COLOR_RGB16;
+ op->info.rotation_type = OMAP_DSS_ROT_DMA;
+
op->info.global_alpha = 255;
switch (i) {
diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/omap2/dss/overlay.c
index eccde32..2f7cee9 100644
--- a/drivers/video/omap2/dss/overlay.c
+++ b/drivers/video/omap2/dss/overlay.c
@@ -113,11 +113,6 @@ void dss_uninit_overlays(struct platform_device *pdev)
int dss_ovl_simple_check(struct omap_overlay *ovl,
const struct omap_overlay_info *info)
{
- if (info->paddr = 0) {
- DSSERR("check_overlay: paddr cannot be 0\n");
- return -EINVAL;
- }
-
if ((ovl->caps & OMAP_DSS_OVL_CAP_SCALE) = 0) {
if (info->out_width != 0 && info->width != info->out_width) {
DSSERR("check_overlay: overlay %d doesn't support "
--
1.8.3.2
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox