forked from Minki/linux
7434a255a5
This patch adds support for the ns2501 DVO, found in some older Fujitsu/Siemens Labtops. It is in the state of "works for me". Includes now proper DPMS support. Includes switching between resolutions - from 640x480 to 1024x768. Currently assumes that the native display resolution is 1024x768. The ns2501 seems to be rather critical - if the output PLL is not running, the chip doesn't seem to be clocked and then doesn't react on i2c messages. Thus, a quick'n-dirty trick ensures that the DVO is active before submitting any i2c messages to it. This is probably to be reviewed. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=17902 Signed-off-by: Thomas Richter <thor@math.tu-berlin.de> [danvet: fixup whitespace fail.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
146 lines
4.5 KiB
C
146 lines
4.5 KiB
C
/*
|
|
* Copyright © 2006 Eric Anholt
|
|
*
|
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
|
* documentation for any purpose is hereby granted without fee, provided that
|
|
* the above copyright notice appear in all copies and that both that copyright
|
|
* notice and this permission notice appear in supporting documentation, and
|
|
* that the name of the copyright holders not be used in advertising or
|
|
* publicity pertaining to distribution of the software without specific,
|
|
* written prior permission. The copyright holders make no representations
|
|
* about the suitability of this software for any purpose. It is provided "as
|
|
* is" without express or implied warranty.
|
|
*
|
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
|
* OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#ifndef _INTEL_DVO_H
|
|
#define _INTEL_DVO_H
|
|
|
|
#include <linux/i2c.h>
|
|
#include "drmP.h"
|
|
#include "drm.h"
|
|
#include "drm_crtc.h"
|
|
#include "intel_drv.h"
|
|
|
|
struct intel_dvo_device {
|
|
const char *name;
|
|
int type;
|
|
/* DVOA/B/C output register */
|
|
u32 dvo_reg;
|
|
/* GPIO register used for i2c bus to control this device */
|
|
u32 gpio;
|
|
int slave_addr;
|
|
|
|
const struct intel_dvo_dev_ops *dev_ops;
|
|
void *dev_priv;
|
|
struct i2c_adapter *i2c_bus;
|
|
};
|
|
|
|
struct intel_dvo_dev_ops {
|
|
/*
|
|
* Initialize the device at startup time.
|
|
* Returns NULL if the device does not exist.
|
|
*/
|
|
bool (*init)(struct intel_dvo_device *dvo,
|
|
struct i2c_adapter *i2cbus);
|
|
|
|
/*
|
|
* Called to allow the output a chance to create properties after the
|
|
* RandR objects have been created.
|
|
*/
|
|
void (*create_resources)(struct intel_dvo_device *dvo);
|
|
|
|
/*
|
|
* Turn on/off output or set intermediate power levels if available.
|
|
*
|
|
* Unsupported intermediate modes drop to the lower power setting.
|
|
* If the mode is DPMSModeOff, the output must be disabled,
|
|
* as the DPLL may be disabled afterwards.
|
|
*/
|
|
void (*dpms)(struct intel_dvo_device *dvo, int mode);
|
|
|
|
/*
|
|
* Callback for testing a video mode for a given output.
|
|
*
|
|
* This function should only check for cases where a mode can't
|
|
* be supported on the output specifically, and not represent
|
|
* generic CRTC limitations.
|
|
*
|
|
* \return MODE_OK if the mode is valid, or another MODE_* otherwise.
|
|
*/
|
|
int (*mode_valid)(struct intel_dvo_device *dvo,
|
|
struct drm_display_mode *mode);
|
|
|
|
/*
|
|
* Callback to adjust the mode to be set in the CRTC.
|
|
*
|
|
* This allows an output to adjust the clock or even the entire set of
|
|
* timings, which is used for panels with fixed timings or for
|
|
* buses with clock limitations.
|
|
*/
|
|
bool (*mode_fixup)(struct intel_dvo_device *dvo,
|
|
const struct drm_display_mode *mode,
|
|
struct drm_display_mode *adjusted_mode);
|
|
|
|
/*
|
|
* Callback for preparing mode changes on an output
|
|
*/
|
|
void (*prepare)(struct intel_dvo_device *dvo);
|
|
|
|
/*
|
|
* Callback for committing mode changes on an output
|
|
*/
|
|
void (*commit)(struct intel_dvo_device *dvo);
|
|
|
|
/*
|
|
* Callback for setting up a video mode after fixups have been made.
|
|
*
|
|
* This is only called while the output is disabled. The dpms callback
|
|
* must be all that's necessary for the output, to turn the output on
|
|
* after this function is called.
|
|
*/
|
|
void (*mode_set)(struct intel_dvo_device *dvo,
|
|
struct drm_display_mode *mode,
|
|
struct drm_display_mode *adjusted_mode);
|
|
|
|
/*
|
|
* Probe for a connected output, and return detect_status.
|
|
*/
|
|
enum drm_connector_status (*detect)(struct intel_dvo_device *dvo);
|
|
|
|
/**
|
|
* Query the device for the modes it provides.
|
|
*
|
|
* This function may also update MonInfo, mm_width, and mm_height.
|
|
*
|
|
* \return singly-linked list of modes or NULL if no modes found.
|
|
*/
|
|
struct drm_display_mode *(*get_modes)(struct intel_dvo_device *dvo);
|
|
|
|
/**
|
|
* Clean up driver-specific bits of the output
|
|
*/
|
|
void (*destroy) (struct intel_dvo_device *dvo);
|
|
|
|
/**
|
|
* Debugging hook to dump device registers to log file
|
|
*/
|
|
void (*dump_regs)(struct intel_dvo_device *dvo);
|
|
};
|
|
|
|
extern struct intel_dvo_dev_ops sil164_ops;
|
|
extern struct intel_dvo_dev_ops ch7xxx_ops;
|
|
extern struct intel_dvo_dev_ops ivch_ops;
|
|
extern struct intel_dvo_dev_ops tfp410_ops;
|
|
extern struct intel_dvo_dev_ops ch7017_ops;
|
|
extern struct intel_dvo_dev_ops ns2501_ops;
|
|
|
|
#endif /* _INTEL_DVO_H */
|