0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef _OSD_H
0012 #define _OSD_H
0013
0014 #include <media/davinci/vpbe_types.h>
0015
0016 #define DM644X_VPBE_OSD_SUBDEV_NAME "dm644x,vpbe-osd"
0017 #define DM365_VPBE_OSD_SUBDEV_NAME "dm365,vpbe-osd"
0018 #define DM355_VPBE_OSD_SUBDEV_NAME "dm355,vpbe-osd"
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 enum osd_layer {
0031 WIN_OSD0,
0032 WIN_VID0,
0033 WIN_OSD1,
0034 WIN_VID1,
0035 };
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 enum osd_win_layer {
0046 OSDWIN_OSD0,
0047 OSDWIN_OSD1,
0048 };
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 enum osd_pix_format {
0067 PIXFMT_1BPP = 0,
0068 PIXFMT_2BPP,
0069 PIXFMT_4BPP,
0070 PIXFMT_8BPP,
0071 PIXFMT_RGB565,
0072 PIXFMT_YCBCRI,
0073 PIXFMT_RGB888,
0074 PIXFMT_YCRCBI,
0075 PIXFMT_NV12,
0076 PIXFMT_OSD_ATTR,
0077 };
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 enum osd_h_exp_ratio {
0089 H_EXP_OFF,
0090 H_EXP_9_OVER_8,
0091 H_EXP_3_OVER_2,
0092 };
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102 enum osd_v_exp_ratio {
0103 V_EXP_OFF,
0104 V_EXP_6_OVER_5,
0105 };
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116 enum osd_zoom_factor {
0117 ZOOM_X1,
0118 ZOOM_X2,
0119 ZOOM_X4,
0120 };
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130 enum osd_clut {
0131 ROM_CLUT,
0132 RAM_CLUT,
0133 };
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143 enum osd_rom_clut {
0144 ROM_CLUT0,
0145 ROM_CLUT1,
0146 };
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162 enum osd_blending_factor {
0163 OSD_0_VID_8,
0164 OSD_1_VID_7,
0165 OSD_2_VID_6,
0166 OSD_3_VID_5,
0167 OSD_4_VID_4,
0168 OSD_5_VID_3,
0169 OSD_6_VID_2,
0170 OSD_8_VID_0,
0171 };
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183 enum osd_blink_interval {
0184 BLINK_X1,
0185 BLINK_X2,
0186 BLINK_X3,
0187 BLINK_X4,
0188 };
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201 enum osd_cursor_h_width {
0202 H_WIDTH_1,
0203 H_WIDTH_4,
0204 H_WIDTH_8,
0205 H_WIDTH_12,
0206 H_WIDTH_16,
0207 H_WIDTH_20,
0208 H_WIDTH_24,
0209 H_WIDTH_28,
0210 };
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223 enum osd_cursor_v_width {
0224 V_WIDTH_1,
0225 V_WIDTH_2,
0226 V_WIDTH_4,
0227 V_WIDTH_6,
0228 V_WIDTH_8,
0229 V_WIDTH_10,
0230 V_WIDTH_12,
0231 V_WIDTH_14,
0232 };
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250 struct osd_cursor_config {
0251 unsigned xsize;
0252 unsigned ysize;
0253 unsigned xpos;
0254 unsigned ypos;
0255 int interlaced;
0256 enum osd_cursor_h_width h_width;
0257 enum osd_cursor_v_width v_width;
0258 enum osd_clut clut;
0259 unsigned char clut_index;
0260 };
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277 struct osd_layer_config {
0278 enum osd_pix_format pixfmt;
0279 unsigned line_length;
0280 unsigned xsize;
0281 unsigned ysize;
0282 unsigned xpos;
0283 unsigned ypos;
0284 int interlaced;
0285 };
0286
0287
0288 struct osd_window_state {
0289 int is_allocated;
0290 int is_enabled;
0291 unsigned long fb_base_phys;
0292 enum osd_zoom_factor h_zoom;
0293 enum osd_zoom_factor v_zoom;
0294 struct osd_layer_config lconfig;
0295 };
0296
0297
0298 struct osd_osdwin_state {
0299 enum osd_clut clut;
0300 enum osd_blending_factor blend;
0301 int colorkey_blending;
0302 unsigned colorkey;
0303 int rec601_attenuation;
0304
0305 unsigned char palette_map[16];
0306 };
0307
0308
0309 struct osd_cursor_state {
0310 int is_enabled;
0311 struct osd_cursor_config config;
0312 };
0313
0314 struct osd_state;
0315
0316 struct vpbe_osd_ops {
0317 int (*initialize)(struct osd_state *sd);
0318 int (*request_layer)(struct osd_state *sd, enum osd_layer layer);
0319 void (*release_layer)(struct osd_state *sd, enum osd_layer layer);
0320 int (*enable_layer)(struct osd_state *sd, enum osd_layer layer,
0321 int otherwin);
0322 void (*disable_layer)(struct osd_state *sd, enum osd_layer layer);
0323 int (*set_layer_config)(struct osd_state *sd, enum osd_layer layer,
0324 struct osd_layer_config *lconfig);
0325 void (*get_layer_config)(struct osd_state *sd, enum osd_layer layer,
0326 struct osd_layer_config *lconfig);
0327 void (*start_layer)(struct osd_state *sd, enum osd_layer layer,
0328 unsigned long fb_base_phys,
0329 unsigned long cbcr_ofst);
0330 void (*set_left_margin)(struct osd_state *sd, u32 val);
0331 void (*set_top_margin)(struct osd_state *sd, u32 val);
0332 void (*set_interpolation_filter)(struct osd_state *sd, int filter);
0333 int (*set_vid_expansion)(struct osd_state *sd,
0334 enum osd_h_exp_ratio h_exp,
0335 enum osd_v_exp_ratio v_exp);
0336 void (*get_vid_expansion)(struct osd_state *sd,
0337 enum osd_h_exp_ratio *h_exp,
0338 enum osd_v_exp_ratio *v_exp);
0339 void (*set_zoom)(struct osd_state *sd, enum osd_layer layer,
0340 enum osd_zoom_factor h_zoom,
0341 enum osd_zoom_factor v_zoom);
0342 };
0343
0344 struct osd_state {
0345 enum vpbe_version vpbe_type;
0346 spinlock_t lock;
0347 struct device *dev;
0348 dma_addr_t osd_base_phys;
0349 void __iomem *osd_base;
0350 unsigned long osd_size;
0351
0352 int pingpong;
0353 int interpolation_filter;
0354 int field_inversion;
0355 enum osd_h_exp_ratio osd_h_exp;
0356 enum osd_v_exp_ratio osd_v_exp;
0357 enum osd_h_exp_ratio vid_h_exp;
0358 enum osd_v_exp_ratio vid_v_exp;
0359 enum osd_clut backg_clut;
0360 unsigned backg_clut_index;
0361 enum osd_rom_clut rom_clut;
0362 int is_blinking;
0363
0364 enum osd_blink_interval blink;
0365
0366 enum osd_pix_format yc_pixfmt;
0367
0368 unsigned char clut_ram[256][3];
0369 struct osd_cursor_state cursor;
0370
0371 struct osd_window_state win[4];
0372
0373 struct osd_osdwin_state osdwin[2];
0374
0375 struct vpbe_osd_ops ops;
0376 };
0377
0378 struct osd_platform_data {
0379 int field_inv_wa_enable;
0380 };
0381
0382 #endif