Message ID | 8c6b6403932536b6849e0b44e1ee6e7ebdbe4a69.1692884619.git.jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm, cec and edid updates | expand |
On 24/08/2023 15:46, Jani Nikula wrote: > CEC needs the source physical address. Parsing it is trivial with the > existing EDID CEA DB infrastructure. > > Default to CEC_PHYS_ADDR_INVALID (0xffff) instead of 0 to cater for > easier CEC usage. > > Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl> > Cc: linux-media@vger.kernel.org > Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Regards, Hans > --- > drivers/gpu/drm/drm_edid.c | 5 +++++ > include/drm/drm_connector.h | 8 ++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > index 1dbb15439468..39dd3f694544 100644 > --- a/drivers/gpu/drm/drm_edid.c > +++ b/drivers/gpu/drm/drm_edid.c > @@ -29,6 +29,7 @@ > */ > > #include <linux/bitfield.h> > +#include <linux/cec.h> > #include <linux/hdmi.h> > #include <linux/i2c.h> > #include <linux/kernel.h> > @@ -6192,6 +6193,8 @@ drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db) > > info->is_hdmi = true; > > + info->source_physical_address = (db[4] << 8) | db[5]; > + > if (len >= 6) > info->dvi_dual = db[6] & 1; > if (len >= 7) > @@ -6470,6 +6473,8 @@ static void drm_reset_display_info(struct drm_connector *connector) > info->vics_len = 0; > > info->quirks = 0; > + > + info->source_physical_address = CEC_PHYS_ADDR_INVALID; > } > > static void update_displayid_info(struct drm_connector *connector, > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index d300fde6c1a4..40a5e7acf2fa 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -816,6 +816,14 @@ struct drm_display_info { > * @quirks: EDID based quirks. Internal to EDID parsing. > */ > u32 quirks; > + > + /** > + * @source_physical_address: Source Physical Address from HDMI > + * Vendor-Specific Data Block, for CEC usage. > + * > + * Defaults to CEC_PHYS_ADDR_INVALID (0xffff). > + */ > + u16 source_physical_address; > }; > > int drm_display_info_set_bus_formats(struct drm_display_info *info,
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 1dbb15439468..39dd3f694544 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -29,6 +29,7 @@ */ #include <linux/bitfield.h> +#include <linux/cec.h> #include <linux/hdmi.h> #include <linux/i2c.h> #include <linux/kernel.h> @@ -6192,6 +6193,8 @@ drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db) info->is_hdmi = true; + info->source_physical_address = (db[4] << 8) | db[5]; + if (len >= 6) info->dvi_dual = db[6] & 1; if (len >= 7) @@ -6470,6 +6473,8 @@ static void drm_reset_display_info(struct drm_connector *connector) info->vics_len = 0; info->quirks = 0; + + info->source_physical_address = CEC_PHYS_ADDR_INVALID; } static void update_displayid_info(struct drm_connector *connector, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index d300fde6c1a4..40a5e7acf2fa 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -816,6 +816,14 @@ struct drm_display_info { * @quirks: EDID based quirks. Internal to EDID parsing. */ u32 quirks; + + /** + * @source_physical_address: Source Physical Address from HDMI + * Vendor-Specific Data Block, for CEC usage. + * + * Defaults to CEC_PHYS_ADDR_INVALID (0xffff). + */ + u16 source_physical_address; }; int drm_display_info_set_bus_formats(struct drm_display_info *info,
CEC needs the source physical address. Parsing it is trivial with the existing EDID CEA DB infrastructure. Default to CEC_PHYS_ADDR_INVALID (0xffff) instead of 0 to cater for easier CEC usage. Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl> Cc: linux-media@vger.kernel.org Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- drivers/gpu/drm/drm_edid.c | 5 +++++ include/drm/drm_connector.h | 8 ++++++++ 2 files changed, 13 insertions(+)