Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d17c5443 authored by Shobhit Kumar's avatar Shobhit Kumar Committed by Daniel Vetter
Browse files

drm/i915: Parse the MIPI related VBT Block and store relevant info



Initial parsing of the VBT MIPI block. For now, just store the panel id
if found.

Note: Again there seems to be no documentation for this piece of lore.
The doc situation for byt+ is just a bad joke :(

Signed-off-by: default avatarShobhit Kumar <shobhit.kumar@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 4ce8c9a7
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -1065,6 +1065,11 @@ struct intel_vbt_data {
	int edp_bpp;
	int edp_bpp;
	struct edp_power_seq edp_pps;
	struct edp_power_seq edp_pps;


	/* MIPI DSI */
	struct {
		u16 panel_id;
	} dsi;

	int crt_ddc_pin;
	int crt_ddc_pin;


	int child_dev_num;
	int child_dev_num;
+16 −0
Original line number Original line Diff line number Diff line
@@ -568,6 +568,21 @@ parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb)
	}
	}
}
}


static void
parse_mipi(struct drm_i915_private *dev_priv, struct bdb_header *bdb)
{
	struct bdb_mipi *mipi;

	mipi = find_section(bdb, BDB_MIPI);
	if (!mipi) {
		DRM_DEBUG_KMS("No MIPI BDB found");
		return;
	}

	/* XXX: add more info */
	dev_priv->vbt.dsi.panel_id = mipi->panel_id;
}

static void
static void
parse_device_mapping(struct drm_i915_private *dev_priv,
parse_device_mapping(struct drm_i915_private *dev_priv,
		       struct bdb_header *bdb)
		       struct bdb_header *bdb)
@@ -745,6 +760,7 @@ intel_parse_bios(struct drm_device *dev)
	parse_device_mapping(dev_priv, bdb);
	parse_device_mapping(dev_priv, bdb);
	parse_driver_features(dev_priv, bdb);
	parse_driver_features(dev_priv, bdb);
	parse_edp(dev_priv, bdb);
	parse_edp(dev_priv, bdb);
	parse_mipi(dev_priv, bdb);


	if (bios)
	if (bios)
		pci_unmap_rom(pdev, bios);
		pci_unmap_rom(pdev, bios);
+41 −0
Original line number Original line Diff line number Diff line
@@ -104,6 +104,7 @@ struct vbios_data {
#define BDB_LVDS_LFP_DATA	 42
#define BDB_LVDS_LFP_DATA	 42
#define BDB_LVDS_BACKLIGHT	 43
#define BDB_LVDS_BACKLIGHT	 43
#define BDB_LVDS_POWER		 44
#define BDB_LVDS_POWER		 44
#define BDB_MIPI		 50
#define BDB_SKIP		254 /* VBIOS private block, ignore */
#define BDB_SKIP		254 /* VBIOS private block, ignore */


struct bdb_general_features {
struct bdb_general_features {
@@ -618,4 +619,44 @@ int intel_parse_bios(struct drm_device *dev);
#define		PORT_IDPC	8
#define		PORT_IDPC	8
#define		PORT_IDPD	9
#define		PORT_IDPD	9


/* MIPI DSI panel info */
struct bdb_mipi {
	u16 panel_id;
	u16 bridge_revision;

	/* General params */
	u32 dithering:1;
	u32 bpp_pixel_format:1;
	u32 rsvd1:1;
	u32 dphy_valid:1;
	u32 resvd2:28;

	u16 port_info;
	u16 rsvd3:2;
	u16 num_lanes:2;
	u16 rsvd4:12;

	/* DSI config */
	u16 virt_ch_num:2;
	u16 vtm:2;
	u16 rsvd5:12;

	u32 dsi_clock;
	u32 bridge_ref_clk;
	u16 rsvd_pwr;

	/* Dphy Params */
	u32 prepare_cnt:5;
	u32 rsvd6:3;
	u32 clk_zero_cnt:8;
	u32 trail_cnt:5;
	u32 rsvd7:3;
	u32 exit_zero_cnt:6;
	u32 rsvd8:2;

	u32 hl_switch_cnt;
	u32 lp_byte_clk;
	u32 clk_lane_switch_cnt;
} __attribute__((packed));

#endif /* _I830_BIOS_H_ */
#endif /* _I830_BIOS_H_ */