From 557c24d082b6ecb9bfe5407b77ae43fa7650a5dc Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 17 Feb 2023 11:02:20 +0000 Subject: [PATCH] add eDP LVDS PCIE WIFI6 --- lcdparamservice/lcd_parameters/LVDS/21.5_LVDS_1920x1080 | 25 lcdparamservice/lcd_parameters/eDP/12.5_eDP_1366x768 | 25 kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi | 10 lcdparamservice/lcd_parameters/LVDS/12.1_LVDS_1024x768 | 25 lcdparamservice/lcdparamservice | 0 kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi | 176 ++++- lcdparamservice/lcd_parameters/LVDS/18.5_LVDS_1366x768 | 25 lcdparamservice/lcd_parameters/LVDS/17_LVDS_1280x1024 | 25 lcdparamservice/lcd_parameters/LVDS/23.8_LVDS_1920x1080 | 25 lcdparamservice/lcd_parameters/eDP/12.5_eDP_1920x1080 | 25 lcdparamservice/lcdparamservice.c | 547 +++++++++++++++++ lcdparamservice/lcd_parameters/LVDS/15_LVDS_1024X768 | 25 kernel/drivers/misc/nkio/nk_io_core.c | 102 +- kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi | 28 lcdparamservice/lcd_parameters/eDP/15.6_eDP_1920x1080_NV156FHM | 25 lcdparamservice/lcd_parameters/eDP/13.3_eDP_1920x1080 | 25 lcdparamservice/lcd_parameters/LVDS/19_LVDS_1280x1024 | 25 kernel/drivers/misc/nkio/nkio.h | 2 rtl8852be | 0 lcdparamservice/lcd_parameters/LVDS/21.8_LVDS_1920x1080 | 25 u-boot/arch/arm/mach-rockchip/kernel_dtb.c | 497 +++++++++++++++ lcdparamservice/lcd_parameters/LVDS/10.1_LVDS_1280x800 | 25 lcdparamservice/lcd_parameters/LVDS/19_LVDS_1400x900 | 25 lcdparamservice/lcd_parameters/LVDS/8_LVDS_800x600 | 25 u-boot/drivers/video/drm/rockchip_panel.c | 99 ++ lcdparamservice/lcd_parameters/eDP/15.6_eDP_1920x1080 | 25 lcdparamservice/chglcd.sh | 28 27 files changed, 1,759 insertions(+), 130 deletions(-) diff --git a/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi b/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi index 9424547..69afddb 100755 --- a/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi +++ b/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi @@ -8,6 +8,7 @@ #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/pinctrl/rockchip.h> +#include <dt-bindings/display/media-bus-format.h> #include "rk3568.dtsi" #include "rk3568-evb.dtsi" @@ -58,7 +59,9 @@ regulator-name = "vcc3v3_pcie"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; + regulator-always-on; enable-active-high; + regulator-boot-on; gpio = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>; startup-delay-us = <5000>; vin-supply = <&dc_12v>; @@ -88,13 +91,9 @@ nk_io_init { compatible = "nk_io_control"; -// usb_en_oc_gpio = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>; //USB_EN_OC_GPIO0_A5 - lcd_bk_en_gpio = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>; //LCD0_BKLT_EN_3V3 - lcd_pwblk_gpio = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>; //LCD0_BKLT_EN_3V3 vcc3_io_en_gpio = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; //VCC3_IO_EN_GPIO0_C4_3V3 hub_host2_5V_rest_gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>; //HUB_RST_GPIO4_D2_3V3 hub_host3_5v_gpio = <&gpio4 RK_PB2 GPIO_ACTIVE_HIGH>; //HOST3_EN_GPIO4_B2_1V8 -// hub_host3_5V_rest_gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>; vcc_5v_io = <&gpio1 RK_PA4 GPIO_ACTIVE_HIGH>; //VCC5_IO_EN_GPIO1_A4_3V3 vcc_12v_io = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>; //VCC12_IO_EN_GPIO0_C7_3V3 en_4g_gpio = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>; //4G_PWREN_H_GPIO0_C6 @@ -102,23 +101,55 @@ air_mode_4g_gpio = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>; //4G_AIR_MODE_GPIO01_B0_3V3 wake_4g_gpio = <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>; //4G_WAKEUP_GPIO01_B1_3V3 hp_en_gpio = <&gpio3 RK_PA6 GPIO_ACTIVE_HIGH>;//HP_EN_GPIO3_A6_3V3 - spk_out_gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_HIGH>;//AMP_SD_GPIO4_C2_3V3 - - edp_enable_gpio = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; - edp_gpio0 = <&gpio3 RK_PD2 GPIO_ACTIVE_HIGH>; //7511_GPIO0-GPIO3_D2 - edp_gpio1 = <&gpio3 RK_PD3 GPIO_ACTIVE_HIGH>; //7511_GPIO1-GPIO3_D3 - edp_gpio2 = <&gpio3 RK_PD4 GPIO_ACTIVE_HIGH>; //7511_GPIO2-GPIO3_D4 - edp_gpio3 = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>; //7511_GPIO3-GPIO3_D5 - edp_reset = <&gpio3 RK_PD1 GPIO_ACTIVE_LOW>; //7511_RST_GPIO3_D1 -// tp_reset = <&gpio3 RK_PA7 GPIO_ACTIVE_HIGH>; -// vddio_mipi = <&gpio1 RK_PA4 GPIO_ACTIVE_HIGH>; - + spk_out_gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_HIGH>;//AMP_SD_GPIO4_C2_3V3 wifi_power_en_gpio = <&gpio3 RK_PC6 GPIO_ACTIVE_HIGH>; //WIFI_PWREN_GPIO3_C6_1V8 - +// pcie_power_en_gpio = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;//PCIE_PWREN_H_GPIO0_D4 pinctrl-names = "default"; - pinctrl-0 = <&nk_io_gpio>; - nodka_lvds = <9>; + pinctrl-0 = <&nk_io_gpio>; }; + + panel: panel { + compatible = "simple-panel"; + backlight = <&backlight>; + power-supply = <&vcc3v3_lcd0_n>; + enable-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; //LCD0_VDD_H_GPIO2_D4 + reset-gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_LOW>; //7511_RST_GPIO3_D1 + edp-bl-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>; //LCD0_BKLT_EN_3V3 + edp-bl-en = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>; //LCD0_BKLT_EN_3V3 + bus-format = <MEDIA_BUS_FMT_RGB888_1X24>; + bpc = <8>; + prepare-delay-ms = <200>; + enable-delay-ms = <20>; + lvds-gpio0 = <&gpio3 RK_PD2 GPIO_ACTIVE_HIGH>; //7511_GPIO0-GPIO3_D2 + lvds-gpio1 = <&gpio3 RK_PD3 GPIO_ACTIVE_HIGH>; //7511_GPIO1-GPIO3_D3 + lvds-gpio2 = <&gpio3 RK_PD4 GPIO_ACTIVE_HIGH>; //7511_GPIO2-GPIO3_D4 + lvds-gpio3 = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>; //7511_GPIO3-GPIO3_D5 + nodka-lvds = <9>; + + display-timings { + native-mode = <&timing0>; + timing0: timing0 { + clock-frequency = <142300000>; + hactive = <1920>; + vactive = <1080>; + hfront-porch = <48>; + hsync-len = <32>; + hback-porch = <100>; + vfront-porch = <7>; + vsync-len = <20>; + vback-porch = <23>; + hsync-active = <0>; + vsync-active = <0>; + de-active = <0>; + pixelclk-active = <0>; + }; + }; + ports { + panel_in: endpoint { + remote-endpoint = <&edp_out>; + }; + }; + }; }; &combphy0_us { @@ -134,11 +165,11 @@ }; &csi2_dphy_hw { - status = "okay"; + status = "disabled"; }; &csi2_dphy0 { - status = "okay"; + status = "disabled"; ports { #address-cells = <1>; @@ -181,8 +212,12 @@ * video_phy0 needs to be enabled * when dsi0 is enabled */ +&video_phy0 { + status = "disabled"; +}; + &dsi0 { - status = "okay"; + status = "disabled"; }; &dsi0_in_vp0 { @@ -190,7 +225,7 @@ }; &dsi0_in_vp1 { - status = "okay"; + status = "disabled"; }; &dsi0_panel { @@ -201,6 +236,10 @@ * video_phy1 needs to be enabled * when dsi1 is enabled */ + +&video_phy1 { + status = "disabled"; +}; &dsi1 { status = "disabled"; }; @@ -217,22 +256,82 @@ power-supply = <&vcc3v3_lcd1_n>; }; +/* +* edp_start +*/ + &edp { - hpd-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>; - status = "okay"; + force-hpd; + status = "okay"; + ports { + port@1 { + reg = <1>; + edp_out: endpoint { + remote-endpoint = <&panel_in>; + }; + }; + }; }; &edp_phy { - status = "okay"; + status = "okay"; }; &edp_in_vp0 { - status = "okay"; + status = "disabled"; }; &edp_in_vp1 { + status = "okay"; +}; + +&route_edp { + status = "okay"; + connect = <&vp1_out_edp>; +}; + +&route_edp { + status = "okay"; +}; +/* +* edp_end +*/ + +/* +* Hdmi_start +*/ + +&hdmi { + status = "okay"; + rockchip,phy-table = + <92812500 0x8009 0x0000 0x0270>, + <165000000 0x800b 0x0000 0x026d>, + <185625000 0x800b 0x0000 0x01ed>, + <297000000 0x800b 0x0000 0x01ad>, + <594000000 0x8029 0x0000 0x0088>, + <000000000 0x0000 0x0000 0x0000>; +}; + +&route_hdmi { + status = "okay"; + connect = <&vp0_out_hdmi>; +}; + +&hdmi_in_vp0 { + status = "okay"; +}; + +&hdmi_in_vp1 { status = "disabled"; }; + +&hdmi_sound { + status = "okay"; +}; + +/* + * Hdmi_END +*/ &gmac0 { phy-mode = "rgmii"; @@ -409,20 +508,14 @@ }; }; -&video_phy0 { - status = "okay"; -}; -&video_phy1 { - status = "disabled"; -}; &pcie30phy { status = "okay"; }; -&pcie3x2 { - reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>; +&pcie2x1 { + reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>; vpcie3v3-supply = <&vcc3v3_pcie>; status = "okay"; }; @@ -477,15 +570,15 @@ }; &rkisp { - status = "okay"; + status = "disabled"; }; &rkisp_mmu { - status = "okay"; + status = "disabled"; }; &rkisp_vir0 { - status = "okay"; + status = "disabled"; port { #address-cells = <1>; @@ -499,14 +592,11 @@ }; &route_dsi0 { - status = "okay"; + status = "disabled"; connect = <&vp1_out_dsi0>; }; -&route_edp { - status = "okay"; - connect = <&vp0_out_edp>; -}; + &sata2 { status = "okay"; @@ -545,7 +635,7 @@ }; &vcc3v3_lcd0_n { - gpio = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; + gpio = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; enable-active-high; }; diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi index 4b2aae0..ea2fb31 100755 --- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi +++ b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi @@ -291,7 +291,7 @@ regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; enable-active-high; - gpio = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; + gpio = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; //VCC3_IO_EN_GPIO0_C4_3V3 vin-supply = <&vcc3v3_sys>; regulator-state-mem { @@ -1070,28 +1070,7 @@ status = "okay"; }; -&hdmi { - status = "okay"; - rockchip,phy-table = - <92812500 0x8009 0x0000 0x0270>, - <165000000 0x800b 0x0000 0x026d>, - <185625000 0x800b 0x0000 0x01ed>, - <297000000 0x800b 0x0000 0x01ad>, - <594000000 0x8029 0x0000 0x0088>, - <000000000 0x0000 0x0000 0x0000>; -}; -&hdmi_in_vp0 { - status = "okay"; -}; - -&hdmi_in_vp1 { - status = "disabled"; -}; - -&hdmi_sound { - status = "okay"; -}; &i2c0 { status = "okay"; @@ -1691,10 +1670,7 @@ status = "okay"; }; -&route_hdmi { - status = "okay"; - connect = <&vp0_out_hdmi>; -}; + &saradc { status = "okay"; diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi index bd07a1e..90c1e53 100755 --- a/kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi +++ b/kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi @@ -256,20 +256,20 @@ connect = <&vp0_out_dsi1>; }; route_edp: route-edp { - status = "disabled"; + status = "okay"; logo,uboot = "logo.bmp"; logo,kernel = "logo_kernel.bmp"; logo,mode = "center"; charge_logo,mode = "center"; - connect = <&vp0_out_edp>; + connect = <&vp1_out_edp>; }; route_hdmi: route-hdmi { - status = "disabled"; + status = "okay"; logo,uboot = "logo.bmp"; logo,kernel = "logo_kernel.bmp"; logo,mode = "center"; charge_logo,mode = "center"; - connect = <&vp1_out_hdmi>; + connect = <&vp0_out_hdmi>; }; route_lvds: route-lvds { status = "disabled"; @@ -2397,7 +2397,7 @@ reg-names = "pcie-dbi", "pcie-apb"; resets = <&cru SRST_PCIE20_POWERUP>; reset-names = "pipe"; - status = "disabled"; + status = "okay"; pcie2x1_intc: legacy-interrupt-controller { interrupt-controller; diff --git a/kernel/drivers/misc/nkio/nk_io_core.c b/kernel/drivers/misc/nkio/nk_io_core.c index e084fb3..b9db2bd 100755 --- a/kernel/drivers/misc/nkio/nk_io_core.c +++ b/kernel/drivers/misc/nkio/nk_io_core.c @@ -61,11 +61,8 @@ { struct device_node *node = pdev->dev.of_node; struct nk_io_pdata *pdata; - int gpio0, gpio1, gpio2, gpio3, reset_pin, ch342_reset; int ret; - int lvds_index; - int i=0; - static int lvds_gpio[4] ; + enum of_gpio_flags flags; @@ -97,7 +94,7 @@ goto err; } } - +#if 0 //vcc3_io_en_gpio ret = of_get_named_gpio_flags(node, "vcc3_io_en_gpio", 0, &flags); if (ret < 0) { @@ -117,7 +114,7 @@ goto err; } } - +#endif //vcc_12v_io ret = of_get_named_gpio_flags(node, "vcc_12v_io", 0, &flags); if (ret < 0) { @@ -287,7 +284,24 @@ printk("%s() gpio_direction_output hp_en_gpio set ERROR\n", __FUNCTION__); } } - +#if 0 + //pcie_power_en_gpio + ret = of_get_named_gpio_flags(node, "pcie_power_en_gpio", 0, &flags); + if (ret < 0) { + printk("%s() Can not read property pcie_power_en_gpio\n", __FUNCTION__); + } else { + pdata->pcie_power_en_gpio = ret; + + ret = devm_gpio_request(&pdev->dev, pdata->pcie_power_en_gpio, "pcie_power_en_gpio"); + if(ret < 0){ + printk("%s() devm_gpio_request pcie_power_en_gpio request ERROR\n", __FUNCTION__); + } + ret = gpio_direction_output(pdata->pcie_power_en_gpio,1); + if(ret < 0){ + printk("%s() gpio_direction_output pcie_power_en_gpio set ERROR\n", __FUNCTION__); + } + } +#endif //wifi_power_en_gpio ret = of_get_named_gpio_flags(node, "wifi_power_en_gpio", 0, &flags); if (ret < 0) { @@ -377,24 +391,42 @@ } } - //ch342_enable-gpio; - ret = of_get_named_gpio_flags(node, "ch342_power", 0, &flags); + //lcd_bk_en_gpio; + ret = of_get_named_gpio_flags(node, "lcd_bk_en_gpio", 0, &flags); if (ret < 0) { - printk("%s() Can not read property ch342_gpio\n", __FUNCTION__); + printk("%s() Can not read property lcd_bk_en_gpio\n", __FUNCTION__); } else { - pdata->ch342_power = ret; + pdata->lcd_bk_en_gpio = ret; - ret = devm_gpio_request(&pdev->dev, pdata->ch342_power, "ch342_power"); + ret = devm_gpio_request(&pdev->dev, pdata->lcd_bk_en_gpio, "lcd_bk_en_gpio"); if(ret < 0){ - printk("%s() devm_gpio_request ch342_power request ERROR\n", __FUNCTION__); + printk("%s() devm_gpio_request lcd_bk_en_gpio request ERROR\n", __FUNCTION__); } - ret = gpio_direction_output(pdata->ch342_power,1); + ret = gpio_direction_output(pdata->lcd_bk_en_gpio,1); if(ret < 0){ - printk("%s() gpio_direction_input ch342_power set ERROR\n", __FUNCTION__); + printk("%s() gpio_direction_output lcd_bk_en_gpio set ERROR\n", __FUNCTION__); } } -*/ + + //lcd_pwblk_gpio; + ret = of_get_named_gpio_flags(node, "lcd_pwblk_gpio", 0, &flags); + if (ret < 0) { + printk("%s() Can not read property lcd_pwblk_gpio\n", __FUNCTION__); + } else { + pdata->lcd_pwblk_gpio = ret; + + ret = devm_gpio_request(&pdev->dev, pdata->lcd_pwblk_gpio, "lcd_pwblk_gpio"); + if(ret < 0){ + printk("%s() devm_gpio_request lcd_pwblk_gpio request ERROR\n", __FUNCTION__); + } + + ret = gpio_direction_output(pdata->lcd_pwblk_gpio,1); + if(ret < 0){ + printk("%s() gpio_direction_output lcd_pwblk_gpio set ERROR\n", __FUNCTION__); + } + } + //edp_set_pixel-s ret = of_get_named_gpio_flags(node, "edp_reset", 0, &flags); @@ -498,6 +530,12 @@ gpio_direction_output(gpio2, lvds_gpio[2]); gpio_direction_output(gpio3, lvds_gpio[3]); + + gpio_direction_output(reset_pin, 0); + usleep_range(80000, 100000); + gpio_direction_output(reset_pin, 1); + usleep_range(80000, 100000); +*/ printk(" #######nk_io_control_probe end####### \n"); return 0; @@ -542,38 +580,6 @@ static int nk_io_control_resume(struct platform_device *pdev) { - int ret,reset_pin; - printk("nk_io resume !!!!\n"); - ret = gpio_get_value(120); - -#if 0 - gpio_set_value(8,1); - ret = gpio_get_value(8); - printk("vcc12v gpio value : %d\n",ret); -#endif -#if 0 - gpio_set_value(15,1); - ret = gpio_get_value(15); - printk("edp_en gpio value : %d\n",ret); - gpio_set_value(21,1); - ret = gpio_get_value(21); - printk("hub_host3_5v_gpio value : %d\n",ret); -#endif -#if 0 - usleep_range(80000, 100000); - gpio_set_value(120,0); -// gpio_direction_output(120, 0); - usleep_range(80000, 100000); - ret = gpio_get_value(120); - printk("edp_reset gpio value : %d\n",ret); -// gpio_direction_output(120, 1); - gpio_set_value(120,1); - usleep_range(80000, 100000); - ret = gpio_get_value(120); - printk("edp_reset gpio value : %d\n",ret); -#endif - //enable = 1; - //LED_SET(11); return 0; } diff --git a/kernel/drivers/misc/nkio/nkio.h b/kernel/drivers/misc/nkio/nkio.h index 1693957..b4c9557 100755 --- a/kernel/drivers/misc/nkio/nkio.h +++ b/kernel/drivers/misc/nkio/nkio.h @@ -28,7 +28,7 @@ unsigned int edp_power_supply_gpio; unsigned int edp_enable_gpio; unsigned int spk_out_gpio; - unsigned int vddio_mipi; + unsigned int pcie_power_en_gpio; // unsigned int tp_reset; }; diff --git a/lcdparamservice/chglcd.sh b/lcdparamservice/chglcd.sh new file mode 100755 index 0000000..99d7fea --- /dev/null +++ b/lcdparamservice/chglcd.sh @@ -0,0 +1,28 @@ +#!/bin/bash +CONFIG_PATH="/root/.config/nodka_lcd/lcd.config" +EDP_PARMFILE_PATH="/nodka_test/lcd_parameters/eDP/" +LVDS_PARMFILE_PATH="/nodka_test/lcd_parameters/LVDS/" + +choose_button=$(grep choose_button $CONFIG_PATH) +choose_button=${choose_button:14} +echo $choose_button + +edp_type=$(grep edp_type $CONFIG_PATH) +edp_type=${edp_type:9} +echo $edp_type + +lvds_type=$(grep lvds_type $CONFIG_PATH) +lvds_type=${lvds_type:10} +echo $lvds_type + +if [[ $choose_button = "button_eDP" ]];then + cp $EDP_PARMFILE_PATH$edp_type /nodka_test/nodka_lcd +else + cp $LVDS_PARMFILE_PATH$lvds_type /nodka_test/nodka_lcd +fi +sync + + +lcdparamservice + + diff --git a/lcdparamservice/lcd_parameters/LVDS/10.1_LVDS_1280x800 b/lcdparamservice/lcd_parameters/LVDS/10.1_LVDS_1280x800 new file mode 100755 index 0000000..d9e58d1 --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/10.1_LVDS_1280x800 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 72500000; +hactive = 1280; +hfront-porch = 70; +hsync-len = 72; +hback-porch = 160; +vactive = 800; +vfront-porch = 4; +vsync-len = 21; +vback-porch = 42; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 15; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/12.1_LVDS_1024x768 b/lcdparamservice/lcd_parameters/LVDS/12.1_LVDS_1024x768 new file mode 100755 index 0000000..4140687 --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/12.1_LVDS_1024x768 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 70000000; +hactive = 1024; +hfront-porch = 58; +hsync-len = 320; +hback-porch = 44; +vactive = 768; +vfront-porch = 3; +vsync-len = 15; +vback-porch = 38; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 13; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/15_LVDS_1024X768 b/lcdparamservice/lcd_parameters/LVDS/15_LVDS_1024X768 new file mode 100755 index 0000000..4a68b67 --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/15_LVDS_1024X768 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 70000000; +hactive = 1024; +hfront-porch = 48; +hsync-len = 320; +hback-porch = 44; +vactive = 768; +vfront-porch = 3; +vsync-len = 15; +vback-porch = 38; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 13; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/17_LVDS_1280x1024 b/lcdparamservice/lcd_parameters/LVDS/17_LVDS_1280x1024 new file mode 100755 index 0000000..3d3f70c --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/17_LVDS_1280x1024 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 107900000; +hactive = 1280; +hfront-porch = 96; +hsync-len = 160; +hback-porch = 408; +vactive = 1024; +vfront-porch = 7; +vsync-len = 19; +vback-porch = 42; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 12; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/18.5_LVDS_1366x768 b/lcdparamservice/lcd_parameters/LVDS/18.5_LVDS_1366x768 new file mode 100755 index 0000000..19c716c --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/18.5_LVDS_1366x768 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 78000000; +hactive = 1366; +hfront-porch = 28; +hsync-len = 40; +hback-porch = 240; +vactive = 768; +vfront-porch = 3; +vsync-len = 17; +vback-porch = 40; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 11; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/19_LVDS_1280x1024 b/lcdparamservice/lcd_parameters/LVDS/19_LVDS_1280x1024 new file mode 100755 index 0000000..3d3f70c --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/19_LVDS_1280x1024 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 107900000; +hactive = 1280; +hfront-porch = 96; +hsync-len = 160; +hback-porch = 408; +vactive = 1024; +vfront-porch = 7; +vsync-len = 19; +vback-porch = 42; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 12; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/19_LVDS_1400x900 b/lcdparamservice/lcd_parameters/LVDS/19_LVDS_1400x900 new file mode 100755 index 0000000..89b9488 --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/19_LVDS_1400x900 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 91000000; +hactive = 1440; +hfront-porch = 20; +hsync-len = 60; +hback-porch = 160; +vactive = 900; +vfront-porch = 6; +vsync-len = 16; +vback-porch = 48; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 7; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/21.5_LVDS_1920x1080 b/lcdparamservice/lcd_parameters/LVDS/21.5_LVDS_1920x1080 new file mode 100755 index 0000000..9890330 --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/21.5_LVDS_1920x1080 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 142300000; +hactive = 1980; +hfront-porch = 48; +hsync-len = 80; +hback-porch = 180; +vactive = 1080; +vfront-porch = 7; +vsync-len = 27; +vback-porch = 50; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 9; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/21.8_LVDS_1920x1080 b/lcdparamservice/lcd_parameters/LVDS/21.8_LVDS_1920x1080 new file mode 100755 index 0000000..9890330 --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/21.8_LVDS_1920x1080 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 142300000; +hactive = 1980; +hfront-porch = 48; +hsync-len = 80; +hback-porch = 180; +vactive = 1080; +vfront-porch = 7; +vsync-len = 27; +vback-porch = 50; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 9; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/23.8_LVDS_1920x1080 b/lcdparamservice/lcd_parameters/LVDS/23.8_LVDS_1920x1080 new file mode 100755 index 0000000..9890330 --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/23.8_LVDS_1920x1080 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 142300000; +hactive = 1980; +hfront-porch = 48; +hsync-len = 80; +hback-porch = 180; +vactive = 1080; +vfront-porch = 7; +vsync-len = 27; +vback-porch = 50; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 9; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/LVDS/8_LVDS_800x600 b/lcdparamservice/lcd_parameters/LVDS/8_LVDS_800x600 new file mode 100755 index 0000000..c2e09dc --- /dev/null +++ b/lcdparamservice/lcd_parameters/LVDS/8_LVDS_800x600 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 40000000; +hactive = 800; +hfront-porch = 4; +hsync-len = 214; +hback-porch = 260; +vactive = 600; +vfront-porch = 4; +vsync-len = 16; +vback-porch = 39; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 6; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/eDP/12.5_eDP_1366x768 b/lcdparamservice/lcd_parameters/eDP/12.5_eDP_1366x768 new file mode 100755 index 0000000..29a546f --- /dev/null +++ b/lcdparamservice/lcd_parameters/eDP/12.5_eDP_1366x768 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 78000000; +hactive = 1366; +hfront-porch = 28; +hsync-len = 40; +hback-porch = 140; +vactive = 768; +vfront-porch = 3; +vsync-len = 17; +vback-porch = 40; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 11; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/eDP/12.5_eDP_1920x1080 b/lcdparamservice/lcd_parameters/eDP/12.5_eDP_1920x1080 new file mode 100755 index 0000000..9890330 --- /dev/null +++ b/lcdparamservice/lcd_parameters/eDP/12.5_eDP_1920x1080 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 142300000; +hactive = 1980; +hfront-porch = 48; +hsync-len = 80; +hback-porch = 180; +vactive = 1080; +vfront-porch = 7; +vsync-len = 27; +vback-porch = 50; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 9; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/eDP/13.3_eDP_1920x1080 b/lcdparamservice/lcd_parameters/eDP/13.3_eDP_1920x1080 new file mode 100755 index 0000000..9890330 --- /dev/null +++ b/lcdparamservice/lcd_parameters/eDP/13.3_eDP_1920x1080 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 142300000; +hactive = 1980; +hfront-porch = 48; +hsync-len = 80; +hback-porch = 180; +vactive = 1080; +vfront-porch = 7; +vsync-len = 27; +vback-porch = 50; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 9; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/eDP/15.6_eDP_1920x1080 b/lcdparamservice/lcd_parameters/eDP/15.6_eDP_1920x1080 new file mode 100755 index 0000000..9890330 --- /dev/null +++ b/lcdparamservice/lcd_parameters/eDP/15.6_eDP_1920x1080 @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 142300000; +hactive = 1980; +hfront-porch = 48; +hsync-len = 80; +hback-porch = 180; +vactive = 1080; +vfront-porch = 7; +vsync-len = 27; +vback-porch = 50; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 9; \ No newline at end of file diff --git a/lcdparamservice/lcd_parameters/eDP/15.6_eDP_1920x1080_NV156FHM b/lcdparamservice/lcd_parameters/eDP/15.6_eDP_1920x1080_NV156FHM new file mode 100755 index 0000000..4b51aba --- /dev/null +++ b/lcdparamservice/lcd_parameters/eDP/15.6_eDP_1920x1080_NV156FHM @@ -0,0 +1,25 @@ +panel-type = 1; + +unprepare-delay-ms = 100; +enable-delay-ms = 100; +disable-delay-ms = 0; +prepare-delay-ms = 100; +reset-delay-ms = 100; +init-delay-ms = 100; +width-mm = 240; +height-mm = 300; + +clock-frequency = 141400000; +hactive = 1980; +hfront-porch = 48; +hsync-len = 80; +hback-porch = 220; +vactive = 1080; +vfront-porch = 7; +vsync-len = 9; +vback-porch = 22; +hsync-active = 0; +vsync-activee = 0; +de-active = 0; +pixelclk-active = 0; +nodka_lvds = 9; \ No newline at end of file diff --git a/lcdparamservice/lcdparamservice b/lcdparamservice/lcdparamservice new file mode 100755 index 0000000..61f93fe --- /dev/null +++ b/lcdparamservice/lcdparamservice Binary files differ diff --git a/lcdparamservice/lcdparamservice.c b/lcdparamservice/lcdparamservice.c new file mode 100755 index 0000000..3c8ca80 --- /dev/null +++ b/lcdparamservice/lcdparamservice.c @@ -0,0 +1,547 @@ +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <termio.h> +#include <stdio.h> +#include <sys/ioctl.h> +#include <sys/time.h> +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +//#include <cutils/properties.h> +#include <sys/utsname.h> +//#include <cutils/list.h> +//#include <cutils/log.h> +//#include <cutils/sockets.h> +#include <sys/reboot.h> +//#include <cutils/iosched_policy.h> + +#undef LOG_TAG +#define LOG_TAG "LcdParamService" + +typedef unsigned short uint16; +typedef unsigned long uint32; +typedef unsigned char uint8; + + +#define LCD_PARAMETE_FILE_UPATH "find /media/demo/usb0 -name nodka_lcd" +#define LCD_PARAMETE_FILE_SDPATH "find /nodka_test -name nodka_lcd" +//#define OEM_PARTITIOM_NODE_PATH "/dev/block/by-name/lcdparam" +//#define BASEPARAMETER_PATH "dev/block/platform/fe330000.sdhci/by-name/baseparameter" +#define BASEPARAMETER_PATH "/dev/block/by-name/baseparameter" +/*#define OEM_PARTITIOM_NODE_PATH "data/oem"*/ + +/*#define RKNAND_GET_VENDOR_SECTOR0 _IOW('v', 16, unsigned int)*/ +/*#define RKNAND_STORE_VENDOR_SECTOR0 _IOW('v', 17, unsigned int)*/ + + +#define RKNAND_SYS_STORGAE_DATA_LEN 512 //oem size +/*#define VENDOR_SECTOR_OP_TAG 0x444E4556 // "VEND"*/ + +#define POLY 0xEDB88320L //CRC stand +#define CONFIG_NUM 27 +#define BASE_OFFSET 256 * 1024 + +char *key[CONFIG_NUM] = +{ + "panel-type", + + "unprepare-delay-ms", + "enable-delay-ms", + "disable-delay-ms", + "prepare-delay-ms", + "reset-delay-ms", + "init-delay-ms", + "width-mm", + "height-mm", + + "clock-frequency", + "hactive", + "hfront-porch", + "hsync-len", + "hback-porch", + "vactive", + "vfront-porch", + "vsync-len", + "vback-porch", + "hsync-active", + "vsync-active", + "de-active", + "pixelclk-active", + + "dsi,flags", + "dsi,format", + "dsi,lanes", + "panel-init-sequence", + + "nodka_lvds" +}; + +typedef struct tagRKNAND_SYS_STORGAE +{ + /*unsigned long tag;*/ + /*unsigned long len;*/ + unsigned char data[RKNAND_SYS_STORGAE_DATA_LEN]; +}RKNAND_SYS_STORGAE; + + +static uint32 crc32_tab[256]; +static uint32 nand_crc = 0; + +char *strreplace(char *s, char old, char new) +{ + for (; *s; ++s) + if (*s == old) + *s = new; + return s; +} + +void rknand_print_hex_data(uint8 *s,uint32 * buf,uint32 len) +{ + uint32 i; + printf("%s\n",s); + for(i=0;i<len;i+=4) + { + printf("%lx %lx %lx %lx\n",buf[i],buf[i+1],buf[i+2],buf[i+3]); + } +} + + +void init_crc32_tab(void) +{ + int i = 0; + int j = 0; + uint32 crc = 0; + + for(i = 0; i < 256; i++) + { + crc = (uint32)i; + for(j = 0; j < 8; j++) + { + if(crc & 0x00000001L) + crc = (crc >> 1) ^ POLY; + else + crc = crc >> 1; + } + crc32_tab[i] = crc; + } + +} + +uint32 get_crc32(uint32 crc_init, uint8 *crc_buf, uint32 buf_size) +{ + uint32 crc = crc_init ^ 0xffffffff; + + init_crc32_tab(); + while(buf_size--) + crc = (crc >> 8) ^ crc32_tab[(crc & 0xff) ^ *crc_buf++]; + return crc ^ 0xfffffff; +} + +uint32 getfile_crc(FILE *fp) +{ + uint32 size = 4 *1024; + uint8 crc_buf[size]; + uint32 readln = 0; + uint crc = 0; + + while((readln = fread(crc_buf, sizeof(uint8), size, fp)) > 0) + crc = get_crc32(crc, crc_buf, readln); + + return crc; + +} + +/* + *去除字符串左端空格 + */ +char *strtriml(char *pstr) +{ + int i = 0,j; + j = strlen(pstr) - 1; + while (isspace(pstr[i]) && (i <= j)) + i++; + if (0<i) + strcpy(pstr, &pstr[i]); + return pstr; +} + +/* + *去除字符串右端空格 + */ +char *strtrimr(char *pstr) +{ + int i; + i = strlen(pstr) - 1; + while (isspace(pstr[i]) && (i >= 0)) + pstr[i--] = '\0'; + return pstr; +} + +/* + *去除字符串两端空格 + */ +char *strtrim(char *pstr) +{ + char *p; + p = strtrimr(pstr); + return strtriml(p); +} + + +char *strdelchr(char *pstr, int chr) +{ + int i = 0; + int l = 0; + int ll = 0; + ll = l = strlen(pstr); + + while(i < l) + { + if(pstr[i] == chr) + { + memmove((pstr + i), (pstr + i + 1), (ll - i -1)); + pstr[ll - 1] = '\0'; + ll--; + } + i++; + } + /* for(i = 0; i < l; i++) */ + /* { */ + /* if(pstr[i] == chr) */ + /* { */ + /* memmove((pstr + i), (pstr + i + 1), (l - i -1)); */ + /* pstr[l - 1] = '\0'; */ + /* break; */ + /* } */ + /* } */ + return pstr; +} + + +void strrmspace(char * str) +{ + char *p1, *p2; + char ch; + p1 = str; //first pointer + p2 = str; // second pointer to the remaining string + if (p1==NULL) return; + while (*p1) + { + if (*p1 != ' ') + { + ch = *p1; + *p2 = ch; + p1++; + p2++; + } + else + { + p1++; + } + } + *p2 = '\0'; +} +uint32 getfile_crc_from_nand(void) +{ + int ret = 0; + uint32 crc = 0; + + RKNAND_SYS_STORGAE sysData; + + int sys_fd; + + if (0 != access(BASEPARAMETER_PATH, R_OK | W_OK)){ + printf("access fail!!!\n"); + return -1; + } + + memset(sysData.data, '\0', sizeof(sysData.data)); + /*sysData.tag = VENDOR_SECTOR_OP_TAG;*/ + /*sysData.len = RKNAND_SYS_STORGAE_DATA_LEN-8;*/ + /*sys_fd = fopen(OEM_PARTITIOM_NODE_PATH, "r");*/ + /*[>sys_fd = open("/dev/rknand_sys_storage",O_RDWR,0);<]*/ + /*if(sys_fd == NULL)*/ + /*{*/ + /*printf("fopen err %s err=%d\n",OEM_PARTITIOM_NODE_PATH, sys_fd);*/ + /*return -1;*/ + /*}*/ + + sys_fd = open(BASEPARAMETER_PATH, O_RDONLY); + + if (sys_fd < 0) + { + printf("fopen err %s sys_fd=,%d\n",BASEPARAMETER_PATH, sys_fd); + return -1; + } + lseek(sys_fd, BASE_OFFSET, SEEK_SET); + ret = read (sys_fd, (void*)&sysData, sizeof(sysData)); + if (ret < 0) + { + printf("read err %s sys_fd=,%d\n",BASEPARAMETER_PATH, sys_fd ); + return -1; + } + + /*ret = ioctl(sys_fd, RKNAND_GET_VENDOR_SECTOR0, &sysData);*/ + /*fread((void*)&sysData,sizeof(sysData),1,sys_fd);*/ + /* rknand_print_hex_data("getfile_crc_from_nand data:",(uint32*)sysData.data,32); */ + /* crc = sysData.data[24 * 4]; */ + /* crc = (crc << 8) + sysData.data[24 * 4 + 1]; */ + /* crc = (crc << 8) + sysData.data[24 * 4 + 2]; */ + /* crc = (crc << 8) + sysData.data[24 * 4 + 3]; */ + /* printf("-luoxt- crc data = 0x%02x%02x%02x%02x", sysData.data[24 * 4], */ + /* sysData.data[24 * 4 + 1], */ + /* sysData.data[24 * 4 + 2], */ + /* sysData.data[24 * 4 + 3]); */ + + for(int i = 0; i < CONFIG_NUM+1; i++){ + crc = sysData.data[i * 4]; + crc = (crc << 8) + sysData.data[i * 4 + 1]; + crc = (crc << 8) + sysData.data[i * 4 + 2]; + crc = (crc << 8) + sysData.data[i * 4 + 3]; + printf("-luoxt- %d nand crc data = 0X%02X%02X%02X%02X\n", i, sysData.data[i * 4], + sysData.data[i * 4 + 1], + sysData.data[i * 4 + 2], + sysData.data[i * 4 + 3]); + } + + + crc = sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-4]; + crc = (crc << 8) + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-3]; + crc = (crc << 8) + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-2]; + crc = (crc << 8) + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-1]; + printf("-luoxt- nand crc data = 0X%02X%02X%02X%02X\n", sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-4], + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-3], + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-2], + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-1]); + close(sys_fd); + + return crc; +} + +int rk_update_lcd_parameters_from_sdcard(void) +{ + + int ret = 0; + FILE *fp = 0; + char line[1024] = {0}; + int i = 0; + RKNAND_SYS_STORGAE sysData; + int sys_fd = 0; + static uint32 file_crc = 0; //file lcdparameter crc data + static int updated = 0; // had store the param into the nand + static char got_crc = 0; //get file crc flag + char lcdparameter_buf[128]; + FILE *stream; + + memset( lcdparameter_buf, '\0', sizeof(lcdparameter_buf) ); + memset(sysData.data, '\0', sizeof(sysData.data)); + if((access(LCD_PARAMETE_FILE_UPATH,F_OK))!=-1) + { + printf("update form udisk\n"); + stream = popen(LCD_PARAMETE_FILE_UPATH, "r"); + } + else + { + printf("update form emmc\n"); + stream = popen(LCD_PARAMETE_FILE_SDPATH, "r"); + } + fread( lcdparameter_buf, sizeof(char), sizeof(lcdparameter_buf), stream); + strreplace(lcdparameter_buf,'\n','\0'); + pclose(stream); + + /* + while(access(lcdparameter_buf, 0)) + { + if(updated) + updated = 0; + if(got_crc) + got_crc = 0; + return -1; + } + */ + + if(!updated) + { + if (!got_crc) + { + fp = fopen(lcdparameter_buf, "r"); + //fp = fopen("/root/rk_lcd_parameters", "rb"); + printf("---XYP_DEBUG--- ======== %s %d ========\n", __func__, __LINE__); + if(fp == NULL) + { + printf("open %s failed\n", lcdparameter_buf); + return -1; + } + else + { + printf("success open file %s \n", lcdparameter_buf); + } + + file_crc = getfile_crc(fp); + got_crc = 1; + printf(" file crc is 0X%08lX nand_crc is 0X%08lX \n", file_crc, nand_crc ); + fclose(fp); + } + + /*sysData.tag = VENDOR_SECTOR_OP_TAG;*/ + /*sysData.len = RKNAND_SYS_STORGAE_DATA_LEN - 8;*/ + + if((nand_crc != file_crc)) + { + fp = fopen(lcdparameter_buf, "r"); + if(fp == NULL) + { + printf("open %s failed\n", lcdparameter_buf); + return -1; + } + else + { + printf("success open file %s\n", lcdparameter_buf); + } + + + while(fgets(line, 1023, fp)) + { + char *p = strtrim(line); + int len = strlen(p); + if(len <= 0) + { + continue; + } + else if(p[0]=='#') + { + continue; + } + else if( (!(strstr(p, "="))) && (!(strstr(p, ";"))) && (!(strstr(p, "screen_")))) + { + continue; + } + else + { + // get key and value string like "screen_lvds_format = 1" spilt by ";" + char *key_val_str = strtok(p, ";"); + char *value = strchr(key_val_str, '='); + char cmd[4] = {'\0'}; + if(value == NULL) + continue; + for(i = 0; i < CONFIG_NUM; i++) + { + if(strstr(p, key[i])) + { + char *val = strdelchr(value, '='); + strrmspace(val); + uint32 config1 = atoi(val); + + if (strstr(p, "panel-init-sequence")) + { + int count=0; + int cmdlen=strlen(val)/2; + + sysData.data[i * 4] =(uint8) (cmdlen >> 24); + sysData.data[i * 4 + 1] =(uint8) (cmdlen >> 16); + sysData.data[i * 4 + 2] =(uint8) (cmdlen >> 8); + sysData.data[i * 4 + 3] =(uint8) (cmdlen >> 0); + printf("-luoxt- %s=%lu val %s\n", key[i], config1, val); + i ++; + while(1) + { + cmd [0] = '0'; + cmd [1] = 'x'; + cmd [2] = *val; + cmd [3] = *(++val); + uint8 cmdu8 = strtol(cmd,NULL,16); + sysData.data[i * 4 + count++] = cmdu8; + + printf("v1-luoxt- cmd=%d count=%d total=%d\n", cmdu8, count, cmdlen); + if (count < cmdlen) + ++val; //next cmd + else + break; + } + + } + else{ + sysData.data[i * 4] =(uint8) (config1 >> 24); + sysData.data[i * 4 + 1] =(uint8) (config1 >> 16); + sysData.data[i * 4 + 2] =(uint8) (config1 >> 8); + sysData.data[i * 4 + 3] =(uint8) (config1 >> 0); + printf("-luoxt- %s=%lu val %s\n", key[i], config1, val); + } + break; + } + } + + } + + } + // file crc data + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-4] = (uint8) (file_crc >> 24); + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-3] = (uint8) (file_crc >> 16); + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-2] = (uint8) (file_crc >> 8); + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-1] = (uint8) (file_crc >> 0); + printf("-luoxt- crc32 = 0X%02X%02X%02X%02X\n", sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-4], + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-3], + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-2], + sysData.data[RKNAND_SYS_STORGAE_DATA_LEN-1]); + + /* rknand_print_hex_data("lcd paramters save:",(uint32*)sysData.data,32); */ + /*ret = ioctl(sys_fd, RKNAND_STORE_VENDOR_SECTOR0, &sysData);*/ + + if (0 == access(BASEPARAMETER_PATH, 0)) + { + sys_fd = open(BASEPARAMETER_PATH, O_WRONLY); + + if (sys_fd < 0) + { + printf("open err %s err=%d\n",BASEPARAMETER_PATH, sys_fd); + return -1; + } + + lseek(sys_fd, BASE_OFFSET, SEEK_SET); + ret = write (sys_fd, (void*)&sysData.data[0], RKNAND_SYS_STORGAE_DATA_LEN); + if (ret < 0) + { + printf("read err %s err=%d\n",BASEPARAMETER_PATH, sys_fd); + return -1; + } + } + + close(sys_fd); + if(ret==-1){ + printf("save lcdparam error\n"); + } + else + { + updated = 1; + nand_crc = file_crc; + fclose(fp); + sync(); + reboot(RB_AUTOBOOT); + } + fclose(fp); + return ret; + } + } + return ret; +} + +int main(void) +{ + char command[128]; + strcpy( command, "dd if=/dev/zero of=/dev/block/by-name/baseparameter" ); + printf("CLEAN PARAMETERS\n"); + system(command); + nand_crc = getfile_crc_from_nand(); + while(1) + { + + rk_update_lcd_parameters_from_sdcard(); + //gettimeofday(&tv,NULL); + //fprintf(stderr, "[%ld] rk_update_lcd_parameters_from_sdcard sleep....\n", tv.tv_usec); + //usleep(100000); + sleep(5); + } + return 0; +} + diff --git a/rtl8852be b/rtl8852be new file mode 160000 index 0000000..68212c1 --- /dev/null +++ b/rtl8852be +Subproject commit 68212c16b229080742280f954b3ffde173e63fcc diff --git a/u-boot/arch/arm/mach-rockchip/kernel_dtb.c b/u-boot/arch/arm/mach-rockchip/kernel_dtb.c old mode 100644 new mode 100755 index 2f24cfa..3d3aa6a --- a/u-boot/arch/arm/mach-rockchip/kernel_dtb.c +++ b/u-boot/arch/arm/mach-rockchip/kernel_dtb.c @@ -16,6 +16,500 @@ DECLARE_GLOBAL_DATA_PTR; + +#if 1 +struct display_fixup_data { + int type; + + int delay_prepare; + int delay_enable; + int delay_disable; + int delay_unprepare; + int delay_reset; + int delay_init; + int size_width; + int size_height; + + int clock_frequency; + int hactive; + int hfront_porch; + int hsync_len; + int hback_porch; + int vactive; + int vfront_porch; + int vsync_len; + int vback_porch; + int hsync_active; + int vsync_active; + int de_active; + int pixelclk_active; + + /* for DSI Panel */ + int flags; + int format; + int lanes; + int init_cmd_length; + u8 *init_cmd; + + int nodka_lvds; +}; +enum { + PANEL_TYPE_DSI, + PANEL_TYPE_EDP, + PANEL_TYPE_LVDS, +}; + +#define CUSTOM_PARTITION_NAME "baseparameter" +#define LCD_PARAM_MAX_COUNT 27 + +int lcdParam[LCD_PARAM_MAX_COUNT]; +char param_buf_temp[4*1024] = {0}; + +void set_lcdparam_test_edp(struct display_fixup_data *data) +{ + + data->type = PANEL_TYPE_DSI; + data->delay_prepare = 100; + data->delay_enable = 100; + data->delay_disable = 100; + data->delay_unprepare = 100; + data->delay_reset = 100; + data->delay_init = 100; + data->size_width = 240; + data->size_height = 300; + data->clock_frequency = 60000000; + data->hactive = 1024; + data->hfront_porch = 12; + data->hsync_len = 16; + data->hback_porch = 48; + data->vactive = 600; + data->vfront_porch = 8; + data->vsync_len = 4; + data->vback_porch = 8; + data->hsync_active = 0; + data->vsync_active = 0; + data->de_active = 0; + data->pixelclk_active = 0; + data->flags = 0; + data->format = 0; + data->lanes = 4; + *(data->init_cmd + 0) = 0x05; + *(data->init_cmd + 1) = 0x00; + *(data->init_cmd + 2) = 0x01; + *(data->init_cmd + 3) = 0x01; + + *(data->init_cmd + 4) = 0x05; + *(data->init_cmd + 5) = 0x00; + *(data->init_cmd + 6) = 0x01; + *(data->init_cmd + 7) = 0x02; + + *(data->init_cmd + 8) = 0x05; + *(data->init_cmd + 9) = 0x00; + *(data->init_cmd + 10) = 0x01; + *(data->init_cmd + 11) = 0x03; + + *(data->init_cmd + 12) = 0x05; + *(data->init_cmd + 13) = 0x00; + *(data->init_cmd + 14) = 0x01; + *(data->init_cmd + 15) = 0x05; + +} + +int get_lcdparam_info_from_custom_partition(struct display_fixup_data *data) +{ + + struct blk_desc *dev_desc; + disk_partition_t part_info; + char *boot_partname = CUSTOM_PARTITION_NAME; + int ret,i; + + dev_desc = rockchip_get_bootdev(); + if (!dev_desc) { + printf("%s: dev_desc is NULL!\n", __func__); + return -ENODEV; + } + + ret = part_get_info_by_name(dev_desc, boot_partname, &part_info); + if (ret < 0) { + printf("%s: failed to get %s part, ret=%d\n", + __func__, boot_partname, ret); + /* RKIMG can support part table without 'boot' */ + return -1; + } + + printf("block num: %lu, name %s ,type %s,block size :%lu\n",part_info.size,part_info.name,part_info.type,part_info.blksz); + + ret = blk_dread(dev_desc, part_info.start + 512, 1, param_buf_temp); + if (ret != 1) { + printf("%s: failed to read screen parameter, ret=%d\n", + __func__, ret); + return -1; + } + + for (i = 0; i < LCD_PARAM_MAX_COUNT; i++) { + lcdParam[i] = param_buf_temp[i * 4]; + lcdParam[i] = (lcdParam[i] << 8) + param_buf_temp[i * 4 + 1]; + lcdParam[i] = (lcdParam[i] << 8) + param_buf_temp[i * 4 + 2]; + lcdParam[i] = (lcdParam[i] << 8) + param_buf_temp[i * 4 + 3]; + if(lcdParam[i] < 0){ + lcdParam[i] = -lcdParam[i]; + } + if(lcdParam[i] > 100000 && i != 9){ + lcdParam[i] = 0; + } + printf("--get-- lcd_param %d\n",lcdParam[i]); + } + + if(lcdParam[14] == 0 || lcdParam[10] == 0){ + return -1; + } + printf("-get- crc32 = 0X%02X%02X%02X%02X\n", + param_buf_temp[LCD_PARAM_MAX_COUNT * 4], param_buf_temp[LCD_PARAM_MAX_COUNT * 4 + 1], + param_buf_temp[LCD_PARAM_MAX_COUNT * 4 + 2], param_buf_temp[LCD_PARAM_MAX_COUNT * 4 + 3]); + + data->type = lcdParam[0]; + data->delay_prepare = lcdParam[4]; + data->delay_enable = lcdParam[2]; + data->delay_disable = lcdParam[3]; + data->delay_unprepare = lcdParam[1]; + data->delay_reset = lcdParam[5]; + data->delay_init = lcdParam[6]; + data->size_width = lcdParam[7]; + data->size_height = lcdParam[8]; + data->clock_frequency = lcdParam[9]; + data->hactive = lcdParam[10]; + data->hfront_porch = lcdParam[11]; + data->hsync_len = lcdParam[12]; + data->hback_porch = lcdParam[13]; + data->vactive = lcdParam[14]; + data->vfront_porch = lcdParam[15]; + data->vsync_len = lcdParam[16]; + data->vback_porch = lcdParam[17]; + data->hsync_active = lcdParam[18]; + data->vsync_active = lcdParam[19]; + data->de_active = lcdParam[20]; + data->pixelclk_active = lcdParam[21]; + data->flags = lcdParam[22]; + data->format = lcdParam[23]; + data->lanes = lcdParam[24]; + data->init_cmd_length = lcdParam[25] = 16; + data->nodka_lvds = lcdParam[26]; + data->init_cmd = malloc(sizeof(*(data->init_cmd)) * data->init_cmd_length); + for(i = 0; i < data->init_cmd_length; i++){ + *(data->init_cmd + i) = param_buf_temp[100 + i]; + // printf("init cmd = %x\n",param_buf_temp[100 + i]); + + } + +// set_lcdparam_test_edp(data); + + return 0; +} + +#endif + + +static int find_connector_node(const void *blob, int node) +{ + int phandle, remote; + int nodedepth; + + phandle = fdt_getprop_u32_default_node(blob, node, 0, + "remote-endpoint", -1); + remote = fdt_node_offset_by_phandle(blob, phandle); + nodedepth = fdt_node_depth(blob, remote); + + return fdt_supernode_atdepth_offset(blob, remote, + nodedepth - 3, NULL); +} + +static int get_panel_node(const void *blob, int conn_node) +{ + int panel, ports, port, ep, remote, ph, nodedepth; + + panel = fdt_subnode_offset(blob, conn_node, "panel"); + printf("panel_1=%d\n",panel); + if (panel > 0) { + return panel; + } + + ports = fdt_subnode_offset(blob, conn_node, "ports"); + if (ports < 0) + { + return -ENODEV; + } + + fdt_for_each_subnode(port, blob, ports) { + fdt_for_each_subnode(ep, blob, port) { + ph = fdt_getprop_u32_default_node(blob, ep, 0, + "remote-endpoint", 0); + if (!ph) + continue; + + remote = fdt_node_offset_by_phandle(blob, ph); + + nodedepth = fdt_node_depth(blob, remote); + if (nodedepth < 2) + continue; + + panel = fdt_supernode_atdepth_offset(blob, remote, + nodedepth - 2, + NULL); + break; + } + } + printf("panel_2=%d\n",panel); + return panel; +} + +static int fdt_fixup_node_status(void *blob, int node, enum fdt_status status) +{ + int ret; + +// printf("My fixup %s %d\n", fdt_get_name(blob, node, NULL), status); + +set_status: + ret = fdt_set_node_status(blob, node, status, 0); + if (ret == -FDT_ERR_NOSPACE) { + ret = fdt_increase_size(blob, 512); + if (!ret) + goto set_status; + else + goto err_size; + } else if (ret < 0) { + printf("Can't set node status: %s\n", fdt_strerror(ret)); + return ret; + } + + return 0; + +err_size: + printf("Can't increase blob size: %s\n", fdt_strerror(ret)); + return ret; +} + +static int fdt_fixup_panel_init_sequence(void *fdt, int node,const struct display_fixup_data *data) +{ + #if 0 + u8 init_buf[] = {0x05, 0x00, 0x01, 0x78, 0x15, 0x01, 0x02, 0x03, 0x04, 0x05, 0x05, 0x01, 0x14,0x39, 0x01, 0x03, 0x02, 0x29, 0x11}; + u8 exit_buf[] = {0x05, 0x64, 0x01, 0x29, 0x05, 0x64, 0x01, 0x11}; + #endif + int ret; + +add_seq: + ret = fdt_setprop(fdt, node, "panel-init-sequence", data->init_cmd, data->init_cmd_length); + if (ret == -FDT_ERR_NOSPACE) { + printf(" init sequence FDT_ERR_NOSPACE\n"); + ret = fdt_increase_size(fdt, data->init_cmd_length * 4);//gln the length needs precision + if (!ret) + goto add_seq; + else + goto err_size; + } else if (ret < 0) { + printf("Can't add property: %s\n", fdt_strerror(ret)); + return ret; + } + +#if 0 +add_init_seq: + ret = fdt_setprop(fdt, node, "panel-init-sequence", init_buf, sizeof(init_buf)); + if (ret == -FDT_ERR_NOSPACE) { + printf(" init sequence FDT_ERR_NOSPACE\n"); + ret = fdt_increase_size(fdt, 512);//gln the length needs precision + if (!ret) + goto add_init_seq; + else + goto err_size; + } else if (ret < 0) { + printf("Can't add property: %s\n", fdt_strerror(ret)); + return ret; + } +add_exit_seq: + ret = fdt_setprop(fdt, node, "panel-exit-sequence", exit_buf, sizeof(exit_buf)); + if (ret == -FDT_ERR_NOSPACE) { + printf(" init sequence FDT_ERR_NOSPACE\n"); + ret = fdt_increase_size(fdt, 512);//gln the length needs precision + if (!ret) + goto add_exit_seq; + else + goto err_size; + } else if (ret < 0) { + printf("Can't add property: %s\n", fdt_strerror(ret)); + return ret; + } +#endif + + return 0; + +err_size: + printf("Can't increase blob size: %s\n", fdt_strerror(ret)); + return ret; +} + +static int fdt_fixup_setprop_u32(void *fdt, int node, const char *name, u32 data) +{ + int ret; + +set_prop: + ret = fdt_setprop_u32(fdt, node, name, data); + if (ret == -FDT_ERR_NOSPACE) { + ret = fdt_increase_size(fdt, 512); + if (!ret) + goto set_prop; + else + goto err_size; + } else if (ret < 0) { + printf("Can't add property: %s\n", fdt_strerror(ret)); + return ret; + } + + return 0; + +err_size: + printf("Can't increase blob size: %s\n", fdt_strerror(ret)); + return ret; +} + +static void fdt_fixup_display_timing(void *blob, int node, + const struct display_fixup_data *data) +{ + fdt_fixup_setprop_u32(blob, node, "clock-frequency", data->clock_frequency); + fdt_fixup_setprop_u32(blob, node, "hactive", data->hactive); + fdt_fixup_setprop_u32(blob, node, "hfront-porch", data->hfront_porch); + fdt_fixup_setprop_u32(blob, node, "hsync-len", data->hsync_len); + fdt_fixup_setprop_u32(blob, node, "hback-porch", data->hback_porch); + fdt_fixup_setprop_u32(blob, node, "vactive", data->vactive); + fdt_fixup_setprop_u32(blob, node, "vfront-porch", data->vfront_porch); + fdt_fixup_setprop_u32(blob, node, "vsync-len", data->vsync_len); + fdt_fixup_setprop_u32(blob, node, "vback-porch", data->vback_porch); + fdt_fixup_setprop_u32(blob, node, "hsync-active", data->hsync_active); + fdt_fixup_setprop_u32(blob, node, "vsync-active", data->vsync_active); + fdt_fixup_setprop_u32(blob, node, "de-active", data->de_active); + fdt_fixup_setprop_u32(blob, node, "pixelclk-active", data->pixelclk_active); +} + +static void fdt_fixup_panel_node(void *blob, int node, const char *name, + const struct display_fixup_data *data) +{ + if (!strcmp(name, "dsi")) { + fdt_setprop_u32(blob, node, "dsi,flags", data->flags); + fdt_setprop_u32(blob, node, "dsi,format", data->format); + fdt_setprop_u32(blob, node, "dsi,lanes", data->lanes); + fdt_fixup_panel_init_sequence(blob, node,data); + } + fdt_fixup_setprop_u32(blob, node, "prepare-delay-ms", data->delay_prepare); + fdt_fixup_setprop_u32(blob, node, "enable-delay-ms", data->delay_enable); + fdt_fixup_setprop_u32(blob, node, "disable-delay-ms", data->delay_disable); + fdt_fixup_setprop_u32(blob, node, "unprepare-delay-ms", data->delay_unprepare); + fdt_fixup_setprop_u32(blob, node, "reset-delay-ms", data->delay_reset); + fdt_fixup_setprop_u32(blob, node, "init-delay-ms", data->delay_init); + fdt_fixup_setprop_u32(blob, node, "width-mm", data->size_width); + fdt_fixup_setprop_u32(blob, node, "height-mm", data->size_height); + +} +static void fdt_fixup_nodka_lvds(void *blob, int node, + const struct display_fixup_data *data) +{ + if ( data->nodka_lvds != 0 ) + fdt_fixup_setprop_u32(blob, node, "nodka-lvds", data->nodka_lvds); +} + + +static int fdt_fixup_display_sub_route(void *blob, const char *name, + enum fdt_status status, + const struct display_fixup_data *data) +{ + int route, phandle, connect, connector, panel, dt, timing, route_lvds; + char path[64]; + char path_lvds[16] = "/panel"; + int ret; + sprintf(path, "/display-subsystem/route/route-%s", name); + + + route = fdt_path_offset(blob, path); + printf("route : %d \n",route); + if (route < 0) + return route; + + route_lvds = fdt_path_offset(blob, path_lvds); + if (route_lvds < 0) + { + printf("can not get route_lvds = %d\n",route_lvds); + return route_lvds; + } + /* fixup lvds gpio channel*/ + fdt_fixup_nodka_lvds(blob, route_lvds, data); + + /* fixup route status */ + ret = fdt_fixup_node_status(blob, route, status); + if (ret < 0) + return ret; + phandle = fdt_getprop_u32_default_node(blob, route, 0, "connect", -1); + if (phandle < 0) + return phandle; + connect = fdt_node_offset_by_phandle(blob, phandle); + if (connect < 0) + return connect; + connector = find_connector_node(blob, connect); + if (connector < 0) + return connector; + /* fixup connector status */ + ret = fdt_fixup_node_status(blob, connector, status); + if (ret < 0) + return ret; + if (status != FDT_STATUS_OKAY) { + return 0; + } + panel = get_panel_node(blob, connector); + if (panel < 0) + return panel; + /* fixup panel info */ + fdt_fixup_panel_node(blob, panel, name, data); + dt = fdt_subnode_offset(blob, panel, "display-timings"); + if (dt < 0) { + return dt; + } + timing = fdt_subnode_offset(blob, dt, "timing"); + if (timing < 0) { + phandle = fdt_getprop_u32_default_node(blob, dt, 0, "native-mode", -1); + if (phandle < 0) + return phandle; + + timing = fdt_node_offset_by_phandle(blob, phandle); + if (timing < 0) + return timing; + } + + /* fixup panel display timing */ + fdt_fixup_display_timing(blob, timing, data); + return 0; +} + +static void fdt_fixup_display_route(void *blob, const struct display_fixup_data *data) +{ + if (data->type == PANEL_TYPE_DSI) { + fdt_fixup_display_sub_route(blob, "dsi", FDT_STATUS_OKAY, data); + fdt_fixup_display_sub_route(blob, "edp", FDT_STATUS_DISABLED, data); + fdt_fixup_display_sub_route(blob, "lvds", FDT_STATUS_DISABLED, data); + } else if (data->type == PANEL_TYPE_EDP) { + fdt_fixup_display_sub_route(blob, "dsi", FDT_STATUS_DISABLED, data); + fdt_fixup_display_sub_route(blob, "edp", FDT_STATUS_OKAY, data); + fdt_fixup_display_sub_route(blob, "lvds", FDT_STATUS_DISABLED, data); + } else if (data->type == PANEL_TYPE_LVDS) { + fdt_fixup_display_sub_route(blob, "lvds", FDT_STATUS_OKAY, data); + fdt_fixup_display_sub_route(blob, "dsi", FDT_STATUS_DISABLED, data); + fdt_fixup_display_sub_route(blob, "edp", FDT_STATUS_DISABLED, data); + } +} + + + + + + + + + #ifdef CONFIG_USING_KERNEL_DTB_V2 static int dm_rm_kernel_dev(void) { @@ -301,6 +795,7 @@ #endif ulong fdt_addr = 0; int ret = -ENODEV; + struct display_fixup_data fix_data; printf("DM: v%d\n", IS_ENABLED(CONFIG_USING_KERNEL_DTB_V2) ? 2 : 1); @@ -372,6 +867,8 @@ phandles_fixup_cru((void *)gd->fdt_blob); phandles_fixup_gpio((void *)gd->fdt_blob, (void *)ufdt_blob); #endif + if (!get_lcdparam_info_from_custom_partition(&fix_data)) + fdt_fixup_display_route((void *)fdt_addr, &fix_data); gd->flags |= GD_FLG_KDTB_READY; gd->of_root_f = gd->of_root; diff --git a/u-boot/drivers/video/drm/rockchip_panel.c b/u-boot/drivers/video/drm/rockchip_panel.c old mode 100644 new mode 100755 index de7e5e2..652e748 --- a/u-boot/drivers/video/drm/rockchip_panel.c +++ b/u-boot/drivers/video/drm/rockchip_panel.c @@ -45,6 +45,7 @@ bool power_invert; u32 bus_format; unsigned int bpc; + unsigned int lvds_index; struct { unsigned int prepare; @@ -66,6 +67,13 @@ struct udevice *backlight; struct gpio_desc enable_gpio; struct gpio_desc reset_gpio; + struct gpio_desc edp_bl_on; + struct gpio_desc edp_bl_en; + + struct gpio_desc lvds_gpio0; + struct gpio_desc lvds_gpio1; + struct gpio_desc lvds_gpio2; + struct gpio_desc lvds_gpio3; int cmd_type; struct gpio_desc spi_sdi_gpio; @@ -275,24 +283,58 @@ if (priv->prepared) return; + + /*7511 LVDS IO Control start*/ + printk("nodka_lvds_index = %d\n",plat->lvds_index); + + ret = plat->lvds_index & 1; + if (dm_gpio_is_valid(&priv->lvds_gpio0)) + dm_gpio_set_value(&priv->lvds_gpio0, ret); + ret = dm_gpio_get_value(&priv->lvds_gpio0); + printf("lvds_gpio0 : %d\n",ret); + + ret = plat->lvds_index >> 1 & 1; + if (dm_gpio_is_valid(&priv->lvds_gpio1)) + dm_gpio_set_value(&priv->lvds_gpio1, ret); + ret = dm_gpio_get_value(&priv->lvds_gpio1); + printf("lvds_gpio1 : %d\n",ret); + + ret = plat->lvds_index >> 2 & 1; + if (dm_gpio_is_valid(&priv->lvds_gpio2)) + dm_gpio_set_value(&priv->lvds_gpio2, ret); + ret = dm_gpio_get_value(&priv->lvds_gpio2); + printf("lvds_gpio2 : %d\n",ret); + + ret = plat->lvds_index >> 3 & 1; + if (dm_gpio_is_valid(&priv->lvds_gpio3)) + dm_gpio_set_value(&priv->lvds_gpio3, ret); + ret = dm_gpio_get_value(&priv->lvds_gpio3); + printf("lvds_gpio3 : %d\n",ret); + mdelay(100); +/*7511 LVDS IO Control end*/ if (priv->power_supply) regulator_set_enable(priv->power_supply, !plat->power_invert); - + + if (dm_gpio_is_valid(&priv->edp_bl_on)) + dm_gpio_set_value(&priv->edp_bl_on, 1); + + if (dm_gpio_is_valid(&priv->edp_bl_en)) + dm_gpio_set_value(&priv->edp_bl_en, 1); + if (dm_gpio_is_valid(&priv->enable_gpio)) dm_gpio_set_value(&priv->enable_gpio, 1); - + if (plat->delay.prepare) mdelay(plat->delay.prepare); - + if (dm_gpio_is_valid(&priv->reset_gpio)) dm_gpio_set_value(&priv->reset_gpio, 1); - - if (plat->delay.reset) - mdelay(plat->delay.reset); - + mdelay(50); if (dm_gpio_is_valid(&priv->reset_gpio)) dm_gpio_set_value(&priv->reset_gpio, 0); + + mdelay(200); if (plat->delay.init) mdelay(plat->delay.init); @@ -407,6 +449,7 @@ plat->delay.disable = dev_read_u32_default(dev, "disable-delay-ms", 0); plat->delay.init = dev_read_u32_default(dev, "init-delay-ms", 0); plat->delay.reset = dev_read_u32_default(dev, "reset-delay-ms", 0); + plat->lvds_index = dev_read_u32_default(dev, "nodka-lvds", 0); plat->bus_format = dev_read_u32_default(dev, "bus-format", MEDIA_BUS_FMT_RBG888_1X24); @@ -457,6 +500,20 @@ int ret; const char *cmd_type; + ret = gpio_request_by_name(dev, "edp-bl-gpios", 0, + &priv->edp_bl_on, GPIOD_IS_OUT); + if (ret && ret != -ENOENT) { + printf("%s: Cannot get enable GPIO: %d\n", __func__, ret); + return ret; + } + + ret = gpio_request_by_name(dev, "edp-bl-en", 0, + &priv->edp_bl_en, GPIOD_IS_OUT); + if (ret && ret != -ENOENT) { + printf("%s: Cannot get enable GPIO: %d\n", __func__, ret); + return ret; + } + ret = gpio_request_by_name(dev, "enable-gpios", 0, &priv->enable_gpio, GPIOD_IS_OUT); if (ret && ret != -ENOENT) { @@ -471,6 +528,34 @@ return ret; } + ret = gpio_request_by_name(dev, "lvds-gpio0", 0, + &priv->lvds_gpio0, GPIOD_IS_OUT); + if (ret && ret != -ENOENT) { + printf("%s: Cannot get lvds-gpio0: %d\n", __func__, ret); + return ret; + } + + ret = gpio_request_by_name(dev, "lvds-gpio1", 0, + &priv->lvds_gpio1, GPIOD_IS_OUT); + if (ret && ret != -ENOENT) { + printf("%s: Cannot get lvds-gpio1: %d\n", __func__, ret); + return ret; + } + + ret = gpio_request_by_name(dev, "lvds-gpio2", 0, + &priv->lvds_gpio2, GPIOD_IS_OUT); + if (ret && ret != -ENOENT) { + printf("%s: Cannot get lvds-gpio2: %d\n", __func__, ret); + return ret; + } + + ret = gpio_request_by_name(dev, "lvds-gpio3", 0, + &priv->lvds_gpio3, GPIOD_IS_OUT); + if (ret && ret != -ENOENT) { + printf("%s: Cannot get lvds-gpio3: %d\n", __func__, ret); + return ret; + } + ret = uclass_get_device_by_phandle(UCLASS_PANEL_BACKLIGHT, dev, "backlight", &priv->backlight); if (ret && ret != -ENOENT) { -- Gitblit v1.6.2