^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * File: drivers/video/omap/omapfb.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Framebuffer driver for TI OMAP boards
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (C) 2004 Nokia Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Author: Imre Deak <imre.deak@nokia.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #ifndef __OMAPFB_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define __OMAPFB_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/fb.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/mutex.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/omapfb.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define OMAPFB_EVENT_READY 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define OMAPFB_EVENT_DISABLED 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define OMAP_LCDC_INV_VSYNC 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define OMAP_LCDC_INV_HSYNC 0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define OMAP_LCDC_INV_PIX_CLOCK 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define OMAP_LCDC_INV_OUTPUT_EN 0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define OMAP_LCDC_HSVS_RISING_EDGE 0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define OMAP_LCDC_HSVS_OPPOSITE 0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define OMAP_LCDC_SIGNAL_MASK 0x003f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define OMAP_LCDC_PANEL_TFT 0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define OMAPFB_PLANE_XRES_MIN 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define OMAPFB_PLANE_YRES_MIN 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) struct omapfb_device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define OMAPFB_PLANE_NUM 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) struct omapfb_mem_region {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) u32 paddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) void __iomem *vaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) unsigned long size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) u8 type; /* OMAPFB_PLANE_MEM_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) enum omapfb_color_format format;/* OMAPFB_COLOR_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) unsigned format_used:1; /* Must be set when format is set.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) * Needed b/c of the badly chosen 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) * base for OMAPFB_COLOR_* values
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) unsigned alloc:1; /* allocated by the driver */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) unsigned map:1; /* kernel mapped by the driver */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) struct omapfb_mem_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) int region_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) struct omapfb_mem_region region[OMAPFB_PLANE_NUM];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) struct lcd_panel {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) int config; /* TFT/STN, signal inversion */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) int bpp; /* Pixel format in fb mem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) int data_lines; /* Lines on LCD HW interface */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) int x_res, y_res;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) int pixel_clock; /* In kHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) int hsw; /* Horizontal synchronization
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) pulse width */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) int hfp; /* Horizontal front porch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) int hbp; /* Horizontal back porch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) int vsw; /* Vertical synchronization
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) pulse width */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) int vfp; /* Vertical front porch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) int vbp; /* Vertical back porch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) int acb; /* ac-bias pin frequency */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) int pcd; /* pixel clock divider.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) Obsolete use pixel_clock instead */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) int (*init) (struct lcd_panel *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) struct omapfb_device *fbdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) void (*cleanup) (struct lcd_panel *panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) int (*enable) (struct lcd_panel *panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) void (*disable) (struct lcd_panel *panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) unsigned long (*get_caps) (struct lcd_panel *panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) int (*set_bklight_level)(struct lcd_panel *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) unsigned int level);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) unsigned int (*get_bklight_level)(struct lcd_panel *panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) unsigned int (*get_bklight_max) (struct lcd_panel *panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) int (*run_test) (struct lcd_panel *panel, int test_num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) struct extif_timings {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) int cs_on_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) int cs_off_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) int we_on_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) int we_off_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) int re_on_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) int re_off_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) int we_cycle_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) int re_cycle_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) int cs_pulse_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) int access_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) int clk_div;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) u32 tim[5]; /* set by extif->convert_timings */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) int converted;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) struct lcd_ctrl_extif {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) int (*init) (struct omapfb_device *fbdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) void (*cleanup) (void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) void (*get_clk_info) (u32 *clk_period, u32 *max_clk_div);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) unsigned long (*get_max_tx_rate)(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) int (*convert_timings) (struct extif_timings *timings);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) void (*set_timings) (const struct extif_timings *timings);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) void (*set_bits_per_cycle)(int bpc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) void (*write_command) (const void *buf, unsigned int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) void (*read_data) (void *buf, unsigned int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) void (*write_data) (const void *buf, unsigned int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) void (*transfer_area) (int width, int height,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) void (callback)(void *data), void *data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) int (*setup_tearsync) (unsigned pin_cnt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) unsigned hs_pulse_time, unsigned vs_pulse_time,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) int hs_pol_inv, int vs_pol_inv, int div);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) int (*enable_tearsync) (int enable, unsigned line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) unsigned long max_transmit_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) struct omapfb_notifier_block {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) struct notifier_block nb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) int plane_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) typedef int (*omapfb_notifier_callback_t)(struct notifier_block *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) unsigned long event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) void *fbi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) struct lcd_ctrl {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) int (*init) (struct omapfb_device *fbdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) int ext_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) struct omapfb_mem_desc *req_md);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) void (*cleanup) (void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) void (*bind_client) (struct omapfb_notifier_block *nb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) void (*get_caps) (int plane, struct omapfb_caps *caps);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) int (*set_update_mode)(enum omapfb_update_mode mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) enum omapfb_update_mode (*get_update_mode)(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) int (*setup_plane) (int plane, int channel_out,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) unsigned long offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) int screen_width,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) int pos_x, int pos_y, int width,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) int height, int color_mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) int (*set_rotate) (int angle);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) int (*setup_mem) (int plane, size_t size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) int mem_type, unsigned long *paddr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) int (*mmap) (struct fb_info *info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) struct vm_area_struct *vma);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) int (*set_scale) (int plane,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) int orig_width, int orig_height,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) int out_width, int out_height);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) int (*enable_plane) (int plane, int enable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) int (*update_window) (struct fb_info *fbi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) struct omapfb_update_window *win,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) void (*callback)(void *),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) void *callback_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) void (*sync) (void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) void (*suspend) (void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) void (*resume) (void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) int (*run_test) (int test_num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) int (*setcolreg) (u_int regno, u16 red, u16 green,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) u16 blue, u16 transp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) int update_hw_mem);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) int (*set_color_key) (struct omapfb_color_key *ck);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) int (*get_color_key) (struct omapfb_color_key *ck);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) enum omapfb_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) OMAPFB_DISABLED = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) OMAPFB_SUSPENDED = 99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) OMAPFB_ACTIVE = 100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) struct omapfb_plane_struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) int idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) struct omapfb_plane_info info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) enum omapfb_color_format color_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) struct omapfb_device *fbdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) struct omapfb_device {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) int state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) int ext_lcdc; /* Using external
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) LCD controller */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) struct mutex rqueue_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) int palette_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) u32 pseudo_palette[17];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) struct lcd_panel *panel; /* LCD panel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) const struct lcd_ctrl *ctrl; /* LCD controller */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) const struct lcd_ctrl *int_ctrl; /* internal LCD ctrl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) struct lcd_ctrl_extif *ext_if; /* LCD ctrl external
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) interface */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) struct device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) struct fb_var_screeninfo new_var; /* for mode changes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) struct omapfb_mem_desc mem_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) struct fb_info *fb_info[OMAPFB_PLANE_NUM];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) struct platform_device *dssdev; /* dummy dev for clocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) extern struct lcd_ctrl omap1_lcd_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) extern void omapfb_register_panel(struct lcd_panel *panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) extern void omapfb_write_first_pixel(struct omapfb_device *fbdev, u16 pixval);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) extern void omapfb_notify_clients(struct omapfb_device *fbdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) unsigned long event);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) extern int omapfb_register_client(struct omapfb_notifier_block *nb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) omapfb_notifier_callback_t callback,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) void *callback_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) extern int omapfb_unregister_client(struct omapfb_notifier_block *nb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) extern int omapfb_update_window_async(struct fb_info *fbi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) struct omapfb_update_window *win,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) void (*callback)(void *),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) void *callback_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #endif /* __OMAPFB_H */