drivers/gpu/drm/nouveau/include/dispnv04/i2c/encoder_i2c.h

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/nouveau/include/dispnv04/i2c/encoder_i2c.h

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/include/dispnv04/i2c/encoder_i2c.h
Extension
.h
Size
7521 bytes
Lines
238
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct nouveau_i2c_encoder_funcs {
	/**
	 * @set_config: Initialize any encoder-specific modesetting parameters.
	 * The meaning of the @params parameter is implementation dependent. It
	 * will usually be a structure with DVO port data format settings or
	 * timings. It's not required for the new parameters to take effect
	 * until the next mode is set.
	 */
	void (*set_config)(struct drm_encoder *encoder,
			   void *params);

	/**
	 * @destroy: Analogous to &drm_encoder_funcs @destroy callback.
	 */
	void (*destroy)(struct drm_encoder *encoder);

	/**
	 * @dpms: Analogous to &drm_encoder_helper_funcs @dpms callback.
	 */
	void (*dpms)(struct drm_encoder *encoder, int mode);

	/**
	 * @save: Save state. Wrapped by nouveau_i2c_encoder_save().
	 */
	void (*save)(struct drm_encoder *encoder);

	/**
	 * @restore: Restore state. Wrapped by nouveau_i2c_encoder_restore().
	 */
	void (*restore)(struct drm_encoder *encoder);

	/**
	 * @mode_fixup: Analogous to &drm_encoder_helper_funcs @mode_fixup
	 * callback. Wrapped by nouveau_i2c_encoder_mode_fixup().
	 */
	bool (*mode_fixup)(struct drm_encoder *encoder,
			   const struct drm_display_mode *mode,
			   struct drm_display_mode *adjusted_mode);

	/**
	 * @mode_valid: Analogous to &drm_encoder_helper_funcs @mode_valid.
	 */
	int (*mode_valid)(struct drm_encoder *encoder,
			  const struct drm_display_mode *mode);
	/**
	 * @mode_set: Analogous to &drm_encoder_helper_funcs @mode_set
	 * callback.
	 */
	void (*mode_set)(struct drm_encoder *encoder,
			 struct drm_display_mode *mode,
			 struct drm_display_mode *adjusted_mode);

	/**
	 * @detect: Analogous to &drm_encoder_helper_funcs @detect
	 * callback. Wrapped by nouveau_i2c_encoder_detect().
	 */
	enum drm_connector_status (*detect)(struct drm_encoder *encoder,
					    struct drm_connector *connector);
	/**
	 * @get_modes: Get modes.
	 */
	int (*get_modes)(struct drm_encoder *encoder,
			 struct drm_connector *connector);
	/**
	 * @create_resources: Create resources.
	 */
	int (*create_resources)(struct drm_encoder *encoder,
				 struct drm_connector *connector);
	/**
	 * @set_property: Set property.
	 */
	int (*set_property)(struct drm_encoder *encoder,
			    struct drm_connector *connector,
			    struct drm_property *property,
			    uint64_t val);
};

/**
 * struct nouveau_i2c_encoder - I2C encoder struct
 *
 * A &nouveau_i2c_encoder has two sets of callbacks, @encoder_i2c_funcs and the
 * ones in @base. The former are never actually called by the common
 * CRTC code, it's just a convenience for splitting the encoder
 * functions in an upper, GPU-specific layer and a (hopefully)
 * GPU-agnostic lower layer: It's the GPU driver responsibility to
 * call the nouveau_i2c_encoder methods when appropriate.
 *
 * nouveau_i2c_encoder_init() provides a way to get an implementation of
 * this.
 */

Annotation

Implementation Notes