Linux Audio

Check our new training course

Loading...
  1/* SPDX-License-Identifier: MIT */
  2#ifndef __NVIF_OUTP_H__
  3#define __NVIF_OUTP_H__
  4#include <nvif/object.h>
  5#include <nvif/if0012.h>
  6#include <drm/display/drm_dp.h>
  7struct nvif_disp;
  8
  9struct nvif_outp {
 10	struct nvif_object object;
 11	u32 id;
 12
 13	struct {
 14		enum {
 15			NVIF_OUTP_DAC,
 16			NVIF_OUTP_SOR,
 17			NVIF_OUTP_PIOR,
 18		} type;
 19
 20		enum {
 21			NVIF_OUTP_RGB_CRT,
 22			NVIF_OUTP_TMDS,
 23			NVIF_OUTP_LVDS,
 24			NVIF_OUTP_DP,
 25		} proto;
 26
 27		u8 heads;
 28#define NVIF_OUTP_DDC_INVALID 0xff
 29		u8 ddc;
 30		u8 conn;
 31
 32		union {
 33			struct {
 34				u32 freq_max;
 35			} rgb_crt;
 36			struct {
 37				bool dual;
 38			} tmds;
 39			struct {
 40				bool acpi_edid;
 41			} lvds;
 42			struct {
 43				u8   aux;
 44				bool mst;
 45				bool increased_wm;
 46				u8   link_nr;
 47				u32  link_bw;
 48			} dp;
 49		};
 50	} info;
 51
 52	struct {
 53		int id;
 54		int link;
 55	} or;
 56};
 57
 58int nvif_outp_ctor(struct nvif_disp *, const char *name, int id, struct nvif_outp *);
 59void nvif_outp_dtor(struct nvif_outp *);
 60
 61enum nvif_outp_detect_status {
 62	NOT_PRESENT,
 63	PRESENT,
 64	UNKNOWN,
 65};
 66
 67enum nvif_outp_detect_status nvif_outp_detect(struct nvif_outp *);
 68int nvif_outp_edid_get(struct nvif_outp *, u8 **pedid);
 69
 70int nvif_outp_load_detect(struct nvif_outp *, u32 loadval);
 71int nvif_outp_acquire_dac(struct nvif_outp *);
 72int nvif_outp_acquire_sor(struct nvif_outp *, bool hda);
 73int nvif_outp_acquire_pior(struct nvif_outp *);
 74int nvif_outp_inherit_rgb_crt(struct nvif_outp *outp, u8 *proto_out);
 75int nvif_outp_inherit_lvds(struct nvif_outp *outp, u8 *proto_out);
 76int nvif_outp_inherit_tmds(struct nvif_outp *outp, u8 *proto_out);
 77int nvif_outp_inherit_dp(struct nvif_outp *outp, u8 *proto_out);
 78
 79void nvif_outp_release(struct nvif_outp *);
 80
 81static inline bool
 82nvif_outp_acquired(struct nvif_outp *outp)
 83{
 84	return outp->or.id >= 0;
 85}
 86
 87int nvif_outp_bl_get(struct nvif_outp *);
 88int nvif_outp_bl_set(struct nvif_outp *, int level);
 89
 90int nvif_outp_lvds(struct nvif_outp *, bool dual, bool bpc8);
 91
 92int nvif_outp_hdmi(struct nvif_outp *, int head, bool enable, u8 max_ac_packet, u8 rekey, u32 khz,
 93		   bool scdc, bool scdc_scrambling, bool scdc_low_rates);
 94
 95int nvif_outp_infoframe(struct nvif_outp *, u8 type, struct nvif_outp_infoframe_v0 *, u32 size);
 96int nvif_outp_hda_eld(struct nvif_outp *, int head, void *data, u32 size);
 97
 98int nvif_outp_dp_aux_pwr(struct nvif_outp *, bool enable);
 99int nvif_outp_dp_aux_xfer(struct nvif_outp *, u8 type, u8 *size, u32 addr, u8 *data);
100
101struct nvif_outp_dp_rate {
102	int dpcd; /* -1 for non-indexed rates */
103	u32 rate;
104};
105
106int nvif_outp_dp_rates(struct nvif_outp *, struct nvif_outp_dp_rate *rate, int rate_nr);
107int nvif_outp_dp_train(struct nvif_outp *, u8 dpcd[DP_RECEIVER_CAP_SIZE],
108		       u8 lttprs, u8 link_nr, u32 link_bw, bool mst, bool post_lt_adj,
109		       bool retrain);
110int nvif_outp_dp_drive(struct nvif_outp *, u8 link_nr, u8 pe[4], u8 vs[4]);
111int nvif_outp_dp_sst(struct nvif_outp *, int head, u32 watermark, u32 hblanksym, u32 vblanksym);
112int nvif_outp_dp_mst_id_get(struct nvif_outp *, u32 *id);
113int nvif_outp_dp_mst_id_put(struct nvif_outp *, u32 id);
114int nvif_outp_dp_mst_vcpi(struct nvif_outp *, int head,
115			  u8 start_slot, u8 num_slots, u16 pbn, u16 aligned_pbn);
116#endif