psb_intel_modes.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. #include <linux/i2c.h>
  8. #include "psb_intel_drv.h"
  9. /**
  10. * psb_intel_ddc_probe
  11. *
  12. */
  13. bool psb_intel_ddc_probe(struct i2c_adapter *adapter)
  14. {
  15. u8 out_buf[] = { 0x0, 0x0 };
  16. u8 buf[2];
  17. int ret;
  18. struct i2c_msg msgs[] = {
  19. {
  20. .addr = 0x50,
  21. .flags = 0,
  22. .len = 1,
  23. .buf = out_buf,
  24. },
  25. {
  26. .addr = 0x50,
  27. .flags = I2C_M_RD,
  28. .len = 1,
  29. .buf = buf,
  30. }
  31. };
  32. ret = i2c_transfer(adapter, msgs, 2);
  33. if (ret == 2)
  34. return true;
  35. return false;
  36. }
  37. /**
  38. * psb_intel_ddc_get_modes - get modelist from monitor
  39. * @connector: DRM connector device to use
  40. *
  41. * Fetch the EDID information from @connector using the DDC bus.
  42. */
  43. int psb_intel_ddc_get_modes(struct drm_connector *connector,
  44. struct i2c_adapter *adapter)
  45. {
  46. struct edid *edid;
  47. int ret = 0;
  48. edid = drm_get_edid(connector, adapter);
  49. if (edid) {
  50. drm_connector_update_edid_property(connector, edid);
  51. ret = drm_add_edid_modes(connector, edid);
  52. kfree(edid);
  53. }
  54. return ret;
  55. }