bus.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
  2. // Copyright(c) 2015-17 Intel Corporation.
  3. #ifndef __SDW_BUS_H
  4. #define __SDW_BUS_H
  5. #if IS_ENABLED(CONFIG_ACPI)
  6. int sdw_acpi_find_slaves(struct sdw_bus *bus);
  7. #else
  8. static inline int sdw_acpi_find_slaves(struct sdw_bus *bus)
  9. {
  10. return -ENOTSUPP;
  11. }
  12. #endif
  13. void sdw_extract_slave_id(struct sdw_bus *bus,
  14. u64 addr, struct sdw_slave_id *id);
  15. enum {
  16. SDW_MSG_FLAG_READ = 0,
  17. SDW_MSG_FLAG_WRITE,
  18. };
  19. /**
  20. * struct sdw_msg - Message structure
  21. * @addr: Register address accessed in the Slave
  22. * @len: number of messages
  23. * @dev_num: Slave device number
  24. * @addr_page1: SCP address page 1 Slave register
  25. * @addr_page2: SCP address page 2 Slave register
  26. * @flags: transfer flags, indicate if xfer is read or write
  27. * @buf: message data buffer
  28. * @ssp_sync: Send message at SSP (Stream Synchronization Point)
  29. * @page: address requires paging
  30. */
  31. struct sdw_msg {
  32. u16 addr;
  33. u16 len;
  34. u8 dev_num;
  35. u8 addr_page1;
  36. u8 addr_page2;
  37. u8 flags;
  38. u8 *buf;
  39. bool ssp_sync;
  40. bool page;
  41. };
  42. int sdw_transfer(struct sdw_bus *bus, struct sdw_msg *msg);
  43. int sdw_transfer_defer(struct sdw_bus *bus, struct sdw_msg *msg,
  44. struct sdw_defer *defer);
  45. #define SDW_READ_INTR_CLEAR_RETRY 10
  46. int sdw_fill_msg(struct sdw_msg *msg, struct sdw_slave *slave,
  47. u32 addr, size_t count, u16 dev_num, u8 flags, u8 *buf);
  48. /* Read-Modify-Write Slave register */
  49. static inline int
  50. sdw_update(struct sdw_slave *slave, u32 addr, u8 mask, u8 val)
  51. {
  52. int tmp;
  53. tmp = sdw_read(slave, addr);
  54. if (tmp < 0)
  55. return tmp;
  56. tmp = (tmp & ~mask) | val;
  57. return sdw_write(slave, addr, tmp);
  58. }
  59. #endif /* __SDW_BUS_H */