Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

OMAPDSS: HDMI4: use common AVI infoframe support

Instead of using OMAP specific AVI infoframe structs, use the common one
from include/linux/hdmi.h.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

+27 -110
+2
drivers/video/fbdev/omap2/dss/hdmi.h
··· 22 22 #include <linux/delay.h> 23 23 #include <linux/io.h> 24 24 #include <linux/platform_device.h> 25 + #include <linux/hdmi.h> 25 26 #include <video/omapdss.h> 26 27 27 28 #include "dss.h" ··· 361 360 void __iomem *base; 362 361 363 362 struct hdmi_core_infoframe_avi avi_cfg; 363 + struct hdmi_avi_infoframe avi_infoframe; 364 364 }; 365 365 366 366 static inline void hdmi_write_reg(void __iomem *base_addr, const u32 idx,
+24 -110
drivers/video/fbdev/omap2/dss/hdmi4_core.c
··· 198 198 } 199 199 200 200 static void hdmi_core_init(struct hdmi_core_video_config *video_cfg, 201 - struct hdmi_core_infoframe_avi *avi_cfg, 202 201 struct hdmi_core_packet_enable_repeat *repeat_cfg) 203 202 { 204 203 DSSDBG("Enter hdmi_core_init\n"); ··· 209 210 video_cfg->pkt_mode = HDMI_PACKETMODERESERVEDVALUE; 210 211 video_cfg->hdmi_dvi = HDMI_DVI; 211 212 video_cfg->tclk_sel_clkmult = HDMI_FPLL10IDCK; 212 - 213 - /* info frame */ 214 - avi_cfg->db1_format = 0; 215 - avi_cfg->db1_active_info = 0; 216 - avi_cfg->db1_bar_info_dv = 0; 217 - avi_cfg->db1_scan_info = 0; 218 - avi_cfg->db2_colorimetry = 0; 219 - avi_cfg->db2_aspect_ratio = 0; 220 - avi_cfg->db2_active_fmt_ar = 0; 221 - avi_cfg->db3_itc = 0; 222 - avi_cfg->db3_ec = 0; 223 - avi_cfg->db3_q_range = 0; 224 - avi_cfg->db3_nup_scaling = 0; 225 - avi_cfg->db4_videocode = 0; 226 - avi_cfg->db5_pixel_repeat = 0; 227 - avi_cfg->db6_7_line_eoftop = 0; 228 - avi_cfg->db8_9_line_sofbottom = 0; 229 - avi_cfg->db10_11_pixel_eofleft = 0; 230 - avi_cfg->db12_13_pixel_sofright = 0; 231 213 232 214 /* packet enable and repeat */ 233 215 repeat_cfg->audio_pkt = 0; ··· 285 305 286 306 static void hdmi_core_aux_infoframe_avi_config(struct hdmi_core_data *core) 287 307 { 288 - u32 val; 289 - char sum = 0, checksum = 0; 290 308 void __iomem *av_base = hdmi_av_base(core); 291 - struct hdmi_core_infoframe_avi info_avi = core->avi_cfg; 309 + struct hdmi_avi_infoframe *frame = &core->avi_infoframe; 310 + u8 data[HDMI_INFOFRAME_SIZE(AVI)]; 311 + int i; 292 312 293 - sum += 0x82 + 0x002 + 0x00D; 294 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_TYPE, 0x082); 295 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_VERS, 0x002); 296 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_LEN, 0x00D); 313 + hdmi_avi_infoframe_pack(frame, data, sizeof(data)); 297 314 298 - val = (info_avi.db1_format << 5) | 299 - (info_avi.db1_active_info << 4) | 300 - (info_avi.db1_bar_info_dv << 2) | 301 - (info_avi.db1_scan_info); 302 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(0), val); 303 - sum += val; 304 - 305 - val = (info_avi.db2_colorimetry << 6) | 306 - (info_avi.db2_aspect_ratio << 4) | 307 - (info_avi.db2_active_fmt_ar); 308 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(1), val); 309 - sum += val; 310 - 311 - val = (info_avi.db3_itc << 7) | 312 - (info_avi.db3_ec << 4) | 313 - (info_avi.db3_q_range << 2) | 314 - (info_avi.db3_nup_scaling); 315 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(2), val); 316 - sum += val; 317 - 318 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(3), 319 - info_avi.db4_videocode); 320 - sum += info_avi.db4_videocode; 321 - 322 - val = info_avi.db5_pixel_repeat; 323 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(4), val); 324 - sum += val; 325 - 326 - val = info_avi.db6_7_line_eoftop & 0x00FF; 327 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(5), val); 328 - sum += val; 329 - 330 - val = ((info_avi.db6_7_line_eoftop >> 8) & 0x00FF); 331 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(6), val); 332 - sum += val; 333 - 334 - val = info_avi.db8_9_line_sofbottom & 0x00FF; 335 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(7), val); 336 - sum += val; 337 - 338 - val = ((info_avi.db8_9_line_sofbottom >> 8) & 0x00FF); 339 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(8), val); 340 - sum += val; 341 - 342 - val = info_avi.db10_11_pixel_eofleft & 0x00FF; 343 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(9), val); 344 - sum += val; 345 - 346 - val = ((info_avi.db10_11_pixel_eofleft >> 8) & 0x00FF); 347 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(10), val); 348 - sum += val; 349 - 350 - val = info_avi.db12_13_pixel_sofright & 0x00FF; 351 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(11), val); 352 - sum += val; 353 - 354 - val = ((info_avi.db12_13_pixel_sofright >> 8) & 0x00FF); 355 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(12), val); 356 - sum += val; 357 - 358 - checksum = 0x100 - sum; 359 - hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_CHSUM, checksum); 315 + for (i = 0; i < sizeof(data); ++i) { 316 + hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_BASE + i * 4, 317 + data[i]); 318 + } 360 319 } 361 320 362 321 static void hdmi_core_av_packet_config(struct hdmi_core_data *core, ··· 323 404 struct omap_video_timings video_timing; 324 405 struct hdmi_video_format video_format; 325 406 /* HDMI core */ 326 - struct hdmi_core_infoframe_avi *avi_cfg = &core->avi_cfg; 327 407 struct hdmi_core_video_config v_core_cfg; 328 408 struct hdmi_core_packet_enable_repeat repeat_cfg; 409 + struct hdmi_avi_infoframe *avi_infoframe = &core->avi_infoframe; 329 410 330 - hdmi_core_init(&v_core_cfg, avi_cfg, &repeat_cfg); 411 + hdmi_core_init(&v_core_cfg, &repeat_cfg); 331 412 332 413 hdmi_wp_init_vid_fmt_timings(&video_format, &video_timing, cfg); 333 414 ··· 361 442 * configure packet 362 443 * info frame video see doc CEA861-D page 65 363 444 */ 364 - avi_cfg->db1_format = HDMI_INFOFRAME_AVI_DB1Y_RGB; 365 - avi_cfg->db1_active_info = 366 - HDMI_INFOFRAME_AVI_DB1A_ACTIVE_FORMAT_OFF; 367 - avi_cfg->db1_bar_info_dv = HDMI_INFOFRAME_AVI_DB1B_NO; 368 - avi_cfg->db1_scan_info = HDMI_INFOFRAME_AVI_DB1S_0; 369 - avi_cfg->db2_colorimetry = HDMI_INFOFRAME_AVI_DB2C_NO; 370 - avi_cfg->db2_aspect_ratio = HDMI_INFOFRAME_AVI_DB2M_NO; 371 - avi_cfg->db2_active_fmt_ar = HDMI_INFOFRAME_AVI_DB2R_SAME; 372 - avi_cfg->db3_itc = HDMI_INFOFRAME_AVI_DB3ITC_NO; 373 - avi_cfg->db3_ec = HDMI_INFOFRAME_AVI_DB3EC_XVYUV601; 374 - avi_cfg->db3_q_range = HDMI_INFOFRAME_AVI_DB3Q_DEFAULT; 375 - avi_cfg->db3_nup_scaling = HDMI_INFOFRAME_AVI_DB3SC_NO; 376 - avi_cfg->db4_videocode = cfg->cm.code; 377 - avi_cfg->db5_pixel_repeat = HDMI_INFOFRAME_AVI_DB5PR_NO; 378 - avi_cfg->db6_7_line_eoftop = 0; 379 - avi_cfg->db8_9_line_sofbottom = 0; 380 - avi_cfg->db10_11_pixel_eofleft = 0; 381 - avi_cfg->db12_13_pixel_sofright = 0; 382 - 445 + hdmi_avi_infoframe_init(avi_infoframe); 446 + avi_infoframe->colorspace = HDMI_COLORSPACE_RGB; 447 + avi_infoframe->scan_mode = HDMI_SCAN_MODE_NONE; 448 + avi_infoframe->colorimetry = HDMI_COLORIMETRY_NONE; 449 + avi_infoframe->picture_aspect = HDMI_PICTURE_ASPECT_NONE; 450 + avi_infoframe->active_aspect = HDMI_ACTIVE_ASPECT_PICTURE; 451 + avi_infoframe->itc = 0; 452 + avi_infoframe->extended_colorimetry = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601; 453 + avi_infoframe->quantization_range = HDMI_QUANTIZATION_RANGE_DEFAULT; 454 + avi_infoframe->nups = HDMI_NUPS_UNKNOWN; 455 + avi_infoframe->video_code = cfg->cm.code; 456 + avi_infoframe->ycc_quantization_range = HDMI_YCC_QUANTIZATION_RANGE_LIMITED; 457 + avi_infoframe->content_type = HDMI_CONTENT_TYPE_NONE; 458 + avi_infoframe->pixel_repeat = 0; 383 459 hdmi_core_aux_infoframe_avi_config(core); 384 460 385 461 /* enable/repeat the infoframe */
+1
drivers/video/fbdev/omap2/dss/hdmi4_core.h
··· 145 145 #define HDMI_CORE_AV_DPD 0xF4 146 146 #define HDMI_CORE_AV_PB_CTRL1 0xF8 147 147 #define HDMI_CORE_AV_PB_CTRL2 0xFC 148 + #define HDMI_CORE_AV_AVI_BASE 0x100 148 149 #define HDMI_CORE_AV_AVI_TYPE 0x100 149 150 #define HDMI_CORE_AV_AVI_VERS 0x104 150 151 #define HDMI_CORE_AV_AVI_LEN 0x108