aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/sh_mobile_lcdcfb.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2014-01-17fbdev: sh_mobile_lcdcfb: Don't use plain 0 as NULL pointerLaurent Pinchart1-1/+1
This fixes a sparse warning. Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: linux-fbdev@vger.kernel.org Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2013-11-11fb: reorder the lock sequence to fix potential dead lockGu Zheng1-4/+6
Following commits: 50e244cc79 fb: rework locking to fix lock ordering on takeover e93a9a8687 fb: Yet another band-aid for fixing lockdep mess 054430e773 fbcon: fix locking harder reworked locking to fix related lock ordering on takeover, and introduced console_lock into fbmem, but it seems that the new lock sequence(fb_info->lock ---> console_lock) is against with the one in console_callback(console_lock ---> fb_info->lock), and leads to a potential dead lock as following: [ 601.079000] ====================================================== [ 601.079000] [ INFO: possible circular locking dependency detected ] [ 601.079000] 3.11.0 #189 Not tainted [ 601.079000] ------------------------------------------------------- [ 601.079000] kworker/0:3/619 is trying to acquire lock: [ 601.079000] (&fb_info->lock){+.+.+.}, at: [<ffffffff81397566>] lock_fb_info+0x26/0x60 [ 601.079000] but task is already holding lock: [ 601.079000] (console_lock){+.+.+.}, at: [<ffffffff8141aae3>] console_callback+0x13/0x160 [ 601.079000] which lock already depends on the new lock. [ 601.079000] the existing dependency chain (in reverse order) is: [ 601.079000] -> #1 (console_lock){+.+.+.}: [ 601.079000] [<ffffffff810dc971>] lock_acquire+0xa1/0x140 [ 601.079000] [<ffffffff810c6267>] console_lock+0x77/0x80 [ 601.079000] [<ffffffff81399448>] register_framebuffer+0x1d8/0x320 [ 601.079000] [<ffffffff81cfb4c8>] efifb_probe+0x408/0x48f [ 601.079000] [<ffffffff8144a963>] platform_drv_probe+0x43/0x80 [ 601.079000] [<ffffffff8144853b>] driver_probe_device+0x8b/0x390 [ 601.079000] [<ffffffff814488eb>] __driver_attach+0xab/0xb0 [ 601.079000] [<ffffffff814463bd>] bus_for_each_dev+0x5d/0xa0 [ 601.079000] [<ffffffff81447e6e>] driver_attach+0x1e/0x20 [ 601.079000] [<ffffffff81447a07>] bus_add_driver+0x117/0x290 [ 601.079000] [<ffffffff81448fea>] driver_register+0x7a/0x170 [ 601.079000] [<ffffffff8144a10a>] __platform_driver_register+0x4a/0x50 [ 601.079000] [<ffffffff8144a12d>] platform_driver_probe+0x1d/0xb0 [ 601.079000] [<ffffffff81cfb0a1>] efifb_init+0x273/0x292 [ 601.079000] [<ffffffff81002132>] do_one_initcall+0x102/0x1c0 [ 601.079000] [<ffffffff81cb80a6>] kernel_init_freeable+0x15d/0x1ef [ 601.079000] [<ffffffff8166d2de>] kernel_init+0xe/0xf0 [ 601.079000] [<ffffffff816914ec>] ret_from_fork+0x7c/0xb0 [ 601.079000] -> #0 (&fb_info->lock){+.+.+.}: [ 601.079000] [<ffffffff810dc1d8>] __lock_acquire+0x1e18/0x1f10 [ 601.079000] [<ffffffff810dc971>] lock_acquire+0xa1/0x140 [ 601.079000] [<ffffffff816835ca>] mutex_lock_nested+0x7a/0x3b0 [ 601.079000] [<ffffffff81397566>] lock_fb_info+0x26/0x60 [ 601.079000] [<ffffffff813a4aeb>] fbcon_blank+0x29b/0x2e0 [ 601.079000] [<ffffffff81418658>] do_blank_screen+0x1d8/0x280 [ 601.079000] [<ffffffff8141ab34>] console_callback+0x64/0x160 [ 601.079000] [<ffffffff8108d855>] process_one_work+0x1f5/0x540 [ 601.079000] [<ffffffff8108e04c>] worker_thread+0x11c/0x370 [ 601.079000] [<ffffffff81095fbd>] kthread+0xed/0x100 [ 601.079000] [<ffffffff816914ec>] ret_from_fork+0x7c/0xb0 [ 601.079000] other info that might help us debug this: [ 601.079000] Possible unsafe locking scenario: [ 601.079000] CPU0 CPU1 [ 601.079000] ---- ---- [ 601.079000] lock(console_lock); [ 601.079000] lock(&fb_info->lock); [ 601.079000] lock(console_lock); [ 601.079000] lock(&fb_info->lock); [ 601.079000] *** DEADLOCK *** so we reorder the lock sequence the same as it in console_callback() to avoid this issue. And following Tomi's suggestion, fix these similar issues all in fb subsystem. Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2013-11-11fbdev: shmobile-lcdcfb: Convert to clk_prepare/unprepareLaurent Pinchart1-2/+2
Turn clk_enable() and clk_disable() calls into clk_prepare_enable() and clk_disable_unprepare() to get ready for the migration to the common clock framework. Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: linux-fbdev@vger.kernel.org Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2013-03-27fbdev: sh_mobile_lcdc: fixup B side hsync adjust settingsKuninori Morimoto1-0/+1
The lcdc B side horizon output is shifted if sh_mobile_lcdc_pan() was called. This patch fixup this issue. It is tested on R8A7740 Armadillo800eva HDMI output. Special thanks to Fukushima-san, and Sano-san Reported-by: Osamu Fukushima <osamu.fukushima.wr@renesas.com> Signed-off-by: Hideyuki Sano <hideyuki.sano.dn@renesas.com> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
2013-01-03Drivers: video: remove __dev* attributes.Greg Kroah-Hartman1-9/+9
CONFIG_HOTPLUG is going away as an option. As a result, the __dev* markings need to be removed. This change removes the use of __devinit, __devexit_p, __devinitdata, __devinitconst, and __devexit from these drivers. Based on patches originally written by Bill Pemberton, but redone by me in order to handle some of the coding style issues better, by hand. Cc: Bill Pemberton <wfp5p@virginia.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-11-21fbdev: sh_mobile_lcdc: Make sh_mobile_lcdc_sys_bus_ops staticLaurent Pinchart1-1/+1
The structure isn't used outside of its compilation unit, make it static. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-11-21fbdev: sh_mobile_lcdc: Store the backlight brightness internallyLaurent Pinchart1-1/+2
There's no need to query the hardware for the currenty brightness value through a platform data callback when we can cache the value internally in the LCDC driver. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-11-21fbdev: sh_mobile_lcdc: Remove priv argument from channel and overlay initLaurent Pinchart1-18/+17
The channel and overlay init functions operate on a channel and an overlay, don't pass the priv parameter explicitly. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-11-21fbdev: sh_mobile_lcdc: Rename mode argument to modesLaurent Pinchart1-3/+3
The sh_mobile_lcdc_channel_fb_init() mode argument is used to pass a list of modes, rename it to modes. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-11-21fbdev: sh_mobile_lcdc: Get display dimensions from the channel structureLaurent Pinchart1-4/+4
Get the display dimensions directly from the channel structure instead of recomputing them from the monitor specs or accessing the platform data. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-11-21fbdev: sh_mobile_lcdc: use dma_mmap_coherentHideki EIRAKU1-0/+20
fb_mmap() implemented in fbmem.c uses smem_start as the physical address of the frame buffer. In the sh_mobile_lcdc driver, the smem_start is a dma_addr_t that is not a physical address when IOMMU is enabled. dma_mmap_coherent() maps the address correctly. Signed-off-by: Hideki EIRAKU <hdk@igel.co.jp> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-07-29fbdev: sh_mobile_lcdc: Fix vertical panning stepLaurent Pinchart1-6/+6
Commit 15dede882e564601947f2ce4b647742c0351be6d added support for horizontal panning but accidentally computes the Y pan step value incorrectly for NV12/21 and NV16/61 formats. Fix this. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
2012-07-19fbdev: sh_mobile_lcdc: Fix pan offset computation in YUV modeLaurent Pinchart1-58/+52
The chroma plane offset in memory is equal to the luma plane maximum size. Fix offset computations. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-07-19fbdev: sh_mobile_lcdc: Fix overlay registers update during pan operationLaurent Pinchart1-0/+5
Updating overlay registers require switching to overlay update mode. This was correctly done when configuring the overlay format and size, but not when updating the base address registers during pan operation. Fix it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-07-19fbdev: sh_mobile_lcdc: Support horizontal panningLaurent Pinchart1-6/+16
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-07-19fbdev: sh_mobile_lcdc: Use channel configuration to initialize fb deviceLaurent Pinchart1-4/+6
Copy the x and y virtual resolutions from the channel information instead of recomputing them. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-07-19fbdev: sh_mobile_lcdc: Fix line pitch computationLaurent Pinchart1-8/+8
Line pitch depends on the virtual horizontal resolution, compute it accordingly. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-07-19fbdev: sh_mobile_lcdc: Destroy mutex at remove timeLaurent Pinchart1-2/+5
Add a missing mutex_destroy() call when the driver is unbound from the device. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-07-19sh_mobile_meram: Use direct function calls for the public APILaurent Pinchart1-17/+10
There's no reason to use abstract operation pointers to implement the MERAM API. Replace them by direct function calls. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-07-19sh_mobile_meram: Rename operations to cache_[alloc|free|update]Laurent Pinchart1-17/+15
The MERAM operations meram_register, meram_unregister and meram_update handle LCDC cache. In preparation for "raw" MERAM allocation, rename them to more appropriate names. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-06-20fbdev: sh_mobile_lcdc: Implement overlays supportLaurent Pinchart1-72/+860
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-06-20fbdev: sh_mobile_lcdc: Rename fb operation handlers with a common prefixLaurent Pinchart1-23/+25
Make all fb operation handlers start with sh_mobile_lcdc_ in preparation for the multi-plane support. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-06-20fbdev: sh_mobile_lcdc: Constify sh_mobile_lcdc_fix structureLaurent Pinchart1-1/+1
The structure is only read, make it const. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-05-21fbdev: sh_mobile_lcdc: Don't confuse line size with pitchLaurent Pinchart1-2/+3
When using the MERAM the LCDC line size needs to be programmed with a MERAM-specific value different than the real frame buffer pitch. Fix it. Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Cc: stable@vger.kernel.org # for 3.4 Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-03-12fbdev: sh_mobile_meram: Remove unneeded sanity checksLaurent Pinchart1-4/+1
The meram_register(), meram_unregister() and meram_update() operations check that the pointers they get from the caller are not NULL. Those checks can be remove, as the caller already ensures that the pointers are valid. The platform sanity checks can also be removed, as the operations can't be accessed without valid platform data anyway. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_meram: Don't perform update in register operationLaurent Pinchart1-3/+5
Remove the RGB or Y/C base address update from the meram_register() operation, as this belongs to the meram_update() operation. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Don't store copy of platform dataLaurent Pinchart1-36/+35
Instead of copying the whole platform data structure to struct sh_mobile_lcdc_chan, store a const pointer to the channel platform data. MERAM configuration information needs to be changed at runtime, so copy it to struct sh_mobile_lcdc_chan. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_meram: Allocate ICBs automaticallyLaurent Pinchart1-15/+12
Instead of manually specifying the ICBs to use in platform data, allocate them automatically at runtime. The range of reserved ICBs (for instance to be used through UIO), if any, is passed in the platform data reserved_icbs field as a bitmask. The MERAM registration function now returns a pointer to an opaque MERAM object, which is passed to the update and unregistration functions. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Pass channel pointer to sh_mobile_wait_for_vsyncLaurent Pinchart1-24/+23
The sh_mobile_wait_for_vsync() function isn't related to the fbdev API, make it generic by passing a channel pointer instead of an fb_info pointer. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Store configuration in channel structureLaurent Pinchart1-55/+54
Store the frame buffer configuration (colorspace, visible/virtual horizontal and vertical resolutions and line pitch) in the sh_mobile_lcdc_chan structure, and use it instead of accessing fb_info. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Pass physical device pointer to DMA functionsLaurent Pinchart1-2/+3
The dma_map_sg() and dma_unmap_sg() functions need a pointer to the physical device. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Split fb init/cleanup from channel init/cleanupLaurent Pinchart1-128/+157
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Store the format in struct sh_mobile_lcdc_chanLaurent Pinchart1-11/+10
Store the active format in the channel structure, and use it instead of parsing info->var all over the place when the format is needed. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Add sh_mobile_format_info() functionLaurent Pinchart1-72/+102
The function returns a pointer to a structure describing a format based on its fourcc. Use the function where applicable instead of hardcoded switch-case statements. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Rename (lcd|num)_cfg (lcd|num)_modesLaurent Pinchart1-10/+10
The struct sh_mobile_lcdc_chan_cfg platform data contains a list of video modes. Name the lcd_cfg and num_cfg fields to reflect that they describe video modes. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Store display mode in a struct fb_videomodeLaurent Pinchart1-35/+39
Embed struct fb_videomode instead of struct fb_var_screeninfo in struct sh_mobile_lcdc_chan to store the display mode. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_hdmi: Don't access LCDC fb_infoLaurent Pinchart1-11/+13
The LCDC fb_info structure is only used to retrieve the default video mode in case none of the modes advertised by EDID information is acceptable. Pass a pointer to the default mode through the sh_mobile_lcdc_entity structure instead. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Pass a video mode to the notify callbackLaurent Pinchart1-17/+19
Pass pointers to struct fb_videomode and struct fb_monspecs instead of struct fb_var_screeninfo to the notify callback. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12sh_mobile_lcdc: Add display notify callback to sh_mobile_lcdc_chanLaurent Pinchart1-0/+84
The callback implements 3 notification events: - SH_MOBILE_LCDC_EVENT_DISPLAY_CONNECT notifies the LCDC that the display has been connected - SH_MOBILE_LCDC_EVENT_DISPLAY_DISCONNECT notifies the LCDC that the display has been disconnected - SH_MOBILE_LCDC_EVENT_DISPLAY_MODE notifies that LCDC that a display mode has been detected Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Return display connection state in display_onLaurent Pinchart1-1/+7
Return true if the display is connected and false otherwise. Set the fb info state to FBINFO_STATE_SUSPENDED in the sh_mobile_lcdc driver when the display is not connected. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Remove fb_info parameter to display_on operationLaurent Pinchart1-1/+1
The parameter is unused, remove it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12sh_mobile_lcdc: Add an lcdc channel pointer to sh_mobile_lcdc_entityLaurent Pinchart1-1/+4
The field will be used by the transmitter drivers to access sh_mobile_lcdc_chan fields such as fb_info. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Merge board_cfg and lcd_size_cfg into panel_cfgLaurent Pinchart1-18/+17
Update board code accordingly. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Move brightness ops to sh_mobile_lcdc_bl_infoLaurent Pinchart1-4/+2
Update board code accordingly. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Remove board configuration board_data fieldLaurent Pinchart1-9/+7
The field is unused, remove it. Update board code accordingly. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Remove board configuration owner fieldLaurent Pinchart1-6/+2
The field is unused, remove it. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Handle HDMI/MIPI transmitter device directlyLaurent Pinchart1-5/+26
Pass a pointer to the transmitter device through platform data, retrieve the corresponding sh_mobile_lcdc_entity structure in the probe method and call the transmitter display_on/off methods directly. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Create functions to turn the display on/offLaurent Pinchart1-25/+28
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Don't pass struct device aroundLaurent Pinchart1-20/+21
Pass a pointer to a struct sh_mobile_lcdc_priv instead, which stores a pointer to the device. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2012-03-12fbdev: sh_mobile_lcdc: Move pm runtime enable to probe()Laurent Pinchart1-18/+16
The pm_runtime_enable() and pm_runtime_resume() calls don't belong to sh_mobile_lcdc_setup_clocks(). Move them to the probe function. Remove the unneeded pm_runtime_resume() call. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>