Merge remote-tracking branches 'asoc/topic/davinci', 'asoc/topic/doc', 'asoc/topic...
[cascardo/linux.git] / drivers / video / fbdev / omap2 / dss / dss_features.c
index 7f89691..15088df 100644 (file)
@@ -93,6 +93,17 @@ static const struct dss_reg_field omap3_dss_reg_fields[] = {
        [FEAT_REG_DSIPLL_REGM_DSI]              = { 26, 23 },
 };
 
+static const struct dss_reg_field am43xx_dss_reg_fields[] = {
+       [FEAT_REG_FIRHINC]                      = { 12, 0 },
+       [FEAT_REG_FIRVINC]                      = { 28, 16 },
+       [FEAT_REG_FIFOLOWTHRESHOLD]     = { 11, 0 },
+       [FEAT_REG_FIFOHIGHTHRESHOLD]            = { 27, 16 },
+       [FEAT_REG_FIFOSIZE]             = { 10, 0 },
+       [FEAT_REG_HORIZONTALACCU]               = { 9, 0 },
+       [FEAT_REG_VERTICALACCU]                 = { 25, 16 },
+       [FEAT_REG_DISPC_CLK_SWITCH]             = { 0, 0 },
+};
+
 static const struct dss_reg_field omap4_dss_reg_fields[] = {
        [FEAT_REG_FIRHINC]                      = { 12, 0 },
        [FEAT_REG_FIRVINC]                      = { 28, 16 },
@@ -149,6 +160,11 @@ static const enum omap_display_type omap3630_dss_supported_displays[] = {
        OMAP_DISPLAY_TYPE_VENC,
 };
 
+static const enum omap_display_type am43xx_dss_supported_displays[] = {
+       /* OMAP_DSS_CHANNEL_LCD */
+       OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI,
+};
+
 static const enum omap_display_type omap4_dss_supported_displays[] = {
        /* OMAP_DSS_CHANNEL_LCD */
        OMAP_DISPLAY_TYPE_DBI | OMAP_DISPLAY_TYPE_DSI,
@@ -200,6 +216,11 @@ static const enum omap_dss_output_id omap3630_dss_supported_outputs[] = {
        OMAP_DSS_OUTPUT_VENC,
 };
 
+static const enum omap_dss_output_id am43xx_dss_supported_outputs[] = {
+       /* OMAP_DSS_CHANNEL_LCD */
+       OMAP_DSS_OUTPUT_DPI | OMAP_DSS_OUTPUT_DBI,
+};
+
 static const enum omap_dss_output_id omap4_dss_supported_outputs[] = {
        /* OMAP_DSS_CHANNEL_LCD */
        OMAP_DSS_OUTPUT_DBI | OMAP_DSS_OUTPUT_DSI1,
@@ -444,6 +465,13 @@ static const struct dss_param_range omap3_dss_param_range[] = {
        [FEAT_PARAM_LINEWIDTH]                  = { 1, 1024 },
 };
 
+static const struct dss_param_range am43xx_dss_param_range[] = {
+       [FEAT_PARAM_DSS_FCK]                    = { 0, 200000000 },
+       [FEAT_PARAM_DSS_PCD]                    = { 2, 255 },
+       [FEAT_PARAM_DOWNSCALE]                  = { 1, 4 },
+       [FEAT_PARAM_LINEWIDTH]                  = { 1, 1024 },
+};
+
 static const struct dss_param_range omap4_dss_param_range[] = {
        [FEAT_PARAM_DSS_FCK]                    = { 0, 186000000 },
        [FEAT_PARAM_DSS_PCD]                    = { 1, 255 },
@@ -520,6 +548,21 @@ static const enum dss_feat_id am35xx_dss_feat_list[] = {
        FEAT_OMAP3_DSI_FIFO_BUG,
 };
 
+static const enum dss_feat_id am43xx_dss_feat_list[] = {
+       FEAT_LCDENABLEPOL,
+       FEAT_LCDENABLESIGNAL,
+       FEAT_PCKFREEENABLE,
+       FEAT_FUNCGATED,
+       FEAT_LINEBUFFERSPLIT,
+       FEAT_ROWREPEATENABLE,
+       FEAT_RESIZECONF,
+       FEAT_CPR,
+       FEAT_PRELOAD,
+       FEAT_FIR_COEF_V,
+       FEAT_ALPHA_FIXED_ZORDER,
+       FEAT_FIFO_MERGE,
+};
+
 static const enum dss_feat_id omap3630_dss_feat_list[] = {
        FEAT_LCDENABLEPOL,
        FEAT_LCDENABLESIGNAL,
@@ -595,6 +638,7 @@ static const enum dss_feat_id omap4_dss_feat_list[] = {
 
 static const enum dss_feat_id omap5_dss_feat_list[] = {
        FEAT_MGR_LCD2,
+       FEAT_MGR_LCD3,
        FEAT_CORE_CLK_DIV,
        FEAT_LCD_CLK_SRC,
        FEAT_DSI_DCS_CMD_CONFIG_VC,
@@ -682,6 +726,26 @@ static const struct omap_dss_features am35xx_dss_features = {
        .burst_size_unit = 8,
 };
 
+static const struct omap_dss_features am43xx_dss_features = {
+       .reg_fields = am43xx_dss_reg_fields,
+       .num_reg_fields = ARRAY_SIZE(am43xx_dss_reg_fields),
+
+       .features = am43xx_dss_feat_list,
+       .num_features = ARRAY_SIZE(am43xx_dss_feat_list),
+
+       .num_mgrs = 1,
+       .num_ovls = 3,
+       .supported_displays = am43xx_dss_supported_displays,
+       .supported_outputs = am43xx_dss_supported_outputs,
+       .supported_color_modes = omap3_dss_supported_color_modes,
+       .overlay_caps = omap3430_dss_overlay_caps,
+       .clksrc_names = omap2_dss_clk_source_names,
+       .dss_params = am43xx_dss_param_range,
+       .supported_rotation_types = OMAP_DSS_ROT_DMA,
+       .buffer_size_unit = 1,
+       .burst_size_unit = 8,
+};
+
 static const struct omap_dss_features omap3630_dss_features = {
        .reg_fields = omap3_dss_reg_fields,
        .num_reg_fields = ARRAY_SIZE(omap3_dss_reg_fields),
@@ -777,7 +841,7 @@ static const struct omap_dss_features omap5_dss_features = {
        .features = omap5_dss_feat_list,
        .num_features = ARRAY_SIZE(omap5_dss_feat_list),
 
-       .num_mgrs = 3,
+       .num_mgrs = 4,
        .num_ovls = 4,
        .supported_displays = omap5_dss_supported_displays,
        .supported_outputs = omap5_dss_supported_outputs,
@@ -928,6 +992,10 @@ void dss_features_init(enum omapdss_version version)
                omap_current_dss_features = &am35xx_dss_features;
                break;
 
+       case OMAPDSS_VER_AM43xx:
+               omap_current_dss_features = &am43xx_dss_features;
+               break;
+
        default:
                DSSWARN("Unsupported OMAP version");
                break;