regmap.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright (c) 2015 Google, Inc
  4. * Written by Simon Glass <sjg@chromium.org>
  5. */
  6. #ifndef __REGMAP_H
  7. #define __REGMAP_H
  8. /**
  9. * struct regmap_range - a register map range
  10. *
  11. * @start: Start address
  12. * @size: Size in bytes
  13. */
  14. struct regmap_range {
  15. ulong start;
  16. ulong size;
  17. };
  18. /**
  19. * struct regmap - a way of accessing hardware/bus registers
  20. *
  21. * @range_count: Number of ranges available within the map
  22. * @ranges: Array of ranges
  23. */
  24. struct regmap {
  25. int range_count;
  26. struct regmap_range ranges[0];
  27. };
  28. /*
  29. * Interface to provide access to registers either through a direct memory
  30. * bus or through a peripheral bus like I2C, SPI.
  31. */
  32. int regmap_write(struct regmap *map, uint offset, uint val);
  33. int regmap_read(struct regmap *map, uint offset, uint *valp);
  34. #define regmap_write32(map, ptr, member, val) \
  35. regmap_write(map, (uint32_t *)(ptr)->member - (uint32_t *)(ptr), val)
  36. #define regmap_read32(map, ptr, member, valp) \
  37. regmap_read(map, (uint32_t *)(ptr)->member - (uint32_t *)(ptr), valp)
  38. /**
  39. * regmap_init_mem() - Set up a new register map that uses memory access
  40. *
  41. * Use regmap_uninit() to free it.
  42. *
  43. * @dev: Device that uses this map
  44. * @mapp: Returns allocated map
  45. */
  46. int regmap_init_mem(struct udevice *dev, struct regmap **mapp);
  47. /**
  48. * regmap_init_mem_platdata() - Set up a new memory register map for of-platdata
  49. *
  50. * This creates a new regmap with a list of regions passed in, rather than
  51. * using the device tree. It only supports 32-bit machines.
  52. *
  53. * Use regmap_uninit() to free it.
  54. *
  55. * @dev: Device that uses this map
  56. * @reg: List of address, size pairs
  57. * @count: Number of pairs (e.g. 1 if the regmap has a single entry)
  58. * @mapp: Returns allocated map
  59. */
  60. int regmap_init_mem_platdata(struct udevice *dev, fdt_val_t *reg, int count,
  61. struct regmap **mapp);
  62. /**
  63. * regmap_get_range() - Obtain the base memory address of a regmap range
  64. *
  65. * @map: Regmap to query
  66. * @range_num: Range to look up
  67. */
  68. void *regmap_get_range(struct regmap *map, unsigned int range_num);
  69. /**
  70. * regmap_uninit() - free a previously inited regmap
  71. */
  72. int regmap_uninit(struct regmap *map);
  73. #endif