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