|
@@ -111,6 +111,8 @@ static struct {
|
|
|
struct omap_dss_device *dssdev[2];
|
|
|
|
|
|
struct semaphore bus_lock;
|
|
|
+
|
|
|
+ struct omap_video_timings timings;
|
|
|
} rfbi;
|
|
|
|
|
|
static inline void rfbi_write_reg(const struct rfbi_reg idx, u32 val)
|
|
@@ -305,26 +307,15 @@ static int rfbi_transfer_area(struct omap_dss_device *dssdev,
|
|
|
{
|
|
|
u32 l;
|
|
|
int r;
|
|
|
- struct omap_video_timings timings;
|
|
|
- u16 width, height;
|
|
|
-
|
|
|
- dssdev->driver->get_resolution(dssdev, &width, &height);
|
|
|
-
|
|
|
- timings.x_res = width;
|
|
|
- timings.y_res = height;
|
|
|
- timings.hsw = 1;
|
|
|
- timings.hfp = 1;
|
|
|
- timings.hbp = 1;
|
|
|
- timings.vsw = 1;
|
|
|
- timings.vfp = 0;
|
|
|
- timings.vbp = 0;
|
|
|
+ u16 width = rfbi.timings.x_res;
|
|
|
+ u16 height = rfbi.timings.y_res;
|
|
|
|
|
|
/*BUG_ON(callback == 0);*/
|
|
|
BUG_ON(rfbi.framedone_callback != NULL);
|
|
|
|
|
|
DSSDBG("rfbi_transfer_area %dx%d\n", width, height);
|
|
|
|
|
|
- dss_mgr_set_timings(dssdev->manager, &timings);
|
|
|
+ dss_mgr_set_timings(dssdev->manager, &rfbi.timings);
|
|
|
|
|
|
r = dss_mgr_enable(dssdev->manager);
|
|
|
if (r)
|
|
@@ -787,6 +778,13 @@ int omap_rfbi_update(struct omap_dss_device *dssdev, void (*callback)(void *),
|
|
|
}
|
|
|
EXPORT_SYMBOL(omap_rfbi_update);
|
|
|
|
|
|
+void omapdss_rfbi_set_size(struct omap_dss_device *dssdev, u16 w, u16 h)
|
|
|
+{
|
|
|
+ rfbi.timings.x_res = w;
|
|
|
+ rfbi.timings.y_res = h;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(omapdss_rfbi_set_size);
|
|
|
+
|
|
|
static void rfbi_dump_regs(struct seq_file *s)
|
|
|
{
|
|
|
#define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r, rfbi_read_reg(r))
|
|
@@ -841,6 +839,27 @@ static void rfbi_config_lcd_manager(struct omap_dss_device *dssdev)
|
|
|
mgr_config.lcden_sig_polarity = 0;
|
|
|
|
|
|
dss_mgr_set_lcd_config(dssdev->manager, &mgr_config);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Set rfbi.timings with default values, the x_res and y_res fields
|
|
|
+ * are expected to be already configured by the panel driver via
|
|
|
+ * omapdss_rfbi_set_size()
|
|
|
+ */
|
|
|
+ rfbi.timings.hsw = 1;
|
|
|
+ rfbi.timings.hfp = 1;
|
|
|
+ rfbi.timings.hbp = 1;
|
|
|
+ rfbi.timings.vsw = 1;
|
|
|
+ rfbi.timings.vfp = 0;
|
|
|
+ rfbi.timings.vbp = 0;
|
|
|
+
|
|
|
+ rfbi.timings.interlace = false;
|
|
|
+ rfbi.timings.hsync_level = OMAPDSS_SIG_ACTIVE_HIGH;
|
|
|
+ rfbi.timings.vsync_level = OMAPDSS_SIG_ACTIVE_HIGH;
|
|
|
+ rfbi.timings.data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE;
|
|
|
+ rfbi.timings.de_level = OMAPDSS_SIG_ACTIVE_HIGH;
|
|
|
+ rfbi.timings.sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES;
|
|
|
+
|
|
|
+ dss_mgr_set_timings(dssdev->manager, &rfbi.timings);
|
|
|
}
|
|
|
|
|
|
int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev)
|