Home | History | Annotate | Line # | Download | only in src
      1 /*
      2  * Copyright  2006 Eric Anholt
      3  *
      4  * Permission to use, copy, modify, distribute, and sell this software and its
      5  * documentation for any purpose is hereby granted without fee, provided that
      6  * the above copyright notice appear in all copies and that both that copyright
      7  * notice and this permission notice appear in supporting documentation, and
      8  * that the name of the copyright holders not be used in advertising or
      9  * publicity pertaining to distribution of the software without specific,
     10  * written prior permission.  The copyright holders make no representations
     11  * about the suitability of this software for any purpose.  It is provided "as
     12  * is" without express or implied warranty.
     13  *
     14  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
     15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
     16  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
     17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
     18  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
     19  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
     20  * OF THIS SOFTWARE.
     21  */
     22 
     23 #ifndef I2C_VID_H
     24 #define I2C_VID_H
     25 #include <randrstr.h>
     26 
     27 typedef struct _I830I2CVidOutputRec {
     28     /**
     29      * Initialize the device at startup time.
     30      * Returns NULL if the device does not exist.
     31      */
     32     void *(*init)(I2CBusPtr b, I2CSlaveAddr addr);
     33 
     34     /**
     35      * Called to allow the output a chance to create properties after the
     36      * RandR objects have been created.
     37      */
     38     void
     39     (*create_resources)(I2CDevPtr d);
     40 
     41     /**
     42      * Turns the output on/off, or sets intermediate power levels if available.
     43      *
     44      * Unsupported intermediate modes drop to the lower power setting.  If the
     45      * mode is DPMSModeOff, the output must be disabled, as the DPLL may be
     46      * disabled afterwards.
     47      */
     48     void (*dpms)(I2CDevPtr d, int mode);
     49 
     50     /**
     51      * Saves the output's state for restoration on VT switch.
     52      */
     53     void (*save)(I2CDevPtr d);
     54 
     55     /**
     56      * Restore's the output's state at VT switch.
     57      */
     58     void (*restore)(I2CDevPtr d);
     59 
     60     /**
     61      * Callback for testing a video mode for a given output.
     62      *
     63      * This function should only check for cases where a mode can't be supported
     64      * on the output specifically, and not represent generic CRTC limitations.
     65      *
     66      * \return MODE_OK if the mode is valid, or another MODE_* otherwise.
     67      */
     68     int (*mode_valid)(I2CDevPtr d, DisplayModePtr mode);
     69 
     70     /**
     71      * Callback to adjust the mode to be set in the CRTC.
     72      *
     73      * This allows an output to adjust the clock or even the entire set of
     74      * timings, which is used for panels with fixed timings or for
     75      * buses with clock limitations.
     76      */
     77     Bool (*mode_fixup)(I2CDevPtr d, DisplayModePtr mode, DisplayModePtr adjusted_mode);
     78 
     79     /**
     80      * Callback for preparing mode changes on an output
     81      */
     82     void (*prepare)(I2CDevPtr d);
     83 
     84     /**
     85      * Callback for committing mode changes on an output
     86      */
     87     void (*commit)(I2CDevPtr d);
     88 
     89     /**
     90      * Callback for setting up a video mode after fixups have been made.
     91      *
     92      * This is only called while the output is disabled.  The dpms callback
     93      * must be all that's necessary for the output, to turn the output on
     94      * after this function is called.
     95      */
     96     void (*mode_set)(I2CDevPtr d, DisplayModePtr mode, DisplayModePtr adjusted_mode);
     97 
     98     /**
     99      * Probe for a connected output, and return detect_status.
    100      */
    101     xf86OutputStatus (*detect)(I2CDevPtr d);
    102 
    103     /**
    104      * Query the device for the modes it provides.
    105      *
    106      * This function may also update MonInfo, mm_width, and mm_height.
    107      *
    108      * \return singly-linked list of modes or NULL if no modes found.
    109      */
    110     DisplayModePtr
    111     (*get_modes)(I2CDevPtr d);
    112 
    113 #ifdef RANDR_12_INTERFACE
    114     /**
    115      * Callback when an output's property has changed.
    116      */
    117     Bool
    118     (*set_property)(I2CDevPtr d, Atom property, RRPropertyValuePtr value);
    119 #endif
    120 
    121     /**
    122      * Clean up driver-specific bits of the output
    123      */
    124     void (*destroy) (I2CDevPtr d);
    125 
    126     /**
    127      * Debugging hook to dump device registers to log file
    128      */
    129     void (*dump_regs)(I2CDevPtr d);
    130 } I830I2CVidOutputRec, *I830I2CVidOutputPtr;
    131 
    132 #endif
    133