1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (c) 2007 Intel Corporation
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Authers: Jesse Barnes <jesse.barnes@intel.com>
6*4882a593Smuzhiyun */
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun #include <linux/i2c.h>
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun #include "psb_intel_drv.h"
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun /**
13*4882a593Smuzhiyun * psb_intel_ddc_probe
14*4882a593Smuzhiyun *
15*4882a593Smuzhiyun */
psb_intel_ddc_probe(struct i2c_adapter * adapter)16*4882a593Smuzhiyun bool psb_intel_ddc_probe(struct i2c_adapter *adapter)
17*4882a593Smuzhiyun {
18*4882a593Smuzhiyun u8 out_buf[] = { 0x0, 0x0 };
19*4882a593Smuzhiyun u8 buf[2];
20*4882a593Smuzhiyun int ret;
21*4882a593Smuzhiyun struct i2c_msg msgs[] = {
22*4882a593Smuzhiyun {
23*4882a593Smuzhiyun .addr = 0x50,
24*4882a593Smuzhiyun .flags = 0,
25*4882a593Smuzhiyun .len = 1,
26*4882a593Smuzhiyun .buf = out_buf,
27*4882a593Smuzhiyun },
28*4882a593Smuzhiyun {
29*4882a593Smuzhiyun .addr = 0x50,
30*4882a593Smuzhiyun .flags = I2C_M_RD,
31*4882a593Smuzhiyun .len = 1,
32*4882a593Smuzhiyun .buf = buf,
33*4882a593Smuzhiyun }
34*4882a593Smuzhiyun };
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun ret = i2c_transfer(adapter, msgs, 2);
37*4882a593Smuzhiyun if (ret == 2)
38*4882a593Smuzhiyun return true;
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun return false;
41*4882a593Smuzhiyun }
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun /**
44*4882a593Smuzhiyun * psb_intel_ddc_get_modes - get modelist from monitor
45*4882a593Smuzhiyun * @connector: DRM connector device to use
46*4882a593Smuzhiyun *
47*4882a593Smuzhiyun * Fetch the EDID information from @connector using the DDC bus.
48*4882a593Smuzhiyun */
psb_intel_ddc_get_modes(struct drm_connector * connector,struct i2c_adapter * adapter)49*4882a593Smuzhiyun int psb_intel_ddc_get_modes(struct drm_connector *connector,
50*4882a593Smuzhiyun struct i2c_adapter *adapter)
51*4882a593Smuzhiyun {
52*4882a593Smuzhiyun struct edid *edid;
53*4882a593Smuzhiyun int ret = 0;
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun edid = drm_get_edid(connector, adapter);
56*4882a593Smuzhiyun if (edid) {
57*4882a593Smuzhiyun drm_connector_update_edid_property(connector, edid);
58*4882a593Smuzhiyun ret = drm_add_edid_modes(connector, edid);
59*4882a593Smuzhiyun kfree(edid);
60*4882a593Smuzhiyun }
61*4882a593Smuzhiyun return ret;
62*4882a593Smuzhiyun }
63