164-media-atmel-atmel-isc-create-register-offsets-struct.patch 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. From 7a1b082cd81a2496e2687cee7ea1ef04a3020f48 Mon Sep 17 00:00:00 2001
  2. From: Eugen Hristev <[email protected]>
  3. Date: Tue, 13 Apr 2021 12:57:06 +0200
  4. Subject: [PATCH 164/247] media: atmel: atmel-isc: create register offsets
  5. struct
  6. Create a struct that holds register offsets that are product specific.
  7. Add initially the CSC register.
  8. This allows each product that contains a variant of the ISC to add their
  9. own register offset.
  10. Signed-off-by: Eugen Hristev <[email protected]>
  11. Signed-off-by: Hans Verkuil <[email protected]>
  12. Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  13. ---
  14. drivers/media/platform/atmel/atmel-isc-base.c | 2 +-
  15. drivers/media/platform/atmel/atmel-isc-regs.h | 3 +++
  16. drivers/media/platform/atmel/atmel-isc.h | 12 +++++++++++
  17. .../media/platform/atmel/atmel-sama5d2-isc.c | 20 +++++++++++++------
  18. 4 files changed, 30 insertions(+), 7 deletions(-)
  19. --- a/drivers/media/platform/atmel/atmel-isc-base.c
  20. +++ b/drivers/media/platform/atmel/atmel-isc-base.c
  21. @@ -2326,7 +2326,7 @@ int isc_pipeline_init(struct isc_device
  22. REG_FIELD(ISC_GAM_CTRL, 1, 1),
  23. REG_FIELD(ISC_GAM_CTRL, 2, 2),
  24. REG_FIELD(ISC_GAM_CTRL, 3, 3),
  25. - REG_FIELD(ISC_CSC_CTRL, 0, 0),
  26. + REG_FIELD(ISC_CSC_CTRL + isc->offsets.csc, 0, 0),
  27. REG_FIELD(ISC_CBC_CTRL, 0, 0),
  28. REG_FIELD(ISC_SUB422_CTRL, 0, 0),
  29. REG_FIELD(ISC_SUB420_CTRL, 0, 0),
  30. --- a/drivers/media/platform/atmel/atmel-isc-regs.h
  31. +++ b/drivers/media/platform/atmel/atmel-isc-regs.h
  32. @@ -153,6 +153,9 @@
  33. /* ISC_Gamma Correction Green Entry Register */
  34. #define ISC_GAM_RENTRY 0x00000298
  35. +/* Offset for CSC register specific to sama5d2 product */
  36. +#define ISC_SAMA5D2_CSC_OFFSET 0
  37. +
  38. /* Color Space Conversion Control Register */
  39. #define ISC_CSC_CTRL 0x00000398
  40. --- a/drivers/media/platform/atmel/atmel-isc.h
  41. +++ b/drivers/media/platform/atmel/atmel-isc.h
  42. @@ -144,6 +144,14 @@ struct isc_ctrls {
  43. #define ISC_PIPE_LINE_NODE_NUM 11
  44. /*
  45. + * struct isc_reg_offsets - ISC device register offsets
  46. + * @csc: Offset for the CSC register
  47. + */
  48. +struct isc_reg_offsets {
  49. + u32 csc;
  50. +};
  51. +
  52. +/*
  53. * struct isc_device - ISC device driver data/config struct
  54. * @regmap: Register map
  55. * @hclock: Hclock clock input (refer datasheet)
  56. @@ -194,6 +202,8 @@ struct isc_ctrls {
  57. *
  58. * @config_csc: pointer to a function that initializes product
  59. * specific CSC module
  60. + *
  61. + * @offsets: struct holding the product specific register offsets
  62. */
  63. struct isc_device {
  64. struct regmap *regmap;
  65. @@ -265,6 +275,8 @@ struct isc_device {
  66. struct {
  67. void (*config_csc)(struct isc_device *isc);
  68. };
  69. +
  70. + struct isc_reg_offsets offsets;
  71. };
  72. extern struct isc_format formats_list[];
  73. --- a/drivers/media/platform/atmel/atmel-sama5d2-isc.c
  74. +++ b/drivers/media/platform/atmel/atmel-sama5d2-isc.c
  75. @@ -59,12 +59,18 @@ static void isc_sama5d2_config_csc(struc
  76. struct regmap *regmap = isc->regmap;
  77. /* Convert RGB to YUV */
  78. - regmap_write(regmap, ISC_CSC_YR_YG, 0x42 | (0x81 << 16));
  79. - regmap_write(regmap, ISC_CSC_YB_OY, 0x19 | (0x10 << 16));
  80. - regmap_write(regmap, ISC_CSC_CBR_CBG, 0xFDA | (0xFB6 << 16));
  81. - regmap_write(regmap, ISC_CSC_CBB_OCB, 0x70 | (0x80 << 16));
  82. - regmap_write(regmap, ISC_CSC_CRR_CRG, 0x70 | (0xFA2 << 16));
  83. - regmap_write(regmap, ISC_CSC_CRB_OCR, 0xFEE | (0x80 << 16));
  84. + regmap_write(regmap, ISC_CSC_YR_YG + isc->offsets.csc,
  85. + 0x42 | (0x81 << 16));
  86. + regmap_write(regmap, ISC_CSC_YB_OY + isc->offsets.csc,
  87. + 0x19 | (0x10 << 16));
  88. + regmap_write(regmap, ISC_CSC_CBR_CBG + isc->offsets.csc,
  89. + 0xFDA | (0xFB6 << 16));
  90. + regmap_write(regmap, ISC_CSC_CBB_OCB + isc->offsets.csc,
  91. + 0x70 | (0x80 << 16));
  92. + regmap_write(regmap, ISC_CSC_CRR_CRG + isc->offsets.csc,
  93. + 0x70 | (0xFA2 << 16));
  94. + regmap_write(regmap, ISC_CSC_CRB_OCR + isc->offsets.csc,
  95. + 0xFEE | (0x80 << 16));
  96. }
  97. /* Gamma table with gamma 1/2.2 */
  98. @@ -234,6 +240,8 @@ static int atmel_isc_probe(struct platfo
  99. isc->config_csc = isc_sama5d2_config_csc;
  100. + isc->offsets.csc = ISC_SAMA5D2_CSC_OFFSET;
  101. +
  102. /* sama5d2-isc - 8 bits per beat */
  103. isc->dcfg = ISC_DCFG_YMBSIZE_BEATS8 | ISC_DCFG_CMBSIZE_BEATS8;