Hi Joe.
Thanks for your patch.
drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c | 210 +++++++++++++-------- 1 file changed, 136 insertions(+), 74 deletions(-)
Hmmm, add more lines than it deletes.
diff --git a/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c b/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c index 158a6d548068..7862863db5f7 100644 --- a/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c +++ b/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c @@ -20,27 +20,6 @@
#define DRV_NAME "panel-rocktech-jh057n00900"
-/* Manufacturer specific Commands send via DSI */ -#define ST7703_CMD_ALL_PIXEL_OFF 0x22 -#define ST7703_CMD_ALL_PIXEL_ON 0x23 -#define ST7703_CMD_SETDISP 0xB2 -#define ST7703_CMD_SETRGBIF 0xB3 -#define ST7703_CMD_SETCYC 0xB4 -#define ST7703_CMD_SETBGP 0xB5 -#define ST7703_CMD_SETVCOM 0xB6 -#define ST7703_CMD_SETOTP 0xB7 -#define ST7703_CMD_SETPOWER_EXT 0xB8 -#define ST7703_CMD_SETEXTC 0xB9 -#define ST7703_CMD_SETMIPI 0xBA -#define ST7703_CMD_SETVDC 0xBC -#define ST7703_CMD_SETSCR 0xC0 -#define ST7703_CMD_SETPOWER 0xC1 -#define ST7703_CMD_SETPANEL 0xCC -#define ST7703_CMD_SETGAMMA 0xE0 -#define ST7703_CMD_SETEQ 0xE3 -#define ST7703_CMD_SETGIP1 0xE9 -#define ST7703_CMD_SETGIP2 0xEA
struct jh057n { struct device *dev; struct drm_panel panel; @@ -51,75 +30,153 @@ struct jh057n { struct dentry *debugfs; };
+struct st7703_cmd {
- const size_t size;
- const u8 data[];
+};
+#define st7703_cmd_data(cmd, ...) \
- .size = 1 + (sizeof((u8[]){__VA_ARGS__})/sizeof(u8)), \
- .data = {cmd, __VA_ARGS__}
+/* Manufacturer specific Commands send via DSI */ +static const struct st7703_cmd ST7703_CMD_ALL_PIXEL_OFF = {
- st7703_cmd_data(0x22)
+}; +static const struct st7703_cmd ST7703_CMD_ALL_PIXEL_ON = {
- st7703_cmd_data(0x23)
+}; +static const struct st7703_cmd ST7703_CMD_SETDISP = {
- st7703_cmd_data(0xB2,
0xF0, 0x12, 0x30)
+}; +static const struct st7703_cmd ST7703_CMD_SETRGBIF = {
- st7703_cmd_data(0xB3,
0x10, 0x10, 0x05, 0x05, 0x03, 0xFF, 0x00, 0x00,
0x00, 0x00)
+}; +static const struct st7703_cmd ST7703_CMD_SETCYC = {
- st7703_cmd_data(0xB4,
0x80)
+}; +static const struct st7703_cmd ST7703_CMD_SETBGP = {
- st7703_cmd_data(0xB5,
0x08, 0x08)
+}; +static const struct st7703_cmd ST7703_CMD_SETVCOM = {
- st7703_cmd_data(0xB6,
0x3F, 0x3F)
+}; +static const struct st7703_cmd ST7703_CMD_SETOTP = {
- st7703_cmd_data(0xB7)
+}; +static const struct st7703_cmd ST7703_CMD_SETPOWER_EXT = {
- st7703_cmd_data(0xB8)
+}; +static const struct st7703_cmd ST7703_CMD_SETEXTC = {
- st7703_cmd_data(0xB9,
0xF1, 0x12, 0x83)
+}; +static const struct st7703_cmd ST7703_CMD_SETMIPI = {
- st7703_cmd_data(0xBA)
+}; +static const struct st7703_cmd ST7703_CMD_SETVDC = {
- st7703_cmd_data(0xBC,
0x4E)
+}; +static const struct st7703_cmd ST7703_CMD_SETSCR = {
- st7703_cmd_data(0xC0,
0x73, 0x73, 0x50, 0x50, 0x00, 0x00, 0x08, 0x70,
0x00)
+}; +static const struct st7703_cmd ST7703_CMD_SETPOWER = {
- st7703_cmd_data(0xC1)
+}; +static const struct st7703_cmd ST7703_CMD_SETPANEL = {
- st7703_cmd_data(0xCC,
0x0B)
+}; +static const struct st7703_cmd ST7703_CMD_SETGAMMA = {
- st7703_cmd_data(0xE0,
0x00, 0x09, 0x0E, 0x29, 0x2D, 0x3C, 0x41, 0x37,
0x07, 0x0B, 0x0D, 0x10, 0x11, 0x0F, 0x10, 0x11,
0x18, 0x00, 0x09, 0x0E, 0x29, 0x2D, 0x3C, 0x41,
0x37, 0x07, 0x0B, 0x0D, 0x10, 0x11, 0x0F, 0x10,
0x11, 0x18)
+}; +static const struct st7703_cmd ST7703_CMD_SETEQ = {
- st7703_cmd_data(0xE3,
0x07, 0x07, 0x0B, 0x0B, 0x03, 0x0B, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0xC0, 0x10)
+}; +static const struct st7703_cmd ST7703_CMD_SETGIP1 = {
- st7703_cmd_data(0xE9,
0x82, 0x10, 0x06, 0x05, 0x9E, 0x0A, 0xA5, 0x12,
0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38,
0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00,
0x03, 0x00, 0x00, 0x00, 0x75, 0x75, 0x31, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x13, 0x88, 0x64,
0x64, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x02, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
+};
+static const struct st7703_cmd ST7703_CMD_SETGIP2 = {
- st7703_cmd_data(0xEA,
0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13,
0x57, 0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x75, 0x88, 0x23, 0x14, 0x00, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0A,
0xA5, 0x00, 0x00, 0x00, 0x00)
+};
static inline struct jh057n *panel_to_jh057n(struct drm_panel *panel) { return container_of(panel, struct jh057n, panel); }
-#define dsi_generic_write_seq(dsi, seq...) do { \
static const u8 d[] = { seq }; \
int ret; \
ret = mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \
if (ret < 0) \
return ret; \
- } while (0)
The above macro was the one triggering this patch. And frankly it looks nice and simple.
The old code is IMO more readable. - We have all the commands listed in the order they are used and in a rahter compatch format. - It is obvious when we need delays. - We have traditional #defines for the constants we know
This macro:
+#define st7703_cmd_data(cmd, ...) \
.size = 1 + (sizeof((u8[]){__VA_ARGS__})/sizeof(u8)), \
.data = {cmd, __VA_ARGS__}
is again IMO not easier to follow than the above.
This is all to some extent bikeshedding, but I suggest to keep the current code. It is simple and it is tested.
Thanks for trying to come up with a better solution.
Sam