瑞芯微Rockchip开发者社区
直播中

乐骞添

7年用户 1011经验值
私信 关注
[问答]

请教大神怎样去实现一种rk808+edp的设计呢

请教大神怎样去实现一种rk808+edp的设计呢?有哪些设计步骤?

回帖(1)

卞晓俊

2022-3-10 15:25:40
  平台:Rockchip
  处理器:rk3288
  Android版本:Android 7.1.2
  内核版本:Linux 4.4.71
  第一步:将最接近的dts拷贝一份并重新命名。
  rk3288kernelarcharmbootdtsrk3288-evb-android-rk818-edp.dts
  拷贝一份并命名如下:
  rk3288kernelarcharmbootdts
  rk3288-evb-android-rk808-edp.dts
  第二步:修改对应的PMU,根据第一步拷贝而来的PMU是RK818,我们平板所用的PMU是RK808
  所以做以下的几个修改:
  //compatible = “rockchip,rk3288-evb-android-rk818”, “rockchip,rk3288”;
  compatible = “rockchip,rk3288-evb-android-rk808”, “rockchip,rk3288”;
  sdio_pwrseq: sdio-pwrseq {
  compatible = “mmc-pwrseq-simple”;
  //clocks = 《&rk818 1》;
  clocks = 《&rk808 1》;//rk818 1》;
  wireless-bluetooth {
  //clocks = 《&rk818 1》;
  clocks = 《&rk808 1》;//rk818 1》;
  clock-names = “ext_clock”;
  };
  &i2c0 {
  clock-frequency = 《400000》;
  //rk818: pmic@1c {
  rk808: pmic@1b {
  }
  第三步:注意保留
  vcc_lcd 即可,注意pmu里面也有一个vcc_lcd相关的应该舍去
  :
  vcc_lcd: vcc-lcd {
  compatible = “regulator-fixed”;
  regulator-boot-on;
  enable-active-high;
  gpio = 《&gpio7 3 GPIO_ACTIVE_HIGH》;
  pinctrl-names = “default”;
  pinctrl-0 = 《&lcd_en》;
  regulator-name = “vcc_lcd”;
  vin-supply = 《&vcc_io》;
  };
  至此,pmic相关的就已经配置好了。
  我们再来根据edp相关的配置点亮屏幕。
  检查下dts以下四个与edp相关的选择是否正确,如下:
  &edp {
  status = “okay”;
  };
  &edp_panel {
  , “simple-panel”;
  enable-gpios = 《&gpio7 4 GPIO_ACTIVE_HIGH》;
  pinctrl-0 = 《&lcd_cs》;
  power-supply = 《&vcc_lcd》;
  delay,prepare = 《120》;
  status = “okay”;
  disp_timings: display-timings {
  native-mode = 《&timing0》;
  timing0: timing0 {
  clock-frequency = 《200000000》;
  hactive = 《1536》;
  vactive = 《2048》;
  hfront-porch = 《12》;
  hsync-len = 《16》;
  hback-porch = 《48》;
  vfront-porch = 《8》;
  vsync-len = 《4》;
  vback-porch = 《8》;
  hsync-active = 《0》;
  vsync-active = 《0》;
  de-active = 《0》;
  pixelclk-active = 《0》;
  };
  };
  &edp_phy {
  status = “okay”;
  };
  &route_edp {
  status = “okay”;
  };
  在Android5.1的SDK里面,Rockchip是这样用一个dtsi包裹起来的参数:
  / {
  disp_timings: display-timings {
  native-mode = 《&timing0》;
  timing0: timing0 {
  screen-type = 《SCREEN_EDP》;
  out-face = 《OUT_P666》;
  clock-frequency = 《205000000》;
  hactive = 《1536》;
  vactive = 《2048》;
  hback-porch = 《5》;
  hfront-porch = 《150》;
  vback-porch = 《9》;
  vfront-porch = 《3》;
  hsync-len = 《5》;
  vsync-len = 《1》;
  hsync-active = 《0》;
  vsync-active = 《0》;
  de-active = 《0》;
  pixelclk-active = 《1》;
  swap-rb = 《0》;
  swap-rg = 《0》;
  swap-gb = 《0》;
  };
  };
  };
  如今应该在驱动文件:rk3288kerneldriversgpudrmpanelpanel-simple.c
  static const struct of_device_id platform_of_match[] =
  {
  {
  .compatible = “simple-panel”,
  .data = NULL,
  }, {
  }, {
  .compatible = “lg,lp079qx1-sp0v”,
  .data = &lg_lp079qx1_sp0v,
  },
  }
  对应的dts里面的兼容:
  , “simple-panel”;
  static const struct drm_display_mode lg_lp079qx1_sp0v_mode = {
  // .clock = 200000,
  // .hdisplay = 1536,
  // .hsync_start = 1536 + 12,
  // .hsync_end = 1536 + 12 + 16,
  // .htotal = 1536 + 12 + 16 + 48,
  // .vdisplay = 2048,
  // .vsync_start = 2048 + 8,
  // .vsync_end = 2048 + 8 + 4,
  // .vtotal = 2048 + 8 + 4 + 8,
  // .vrefresh = 60,
  .clock = 205000,
  .hdisplay = 1536,
  .hsync_start = 1536 + 150,
  .hsync_end = 1536 + 150 + 5,
  .htotal = 1536 + 150 + 5 + 5,
  .vdisplay = 2048,
  .vsync_start = 2048 + 3,
  .vsync_end = 2048 + 3 + 9,
  .vtotal = 2048 + 3 + 9 + 1,
  .vrefresh = 60,
  .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
  };
  static const struct panel_desc lg_lp079qx1_sp0v = {
  .modes = &lg_lp079qx1_sp0v_mode,
  .num_modes = 1,
  .size = {
  .width = 129,
  .height = 171,
  },
  .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
  };
举报

更多回帖

发帖
×
20
完善资料,
赚取积分