<Android> MTK LCM DSI MIPI 读写

本文介绍了一种在HelioX20平台上的MIPILCM读写操作方法,详细解释了mtk_dsi_write_regs和mtk_dsi_read_regs函数的实现,包括其参数意义及返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LCM中的MIPI读写

我的环境是: Helio X20, kernel 3.18

kernel-3.18\drivers\misc\mediatek\video\mt6797\videox\primary_display.c:

void DSI_set_cmdq_V2_Wrapper_DSI0(unsigned cmd, unsigned char count, unsigned char *para_list, unsigned char force_update);
#define read_reg_v2(cmd, buffer, buffer_size) DSI_dcs_read_lcm_reg_v2(DISP_MODULE_DSI0, NULL, cmd, buffer, buffer_size)
#define dsi_set_cmdq_V2(cmd, size, data) DSI_set_cmdq_V2_Wrapper_DSI0(cmd, size, data, 1)

/* 
 * mtk_dsi_write_regs: mipi write registers
 * @cmd: operate command
 * @data: data buffer to write, can be null
 * @size: data buffer size, can be 0
 * 
 * Return: 0 success, otherwise fail
 */
int mtk_dsi_write_regs(char cmd, char *data, int size)
{
	dsi_set_cmdq_V2(cmd, size, data);
	return 0;
}

/* 
 * mtk_dsi_read_regs: mipi read registers
 * @cmd: operate command
 * @buffer: buffer to save return values, cannot be null
 * @size: buffer size, cannot be 0
 * 
 * Return: 0 success, otherwise fail
 */
int mtk_dsi_read_regs(char cmd, char *buffer, int size)
{
	int ret = 0;

	_primary_path_lock(__func__);
	if (pgc->state == DISP_SLEPT) {
		pr_err("[mtk]primary display path is slept?? -- skip esd check\n");
		_primary_path_unlock(__func__);
		goto done;
	}
	/* 1: stop path */
	_cmdq_stop_trigger_loop();
	if (dpmgr_path_is_busy(pgc->dpmgr_handle))
		pr_debug("[mtk]wait frame done ret:%d\n", ret);

	dpmgr_path_stop(pgc->dpmgr_handle, CMDQ_DISABLE);
	if (dpmgr_path_is_busy(pgc->dpmgr_handle))
		DISPCHECK("[ESD]wait frame done ret:%d\n", ret);

	dpmgr_path_reset(pgc->dpmgr_handle, CMDQ_DISABLE);

	ret = read_reg_v2(cmd, buffer, size);
	if (ret != size) {
		ret = -EIO;
	} else {
		ret = 0;
	}

	dpmgr_path_start(pgc->dpmgr_handle, CMDQ_DISABLE);
	if (primary_display_is_video_mode()) {
		/* for video mode, we need to force trigger here */
		/* for cmd mode, just set DPREC_EVENT_CMDQ_SET_EVENT_ALLOW when trigger loop start */
		dpmgr_path_trigger(pgc->dpmgr_handle, NULL, CMDQ_DISABLE);
	}
	_cmdq_start_trigger_loop();
	/* when we stop trigger loop
	 * if no other thread is running, cmdq may disable its clock
	 * all cmdq event will be cleared after suspend */
	cmdqCoreSetEvent(CMDQ_EVENT_DISP_WDMA0_EOF);
	
	_primary_path_unlock(__func__);

done:
	return ret;
}

<6>[55185.399531][T17993] PM: suspend exit <3>[55185.425821][ T1059] set scheduler: curr=surfaceflinger tgid=1059 p=surfaceflinger tgid=1059 prio=97 C:(do_sched_setscheduler<-__arm64_sys_sched_setscheduler<-invoke_syscall<-el0_svc_common<-do_el0_svc) <6>[55185.428598][ T1001] [DISP]Enabling CRTC wakelock <6>[55185.428632][ T1001] [DISP]CRTC0 hold wakelock mtk_drm_crtc_atomic_resume 14308 cnt(2) <6>[55185.428983][ T1001] [DISP]mtk_dsi_set_mmclk_by_datarate_V1, 11751, data_rate =998, mmclk=330 pixclk_min=174, dual=0 <6>[55185.429993][ T1001] mtk_iommu: debug [trace] resume |0x1 | 0 |0x0 |14016000.m4u <6>[55185.430102][ T1001] debug for lcm lcm_panel_poweron+ <6>[55185.456948][ T1001] debug for lcm lcm_panel_poweron- <6>[55185.458039][ T1001] [DISP]crtc0 mtk_set_dpc_dsi_clk set 0 <6>[55185.458454][ T1001] [DISP]mtk_crtc_config_default_path:12891 scaling_en:0 hdisplay:1080 vdisplay:2400 lcm:width:0 lcm_height:0 <6>[55185.458530][ T1001] [DISP]mtk_rdma_cal_golden_setting,w:1080,h:2400,vrefresh:120,bpc:8,is_vdo:1,is_dc:0,sram:0,fifo:2240 <5>[55185.458567][ T1001] disp_ccorr_config, compId: 11 <5>[55185.458575][ T1001] disp_ccorr_config, compId: 11, ccorr_hw_valid: 1 <5>[55185.458595][ T1001] disp_ccorr_config, compId: 12 <5>[55185.458601][ T1001] disp_ccorr_config, compId: 12, ccorr_hw_valid: 1 <6>[55185.458949][ T1001] [DISP]RCT_ON = 0x1, num_extra_mux_bits = 246->240, slice_bits = 172800 <3>[55185.459253][ T1001] [DISP][E]mtk_dsi_encoder_enable doze status=0+ <3>[55185.459264][ T1001] [DISP][E]MTK_DISP_EVENT_BLANK early unblank,data=0 <3>[55185.459273][ T1001] [OPLUS_CHG][chg_mtk_drm_notifier_callback]Invalid event <3>[55185.459281][ T1001] [TP0]touchpanel: mtk gki notifier event:0, blank:0 <3>[55185.459286][ T1001] [TP0]touchpanel: tp_resume start. <6>[55185.459421][ T1001] oplus_bsp_uff_fp_driver: [oplus_fb_notifier_call] val = 0 <6>[55185.459431][ T1001] [btmtk_info] btmtk_disp_notify_cb: value[0], data[0] <6>[55185.459445][ T1001] [btmtk_info] btmtk_disp_notify_cb: blank state [0]->[1], and send cmd <6>[55185.459453][ T1001] [btmtk_info] [InternalCmd] btmtk_intcmd_wmt_blank_status <3>[55185.465901][T22441] [TP0]touchpanel: speedup_resume is called <3>[55185.465947][T22441] [TP0]touchpanel: release all touch point and key, clear tp touch down flag <3>[55185.465956][T22441] [TP]focaltech,ft3658u_spi: fts_reset:call <3>[55185.465962][T22441] [TP]focaltech,ft3658u_spi: fts_hw_reset. <3>[55185.465968][T22441] [TP]focaltech,ft3658u_spi: Set the reset_gpio <6>[55185.467558][ T1048] #@# cm_mgr_get_dram_type(607) ddr_type 0x0 <5>[55185.471159][ T978] [mtk_nanohub]mtk_nanohub_flush [1] <6>[55185.474993][ T1001] [btmtk_info] btmtk_btif_send_and_recv, ret = 496 <6>[55185.475039][ T1001] [btmtk_info] [InternalCmd] btmtk_intcmd_wmt_blank_status done, result = WMT_EVT_SUCCESS <6>[55185.475047][ T1001] [btmtk_info] btmtk_disp_notify_cb: end <6>[55185.475054][ T1001] enter ppm lcmoff fb! <6>[55185.475063][ T1001] [wlan][1001]kalGetMtkDispEvent:(SW4 INFO) wlan_fb_notifier_callback: event[0], blank[0] eEvent[2] <6>[55185.475091][ T1001] [DISP]mtk_vidle_force_power_ctrl_by_cpu power_on[1] power ctrl api is null <6>[55185.476254][ T1001] debug for lcm_prepare+ <6>[55185.476280][ T1001] debug for lcm_panel_init+ <3>[55185.483153][T22441] [TP]focaltech,ft3658u_spi: Set the reset_gpio <6>[55185.496621][ T1001] debug for lcm_panel_init, fps:60 <3>[55185.500307][T14189] [sensor_devinfo] sync_utc2scp_work 737 : kernel_ts: 1753948963.903801, 1753948963.903801 <5>[55185.510970][ T975] get pe5 fail <5>[55185.511023][ T975] get pe5 fail <5>[55185.511120][ T975] get pe5 fail <5>[55185.511188][ T975] get pe5 fail <12>[55185.511281][ T975] healthd: battery l=40 v=3 t=39.0 h=2 st=3 c=1109 fc=4864000 cc=55 chg= <6>[55185.512286][ T4282] mt6360_pmu_chg mt6360-chg.2.auto: mt6360_get_vbus mt6360_get_vbus <5>[55185.537789][ T975] get pe5 fail <5>[55185.537842][ T975] get pe5 fail <5>[55185.537960][ T975] get pe5 fail <5>[55185.538022][ T975] get pe5 fail <6>[55185.549263][T21367] update cpufreq limit idx min 0---max 0,freq min 2600000 ---max 2600000 <6>[55185.550217][T10082] update cpufreq limit idx min 0---max 0,freq min 2000000 ---max 2000000 <3>[55185.554077][ T1017] [OPLUS_CHG][protocol_type_show]fast_chg_type: 0 <6>[55185.554567][ T1017] [OPLUS_CHG][ui_power_show]ui_power_show: 0 45000 0 0 0 0 -1 <3>[55185.555264][T25353] open <3>[55185.555338][T25353] seninf_open 1 <3>[55185.556263][T25353] [imgsensor]imgsensor_open 4 <5>[55185.563311][ T975] get pe5 fail <5>[55185.563356][ T975] get pe5 fail <5>[55185.563431][ T975] get pe5 fail <5>[55185.563480][ T975] get pe5 fail <3>[55185.564630][T25353] [CAMERA SENSOR] CCF kdSetSensorMclk on= 1, freq= 24, TG= 4 <3>[55185.564767][T25353] [imgsensor]sensor_idx 1, power 1 curr_sensor_name hi1634q_mipi_raw23707, enable list hi1634q_mipi_raw23707 <7>[55185.564783][T25353] [Oplusimgsensor_ldoenable_power] sensor_idx:1 pwr_status: 1 <3>[55185.564791][T25353] [Oplusimgsensor_matchhwcfg_power] pwr_actidx:81 <3>[55185.564798][T25353] [Oplusimgsensor_matchhwcfg_power] pwr_actidx:82 <6>[55185.564804][T25353] [Oplusimgsensor_matchhwcfg_power] match oplus_sensor_power_sequence <6>[55185.564814][T25353] [Oplusimgsensor_ldo_powerset_23687] sensor_idx:1 pwr_status:1 pin:1 <6>[55185.564820][T25353] sensor_idx 1, ppwr_info->pin 1, ppwr_info->pin_state_on 13, delay 10 <3>[55185.564827][T25353] [imgsensor]gpio_set :debug pinctrl ENABLE, PinIdx 1, Val 13 <6>[55185.574870][T25353] [Oplusimgsensor_ldo_powerset_23687] sensor_idx:1 pwr_status:1 pin:2 <6>[55185.574899][T25353] sensor_idx 1, ppwr_info->pin 2, ppwr_info->pin_state_on 0, delay 1 <3>[55185.574923][T25353] [imgsensor]gpio_set :debug pinctrl ENABLE, PinIdx 2, Val 0 <6>[55185.576011][T25353] [Oplusimgsensor_ldo_powerset_23687] sensor_idx:1 pwr_status:1 pin:5 <6>[55185.576025][T25353] sensor_idx 1, ppwr_info->pin 5, ppwr_info->pin_state_on 9, delay 1 <3>[55185.576043][T25353] [check_for_regulator_get]sensor_idx:1 regulator_idx: 2 <3>[55185.576335][T25353] debugfs: Directory 'kd_camera_hw1@1a004000-cam1_vcamio' with parent 'vcamio' already present! <3>[55185.576363][T25353] vcamio: unsupportable voltage range: 2500000-1900000uV <3>[55185.576373][T25353] [regulator]fail to regulator_set_voltage, powertype:5 powerId:2500000 <3>[55185.576380][T25353] [imgsensor]set load success <6>[55185.579500][T25353] [Oplusimgsensor_ldo_powerset_23687] sensor_idx:1 pwr_status:1 pin:3 <6>[55185.579547][T25353] AW37004 ultra: aw37004 out put type is [3] <6>[55185.580054][T25353] AW37004 before set enable value = 0x0 <6>[55185.580083][T25353] AW37004 after set enable value = 0x8 <6>[55185.580228][T25353] AW37004 set OUT_AVDD2 success! <6>[55185.580236][T25353] AW37004 result = 0 <6>[55185.581255][T25353] [Oplusimgsensor_ldo_powerset_23687] sensor_idx:1 pwr_status:1 pin:4 <6>[55185.581262][T25353] AW37004 imx471: aw37004 out put type is [1] <6>[55185.581578][T25353] AW37004 before set enable value = 0x8 <6>[55185.581596][T25353] AW37004 after set enable value = 0xa <6>[55185.581750][T25353] AW37004 set OUT_DVDD2 success! <6>[55185.581756][T25353] AW37004 result = 0 <6>[55185.582772][T25353] [Oplusimgsensor_ldo_powerset_23687] sensor_idx:1 pwr_status:1 pin:15
最新发布
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值