psb_intel_modes.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * Copyright (c) 2007 Intel Corporation
  3. *
  4. * This program is free software; you can redistribute it and/or modify it
  5. * under the terms and conditions of the GNU General Public License,
  6. * version 2, as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope it will be useful, but WITHOUT
  9. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  10. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  11. * more details.
  12. *
  13. * You should have received a copy of the GNU General Public License along with
  14. * this program; if not, write to the Free Software Foundation, Inc.,
  15. * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  16. *
  17. * Authers: Jesse Barnes <jesse.barnes@intel.com>
  18. */
  19. #include <linux/i2c.h>
  20. #include <drm/drmP.h>
  21. #include "psb_intel_drv.h"
  22. /**
  23. * psb_intel_ddc_probe
  24. *
  25. */
  26. bool psb_intel_ddc_probe(struct i2c_adapter *adapter)
  27. {
  28. u8 out_buf[] = { 0x0, 0x0 };
  29. u8 buf[2];
  30. int ret;
  31. struct i2c_msg msgs[] = {
  32. {
  33. .addr = 0x50,
  34. .flags = 0,
  35. .len = 1,
  36. .buf = out_buf,
  37. },
  38. {
  39. .addr = 0x50,
  40. .flags = I2C_M_RD,
  41. .len = 1,
  42. .buf = buf,
  43. }
  44. };
  45. ret = i2c_transfer(adapter, msgs, 2);
  46. if (ret == 2)
  47. return true;
  48. return false;
  49. }
  50. /**
  51. * psb_intel_ddc_get_modes - get modelist from monitor
  52. * @connector: DRM connector device to use
  53. *
  54. * Fetch the EDID information from @connector using the DDC bus.
  55. */
  56. int psb_intel_ddc_get_modes(struct drm_connector *connector,
  57. struct i2c_adapter *adapter)
  58. {
  59. struct edid *edid;
  60. int ret = 0;
  61. edid = drm_get_edid(connector, adapter);
  62. if (edid) {
  63. drm_mode_connector_update_edid_property(connector, edid);
  64. ret = drm_add_edid_modes(connector, edid);
  65. kfree(edid);
  66. }
  67. return ret;
  68. }