18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2007 Intel Corporation 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Authers: Jesse Barnes <jesse.barnes@intel.com> 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/i2c.h> 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include "psb_intel_drv.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci/** 138c2ecf20Sopenharmony_ci * psb_intel_ddc_probe 148c2ecf20Sopenharmony_ci * 158c2ecf20Sopenharmony_ci */ 168c2ecf20Sopenharmony_cibool psb_intel_ddc_probe(struct i2c_adapter *adapter) 178c2ecf20Sopenharmony_ci{ 188c2ecf20Sopenharmony_ci u8 out_buf[] = { 0x0, 0x0 }; 198c2ecf20Sopenharmony_ci u8 buf[2]; 208c2ecf20Sopenharmony_ci int ret; 218c2ecf20Sopenharmony_ci struct i2c_msg msgs[] = { 228c2ecf20Sopenharmony_ci { 238c2ecf20Sopenharmony_ci .addr = 0x50, 248c2ecf20Sopenharmony_ci .flags = 0, 258c2ecf20Sopenharmony_ci .len = 1, 268c2ecf20Sopenharmony_ci .buf = out_buf, 278c2ecf20Sopenharmony_ci }, 288c2ecf20Sopenharmony_ci { 298c2ecf20Sopenharmony_ci .addr = 0x50, 308c2ecf20Sopenharmony_ci .flags = I2C_M_RD, 318c2ecf20Sopenharmony_ci .len = 1, 328c2ecf20Sopenharmony_ci .buf = buf, 338c2ecf20Sopenharmony_ci } 348c2ecf20Sopenharmony_ci }; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci ret = i2c_transfer(adapter, msgs, 2); 378c2ecf20Sopenharmony_ci if (ret == 2) 388c2ecf20Sopenharmony_ci return true; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci return false; 418c2ecf20Sopenharmony_ci} 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci/** 448c2ecf20Sopenharmony_ci * psb_intel_ddc_get_modes - get modelist from monitor 458c2ecf20Sopenharmony_ci * @connector: DRM connector device to use 468c2ecf20Sopenharmony_ci * 478c2ecf20Sopenharmony_ci * Fetch the EDID information from @connector using the DDC bus. 488c2ecf20Sopenharmony_ci */ 498c2ecf20Sopenharmony_ciint psb_intel_ddc_get_modes(struct drm_connector *connector, 508c2ecf20Sopenharmony_ci struct i2c_adapter *adapter) 518c2ecf20Sopenharmony_ci{ 528c2ecf20Sopenharmony_ci struct edid *edid; 538c2ecf20Sopenharmony_ci int ret = 0; 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci edid = drm_get_edid(connector, adapter); 568c2ecf20Sopenharmony_ci if (edid) { 578c2ecf20Sopenharmony_ci drm_connector_update_edid_property(connector, edid); 588c2ecf20Sopenharmony_ci ret = drm_add_edid_modes(connector, edid); 598c2ecf20Sopenharmony_ci kfree(edid); 608c2ecf20Sopenharmony_ci } 618c2ecf20Sopenharmony_ci return ret; 628c2ecf20Sopenharmony_ci} 63