linux/drivers/gpu/drm/gma500/psb_intel_modes.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2007 Intel Corporation
   3 *
   4 * This program is free software; you can redistribute it and/or modify it
   5 * under the terms and conditions of the GNU General Public License,
   6 * version 2, as published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope it will be useful, but WITHOUT
   9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  10 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  11 * more details.
  12 *
  13 * You should have received a copy of the GNU General Public License along with
  14 * this program; if not, write to the Free Software Foundation, Inc.,
  15 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  16 *
  17 * Authers: Jesse Barnes <jesse.barnes@intel.com>
  18 */
  19
  20#include <linux/i2c.h>
  21#include <linux/fb.h>
  22#include <drm/drmP.h>
  23#include "psb_intel_drv.h"
  24
  25/**
  26 * psb_intel_ddc_probe
  27 *
  28 */
  29bool psb_intel_ddc_probe(struct i2c_adapter *adapter)
  30{
  31        u8 out_buf[] = { 0x0, 0x0 };
  32        u8 buf[2];
  33        int ret;
  34        struct i2c_msg msgs[] = {
  35                {
  36                 .addr = 0x50,
  37                 .flags = 0,
  38                 .len = 1,
  39                 .buf = out_buf,
  40                 },
  41                {
  42                 .addr = 0x50,
  43                 .flags = I2C_M_RD,
  44                 .len = 1,
  45                 .buf = buf,
  46                 }
  47        };
  48
  49        ret = i2c_transfer(adapter, msgs, 2);
  50        if (ret == 2)
  51                return true;
  52
  53        return false;
  54}
  55
  56/**
  57 * psb_intel_ddc_get_modes - get modelist from monitor
  58 * @connector: DRM connector device to use
  59 *
  60 * Fetch the EDID information from @connector using the DDC bus.
  61 */
  62int psb_intel_ddc_get_modes(struct drm_connector *connector,
  63                            struct i2c_adapter *adapter)
  64{
  65        struct edid *edid;
  66        int ret = 0;
  67
  68        edid = drm_get_edid(connector, adapter);
  69        if (edid) {
  70                drm_mode_connector_update_edid_property(connector, edid);
  71                ret = drm_add_edid_modes(connector, edid);
  72                kfree(edid);
  73        }
  74        return ret;
  75}
  76