cec-ioc-adap-g-phys-addr.rst 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
  2. .. c:namespace:: CEC
  3. .. _CEC_ADAP_PHYS_ADDR:
  4. .. _CEC_ADAP_G_PHYS_ADDR:
  5. .. _CEC_ADAP_S_PHYS_ADDR:
  6. ****************************************************
  7. ioctls CEC_ADAP_G_PHYS_ADDR and CEC_ADAP_S_PHYS_ADDR
  8. ****************************************************
  9. Name
  10. ====
  11. CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR - Get or set the physical address
  12. Synopsis
  13. ========
  14. .. c:macro:: CEC_ADAP_G_PHYS_ADDR
  15. ``int ioctl(int fd, CEC_ADAP_G_PHYS_ADDR, __u16 *argp)``
  16. .. c:macro:: CEC_ADAP_S_PHYS_ADDR
  17. ``int ioctl(int fd, CEC_ADAP_S_PHYS_ADDR, __u16 *argp)``
  18. Arguments
  19. =========
  20. ``fd``
  21. File descriptor returned by :c:func:`open()`.
  22. ``argp``
  23. Pointer to the CEC address.
  24. Description
  25. ===========
  26. To query the current physical address applications call
  27. :ref:`ioctl CEC_ADAP_G_PHYS_ADDR <CEC_ADAP_G_PHYS_ADDR>` with a pointer to a __u16 where the
  28. driver stores the physical address.
  29. To set a new physical address applications store the physical address in
  30. a __u16 and call :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` with a pointer to
  31. this integer. The :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` is only available if
  32. ``CEC_CAP_PHYS_ADDR`` is set (the ``ENOTTY`` error code will be returned
  33. otherwise). The :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` can only be called
  34. by a file descriptor in initiator mode (see :ref:`CEC_S_MODE`), if not
  35. the ``EBUSY`` error code will be returned.
  36. To clear an existing physical address use ``CEC_PHYS_ADDR_INVALID``.
  37. The adapter will go to the unconfigured state.
  38. If logical address types have been defined (see :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`),
  39. then this ioctl will block until all
  40. requested logical addresses have been claimed. If the file descriptor is in non-blocking mode
  41. then it will not wait for the logical addresses to be claimed, instead it just returns 0.
  42. A :ref:`CEC_EVENT_STATE_CHANGE <CEC-EVENT-STATE-CHANGE>` event is sent when the physical address
  43. changes.
  44. The physical address is a 16-bit number where each group of 4 bits
  45. represent a digit of the physical address a.b.c.d where the most
  46. significant 4 bits represent 'a'. The CEC root device (usually the TV)
  47. has address 0.0.0.0. Every device that is hooked up to an input of the
  48. TV has address a.0.0.0 (where 'a' is ≥ 1), devices hooked up to those in
  49. turn have addresses a.b.0.0, etc. So a topology of up to 5 devices deep
  50. is supported. The physical address a device shall use is stored in the
  51. EDID of the sink.
  52. For example, the EDID for each HDMI input of the TV will have a
  53. different physical address of the form a.0.0.0 that the sources will
  54. read out and use as their physical address.
  55. Return Value
  56. ============
  57. On success 0 is returned, on error -1 and the ``errno`` variable is set
  58. appropriately. The generic error codes are described at the
  59. :ref:`Generic Error Codes <gen-errors>` chapter.
  60. The :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>` can return the following
  61. error codes:
  62. ENOTTY
  63. The ``CEC_CAP_PHYS_ADDR`` capability wasn't set, so this ioctl is not supported.
  64. EBUSY
  65. Another filehandle is in exclusive follower or initiator mode, or the filehandle
  66. is in mode ``CEC_MODE_NO_INITIATOR``.
  67. EINVAL
  68. The physical address is malformed.