forked from Minki/linux
sh: add a start_transfer() callback to the LCDC driver
This patch adds a ->start_transfer() callback to the driver sh_mobile_lcdcfb.c. The callback is used to program the LCDC panel in the case of one-shot mode. Needed by the LCD controller used on the KFR2R09 board. Signed-off-by: Magnus Damm <damm@opensource.se> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
b25b975846
commit
ef61aae4dd
@ -281,6 +281,7 @@ static void sh_mobile_lcdc_deferred_io(struct fb_info *info,
|
|||||||
struct list_head *pagelist)
|
struct list_head *pagelist)
|
||||||
{
|
{
|
||||||
struct sh_mobile_lcdc_chan *ch = info->par;
|
struct sh_mobile_lcdc_chan *ch = info->par;
|
||||||
|
struct sh_mobile_lcdc_board_cfg *bcfg = &ch->cfg.board_cfg;
|
||||||
|
|
||||||
/* enable clocks before accessing hardware */
|
/* enable clocks before accessing hardware */
|
||||||
sh_mobile_lcdc_clk_on(ch->lcdc);
|
sh_mobile_lcdc_clk_on(ch->lcdc);
|
||||||
@ -305,10 +306,17 @@ static void sh_mobile_lcdc_deferred_io(struct fb_info *info,
|
|||||||
|
|
||||||
/* trigger panel update */
|
/* trigger panel update */
|
||||||
dma_map_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE);
|
dma_map_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE);
|
||||||
|
if (bcfg->start_transfer)
|
||||||
|
bcfg->start_transfer(bcfg->board_data, ch,
|
||||||
|
&sh_mobile_lcdc_sys_bus_ops);
|
||||||
lcdc_write_chan(ch, LDSM2R, 1);
|
lcdc_write_chan(ch, LDSM2R, 1);
|
||||||
dma_unmap_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE);
|
dma_unmap_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE);
|
||||||
} else
|
} else {
|
||||||
|
if (bcfg->start_transfer)
|
||||||
|
bcfg->start_transfer(bcfg->board_data, ch,
|
||||||
|
&sh_mobile_lcdc_sys_bus_ops);
|
||||||
lcdc_write_chan(ch, LDSM2R, 1);
|
lcdc_write_chan(ch, LDSM2R, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sh_mobile_lcdc_deferred_io_touch(struct fb_info *info)
|
static void sh_mobile_lcdc_deferred_io_touch(struct fb_info *info)
|
||||||
|
@ -50,6 +50,8 @@ struct sh_mobile_lcdc_board_cfg {
|
|||||||
void *board_data;
|
void *board_data;
|
||||||
int (*setup_sys)(void *board_data, void *sys_ops_handle,
|
int (*setup_sys)(void *board_data, void *sys_ops_handle,
|
||||||
struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
|
struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
|
||||||
|
void (*start_transfer)(void *board_data, void *sys_ops_handle,
|
||||||
|
struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
|
||||||
void (*display_on)(void *board_data);
|
void (*display_on)(void *board_data);
|
||||||
void (*display_off)(void *board_data);
|
void (*display_off)(void *board_data);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user