blob: c49472010790325b19fae98857a042005af89c77 [file] [log] [blame]
/*
* Copyright (c) 2014,2016, 2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* 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 MDSS_MDP_CDM_H
#define MDSS_MDP_CDM_H
#include <linux/msm_mdp.h>
#include <linux/kref.h>
enum mdp_cdm_cdwn_method_type {
MDP_CDM_CDWN_DISABLE,
MDP_CDM_CDWN_PIXEL_DROP,
MDP_CDM_CDWN_AVG,
MDP_CDM_CDWN_COSITE,
MDP_CDM_CDWN_OFFSITE,
};
enum mdp_cdm_cdwn_output_type {
MDP_CDM_CDWN_OUTPUT_HDMI,
MDP_CDM_CDWN_OUTPUT_WB,
};
enum mdp_cdm_csc_bit_depth {
MDP_CDM_CSC_8BIT,
MDP_CDM_CSC_10BIT,
};
struct mdp_cdm_cfg {
/* CSC block configuration */
u32 mdp_csc_bit_depth;
u32 csc_type;
/* CDWN block configuration */
u32 horz_downsampling_type;
u32 vert_downsampling_type;
/* Output packer configuration */
u32 output_width;
u32 output_height;
u32 out_format;
};
struct mdss_mdp_cdm {
u32 num;
char __iomem *base;
struct kref kref;
struct mutex lock;
struct mdss_data_type *mdata;
u32 out_intf;
bool is_bypassed;
struct mdp_cdm_cfg setup;
struct completion free_comp;
};
struct mdss_mdp_cdm *mdss_mdp_cdm_init(struct mdss_mdp_ctl *ctl,
u32 intf_type);
int mdss_mdp_cdm_destroy(struct mdss_mdp_cdm *cdm);
int mdss_mdp_cdm_setup(struct mdss_mdp_cdm *cdm, struct mdp_cdm_cfg *data);
#endif /* MDSS_MDP_CDM_H */