#include "drm/drm_modeset_lock.h"
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/string_helpers.h>
#include <drm/drm_atomic.h>
#include <drm/drm_client.h>
#include <drm/drm_connector.h>
#include <drm/drm_crtc.h>
#include <drm/drm_device.h>
#include <drm/drm_drv.h>
#include <drm/drm_edid.h>
#include <drm/drm_encoder.h>
#include <drm/drm_print.h>
#include "drm_crtc_internal.h"
#include "drm_internal.h"
#define DRM_CLIENT_MAX_CLONED_CONNECTORS …
struct drm_client_offset { … };
int drm_client_modeset_create(struct drm_client_dev *client)
{ … }
static void drm_client_modeset_release(struct drm_client_dev *client)
{ … }
void drm_client_modeset_free(struct drm_client_dev *client)
{ … }
static struct drm_mode_set *
drm_client_find_modeset(struct drm_client_dev *client, struct drm_crtc *crtc)
{ … }
static struct drm_display_mode *
drm_connector_get_tiled_mode(struct drm_connector *connector)
{ … }
static struct drm_display_mode *
drm_connector_fallback_non_tiled_mode(struct drm_connector *connector)
{ … }
static struct drm_display_mode *
drm_connector_has_preferred_mode(struct drm_connector *connector, int width, int height)
{ … }
static struct drm_display_mode *drm_connector_pick_cmdline_mode(struct drm_connector *connector)
{ … }
static bool drm_connector_enabled(struct drm_connector *connector, bool strict)
{ … }
static void drm_client_connectors_enabled(struct drm_connector **connectors,
unsigned int connector_count,
bool *enabled)
{ … }
static bool drm_client_target_cloned(struct drm_device *dev,
struct drm_connector **connectors,
unsigned int connector_count,
struct drm_display_mode **modes,
struct drm_client_offset *offsets,
bool *enabled, int width, int height)
{ … }
static int drm_client_get_tile_offsets(struct drm_device *dev,
struct drm_connector **connectors,
unsigned int connector_count,
struct drm_display_mode **modes,
struct drm_client_offset *offsets,
int idx,
int h_idx, int v_idx)
{ … }
static bool drm_client_target_preferred(struct drm_device *dev,
struct drm_connector **connectors,
unsigned int connector_count,
struct drm_display_mode **modes,
struct drm_client_offset *offsets,
bool *enabled, int width, int height)
{ … }
static bool connector_has_possible_crtc(struct drm_connector *connector,
struct drm_crtc *crtc)
{ … }
static int drm_client_pick_crtcs(struct drm_client_dev *client,
struct drm_connector **connectors,
unsigned int connector_count,
struct drm_crtc **best_crtcs,
struct drm_display_mode **modes,
int n, int width, int height)
{ … }
static bool drm_client_firmware_config(struct drm_client_dev *client,
struct drm_connector **connectors,
unsigned int connector_count,
struct drm_crtc **crtcs,
struct drm_display_mode **modes,
struct drm_client_offset *offsets,
bool *enabled, int width, int height)
{ … }
int drm_client_modeset_probe(struct drm_client_dev *client, unsigned int width, unsigned int height)
{ … }
EXPORT_SYMBOL(…);
bool drm_client_rotation(struct drm_mode_set *modeset, unsigned int *rotation)
{ … }
EXPORT_SYMBOL(…);
static int drm_client_modeset_commit_atomic(struct drm_client_dev *client, bool active, bool check)
{ … }
static int drm_client_modeset_commit_legacy(struct drm_client_dev *client)
{ … }
int drm_client_modeset_check(struct drm_client_dev *client)
{ … }
EXPORT_SYMBOL(…);
int drm_client_modeset_commit_locked(struct drm_client_dev *client)
{ … }
EXPORT_SYMBOL(…);
int drm_client_modeset_commit(struct drm_client_dev *client)
{ … }
EXPORT_SYMBOL(…);
static void drm_client_modeset_dpms_legacy(struct drm_client_dev *client, int dpms_mode)
{ … }
int drm_client_modeset_dpms(struct drm_client_dev *client, int mode)
{ … }
EXPORT_SYMBOL(…);
#ifdef CONFIG_DRM_KUNIT_TEST
#include "tests/drm_client_modeset_test.c"
#endif