linux/drivers/gpu/drm/radeon/atombios_encoders.c

/*
 * Copyright 2007-11 Advanced Micro Devices, Inc.
 * Copyright 2008 Red Hat Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * Authors: Dave Airlie
 *          Alex Deucher
 */

#include <linux/backlight.h>
#include <linux/dmi.h>
#include <linux/pci.h>

#include <drm/drm_crtc_helper.h>
#include <drm/drm_edid.h>
#include <drm/drm_file.h>
#include <drm/drm_modeset_helper_vtables.h>
#include <drm/radeon_drm.h>

#include <acpi/video.h>

#include "atom.h"
#include "radeon_atombios.h"
#include "radeon.h"
#include "radeon_asic.h"
#include "radeon_audio.h"

extern int atom_debug;

static u8
radeon_atom_get_backlight_level_from_reg(struct radeon_device *rdev)
{}

static void
radeon_atom_set_backlight_level_to_reg(struct radeon_device *rdev,
				       u8 backlight_level)
{}

u8
atombios_get_backlight_level(struct radeon_encoder *radeon_encoder)
{}

void
atombios_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level)
{}

static u8 radeon_atom_bl_level(struct backlight_device *bd)
{}

static int radeon_atom_backlight_update_status(struct backlight_device *bd)
{}

static int radeon_atom_backlight_get_brightness(struct backlight_device *bd)
{}

static const struct backlight_ops radeon_atom_backlight_ops =;

void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder,
				struct drm_connector *drm_connector)
{}

static void radeon_atom_backlight_exit(struct radeon_encoder *radeon_encoder)
{}

static bool radeon_atom_mode_fixup(struct drm_encoder *encoder,
				   const struct drm_display_mode *mode,
				   struct drm_display_mode *adjusted_mode)
{}

static void
atombios_dac_setup(struct drm_encoder *encoder, int action)
{}

static void
atombios_tv_setup(struct drm_encoder *encoder, int action)
{}

static u8 radeon_atom_get_bpc(struct drm_encoder *encoder)
{}

dvo_encoder_control;

void
atombios_dvo_setup(struct drm_encoder *encoder, int action)
{}

lvds_encoder_control;

void
atombios_digital_setup(struct drm_encoder *encoder, int action)
{}

int
atombios_get_encoder_mode(struct drm_encoder *encoder)
{}

/*
 * DIG Encoder/Transmitter Setup
 *
 * DCE 3.0/3.1
 * - 2 DIG transmitter blocks. UNIPHY (links A and B) and LVTMA.
 * Supports up to 3 digital outputs
 * - 2 DIG encoder blocks.
 * DIG1 can drive UNIPHY link A or link B
 * DIG2 can drive UNIPHY link B or LVTMA
 *
 * DCE 3.2
 * - 3 DIG transmitter blocks. UNIPHY0/1/2 (links A and B).
 * Supports up to 5 digital outputs
 * - 2 DIG encoder blocks.
 * DIG1/2 can drive UNIPHY0/1/2 link A or link B
 *
 * DCE 4.0/5.0/6.0
 * - 3 DIG transmitter blocks UNIPHY0/1/2 (links A and B).
 * Supports up to 6 digital outputs
 * - 6 DIG encoder blocks.
 * - DIG to PHY mapping is hardcoded
 * DIG1 drives UNIPHY0 link A, A+B
 * DIG2 drives UNIPHY0 link B
 * DIG3 drives UNIPHY1 link A, A+B
 * DIG4 drives UNIPHY1 link B
 * DIG5 drives UNIPHY2 link A, A+B
 * DIG6 drives UNIPHY2 link B
 *
 * DCE 4.1
 * - 3 DIG transmitter blocks UNIPHY0/1/2 (links A and B).
 * Supports up to 6 digital outputs
 * - 2 DIG encoder blocks.
 * llano
 * DIG1/2 can drive UNIPHY0/1/2 link A or link B
 * ontario
 * DIG1 drives UNIPHY0/1/2 link A
 * DIG2 drives UNIPHY0/1/2 link B
 *
 * Routing
 * crtc -> dig encoder -> UNIPHY/LVTMA (1 or 2 links)
 * Examples:
 * crtc0 -> dig2 -> LVTMA   links A+B -> TMDS/HDMI
 * crtc1 -> dig1 -> UNIPHY0 link  B   -> DP
 * crtc0 -> dig1 -> UNIPHY2 link  A   -> LVDS
 * crtc1 -> dig2 -> UNIPHY1 link  B+A -> TMDS/HDMI
 */

dig_encoder_control;

void
atombios_dig_encoder_setup2(struct drm_encoder *encoder, int action, int panel_mode, int enc_override)
{}

void
atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode)
{}

dig_transmitter_control;

void
atombios_dig_transmitter_setup2(struct drm_encoder *encoder, int action, uint8_t lane_num, uint8_t lane_set, int fe)
{}

void
atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t lane_num, uint8_t lane_set)
{}

bool
atombios_set_edp_panel_power(struct drm_connector *connector, int action)
{}

external_encoder_control;

static void
atombios_external_encoder_setup(struct drm_encoder *encoder,
				struct drm_encoder *ext_encoder,
				int action)
{}

static void
atombios_yuv_setup(struct drm_encoder *encoder, bool enable)
{}

static void
radeon_atom_encoder_dpms_avivo(struct drm_encoder *encoder, int mode)
{}

static void
radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
{}

static void
radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
{}

crtc_source_param;

static void
atombios_set_encoder_crtc_source(struct drm_encoder *encoder)
{}

static void
atombios_apply_encoder_quirks(struct drm_encoder *encoder,
			      struct drm_display_mode *mode)
{}

void radeon_atom_release_dig_encoder(struct radeon_device *rdev, int enc_idx)
{}

int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder, int fe_idx)
{}

/* This only needs to be called once at startup */
void
radeon_atom_encoder_init(struct radeon_device *rdev)
{}

static void
radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
			     struct drm_display_mode *mode,
			     struct drm_display_mode *adjusted_mode)
{}

static bool
atombios_dac_load_detect(struct drm_encoder *encoder, struct drm_connector *connector)
{}

static enum drm_connector_status
radeon_atom_dac_detect(struct drm_encoder *encoder, struct drm_connector *connector)
{}

static enum drm_connector_status
radeon_atom_dig_detect(struct drm_encoder *encoder, struct drm_connector *connector)
{}

void
radeon_atom_ext_encoder_setup_ddc(struct drm_encoder *encoder)
{}

static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
{}

static void radeon_atom_encoder_commit(struct drm_encoder *encoder)
{}

static void radeon_atom_encoder_disable(struct drm_encoder *encoder)
{}

/* these are handled by the primary encoders */
static void radeon_atom_ext_prepare(struct drm_encoder *encoder)
{}

static void radeon_atom_ext_commit(struct drm_encoder *encoder)
{}

static void
radeon_atom_ext_mode_set(struct drm_encoder *encoder,
			 struct drm_display_mode *mode,
			 struct drm_display_mode *adjusted_mode)
{}

static void radeon_atom_ext_disable(struct drm_encoder *encoder)
{}

static void
radeon_atom_ext_dpms(struct drm_encoder *encoder, int mode)
{}

static const struct drm_encoder_helper_funcs radeon_atom_ext_helper_funcs =;

static const struct drm_encoder_helper_funcs radeon_atom_dig_helper_funcs =;

static const struct drm_encoder_helper_funcs radeon_atom_dac_helper_funcs =;

void radeon_enc_destroy(struct drm_encoder *encoder)
{}

static const struct drm_encoder_funcs radeon_atom_enc_funcs =;

static struct radeon_encoder_atom_dac *
radeon_atombios_set_dac_info(struct radeon_encoder *radeon_encoder)
{}

static struct radeon_encoder_atom_dig *
radeon_atombios_set_dig_info(struct radeon_encoder *radeon_encoder)
{}

void
radeon_add_atom_encoder(struct drm_device *dev,
			uint32_t encoder_enum,
			uint32_t supported_device,
			u16 caps)
{}