blob: 24d573fe5aeec6fbfbecbdbe16422b8c46caa807 [file] [log] [blame]
/*
* Copyright (C) 2016 Marek Vasut <marex@denx.de>
*
* i.MX23/i.MX28/i.MX6SX MXSFB LCD controller driver.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef __MXSFB_DRV_H__
#define __MXSFB_DRV_H__
#define MAX_CLK_SRC 2
struct mxsfb_devdata {
unsigned int transfer_count;
unsigned int cur_buf;
unsigned int next_buf;
unsigned int debug0;
unsigned int hs_wdth_mask;
unsigned int hs_wdth_shift;
unsigned int ipversion;
unsigned int flags;
unsigned int num_formats;
};
struct mode_config {
struct clk *clk_src;
unsigned long out_rate;
int clock;
int mode_clock;
struct list_head list;
};
struct mxsfb_drm_private {
struct device *dev;
const struct mxsfb_devdata *devdata;
void __iomem *base; /* registers */
struct clk *clk;
struct clk *clk_axi;
struct clk *clk_disp_axi;
struct clk *clk_src[MAX_CLK_SRC];
struct clk *clk_sel, *clk_pll;
struct drm_simple_display_pipe pipe;
struct drm_connector panel_connector;
struct drm_connector *connector;
struct drm_panel *panel;
struct drm_bridge *bridge;
struct drm_fbdev_cma *fbdev;
struct list_head valid_modes;
};
int mxsfb_setup_crtc(struct drm_device *dev);
int mxsfb_create_output(struct drm_device *dev);
void mxsfb_crtc_enable(struct mxsfb_drm_private *mxsfb);
void mxsfb_crtc_disable(struct mxsfb_drm_private *mxsfb);
void mxsfb_plane_atomic_update(struct mxsfb_drm_private *mxsfb,
struct drm_plane_state *old_state);
#endif /* __MXSFB_DRV_H__ */