| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * Copyright (c) 2007 Intel Corporation |
| * |
| * Authers: Jesse Barnes <jesse.barnes@intel.com> |
| */ |
| |
| #include <linux/i2c.h> |
| |
| #include <drm/drm_edid.h> |
| |
| #include "psb_intel_drv.h" |
| |
| /** |
| * psb_intel_ddc_probe |
| * @adapter: Associated I2C adaptor |
| */ |
| bool psb_intel_ddc_probe(struct i2c_adapter *adapter) |
| { |
| u8 out_buf[] = { 0x0, 0x0 }; |
| u8 buf[2]; |
| int ret; |
| struct i2c_msg msgs[] = { |
| { |
| .addr = 0x50, |
| .flags = 0, |
| .len = 1, |
| .buf = out_buf, |
| }, |
| { |
| .addr = 0x50, |
| .flags = I2C_M_RD, |
| .len = 1, |
| .buf = buf, |
| } |
| }; |
| |
| ret = i2c_transfer(adapter, msgs, 2); |
| if (ret == 2) |
| return true; |
| |
| return false; |
| } |
| |
| /** |
| * psb_intel_ddc_get_modes - get modelist from monitor |
| * @connector: DRM connector device to use |
| * @adapter: Associated I2C adaptor |
| * |
| * Fetch the EDID information from @connector using the DDC bus. |
| */ |
| int psb_intel_ddc_get_modes(struct drm_connector *connector, |
| struct i2c_adapter *adapter) |
| { |
| struct edid *edid; |
| int ret = 0; |
| |
| edid = drm_get_edid(connector, adapter); |
| if (edid) { |
| drm_connector_update_edid_property(connector, edid); |
| ret = drm_add_edid_modes(connector, edid); |
| kfree(edid); |
| } |
| return ret; |
| } |