Re: [PATCH 2/5] auxdisplay: charlcd: add flush function

2018-02-13 Thread Andy Shevchenko
On Mon, Feb 12, 2018 at 10:44 PM, Miguel Ojeda
 wrote:
> On Mon, Jan 15, 2018 at 10:58 AM, Sean Young  wrote:
>> The Sasem Remote Controller has an LCD, which is connnected via usb.
>> Multiple write reg or write data commands can be combined into one usb
>> packet.
>>
>> The latency of usb is such that if we send commands one by one, we get
>> very obvious tearing on the LCD.
>>
>> By adding a flush function, we can buffer all commands until either
>> the usb packet is full or the lcd changes are complete.

> Cc'ing Arnd and Greg since this touches include/misc as well.

>> --- a/include/misc/charlcd.h
>> +++ b/include/misc/charlcd.h

As far as I can see better to create a subfolder under include for
auxdisplay stuff.
Currently we have three candidates here:
linux/cfag12864b.h
linux/ks0108.h
misc/charlcd.h

Another possibility to get rid of them under include/ by (re)moving to
drivers/auxdisplay/.

-- 
With Best Regards,
Andy Shevchenko


Re: [PATCH 2/5] auxdisplay: charlcd: add flush function

2018-02-12 Thread Miguel Ojeda
On Mon, Jan 15, 2018 at 10:58 AM, Sean Young  wrote:
> The Sasem Remote Controller has an LCD, which is connnected via usb.
> Multiple write reg or write data commands can be combined into one usb
> packet.
>
> The latency of usb is such that if we send commands one by one, we get
> very obvious tearing on the LCD.
>
> By adding a flush function, we can buffer all commands until either
> the usb packet is full or the lcd changes are complete.
>
> Signed-off-by: Sean Young 
> ---
>  drivers/auxdisplay/charlcd.c | 6 ++

Cc'ing Arnd and Greg since this touches include/misc as well.

Miguel

>  include/misc/charlcd.h   | 1 +
>  2 files changed, 7 insertions(+)
>
> diff --git a/drivers/auxdisplay/charlcd.c b/drivers/auxdisplay/charlcd.c
> index 45ec5ce697c4..a16c72779722 100644
> --- a/drivers/auxdisplay/charlcd.c
> +++ b/drivers/auxdisplay/charlcd.c
> @@ -642,6 +642,9 @@ static ssize_t charlcd_write(struct file *file, const 
> char __user *buf,
> charlcd_write_char(the_charlcd, c);
> }
>
> +   if (the_charlcd->ops->flush)
> +   the_charlcd->ops->flush(the_charlcd);
> +
> return tmp - buf;
>  }
>
> @@ -703,6 +706,9 @@ static void charlcd_puts(struct charlcd *lcd, const char 
> *s)
>
> charlcd_write_char(lcd, *tmp);
> }
> +
> +   if (lcd->ops->flush)
> +   lcd->ops->flush(lcd);
>  }
>
>  /* initialize the LCD driver */
> diff --git a/include/misc/charlcd.h b/include/misc/charlcd.h
> index 23f61850f363..ff8fd456018e 100644
> --- a/include/misc/charlcd.h
> +++ b/include/misc/charlcd.h
> @@ -32,6 +32,7 @@ struct charlcd_ops {
> void (*write_cmd_raw4)(struct charlcd *lcd, int cmd);   /* 4-bit only 
> */
> void (*clear_fast)(struct charlcd *lcd);
> void (*backlight)(struct charlcd *lcd, int on);
> +   void (*flush)(struct charlcd *lcd);
>  };
>
>  struct charlcd *charlcd_alloc(unsigned int drvdata_size);
> --
> 2.14.3
>


[PATCH 2/5] auxdisplay: charlcd: add flush function

2018-01-15 Thread Sean Young
The Sasem Remote Controller has an LCD, which is connnected via usb.
Multiple write reg or write data commands can be combined into one usb
packet.

The latency of usb is such that if we send commands one by one, we get
very obvious tearing on the LCD.

By adding a flush function, we can buffer all commands until either
the usb packet is full or the lcd changes are complete.

Signed-off-by: Sean Young 
---
 drivers/auxdisplay/charlcd.c | 6 ++
 include/misc/charlcd.h   | 1 +
 2 files changed, 7 insertions(+)

diff --git a/drivers/auxdisplay/charlcd.c b/drivers/auxdisplay/charlcd.c
index 45ec5ce697c4..a16c72779722 100644
--- a/drivers/auxdisplay/charlcd.c
+++ b/drivers/auxdisplay/charlcd.c
@@ -642,6 +642,9 @@ static ssize_t charlcd_write(struct file *file, const char 
__user *buf,
charlcd_write_char(the_charlcd, c);
}
 
+   if (the_charlcd->ops->flush)
+   the_charlcd->ops->flush(the_charlcd);
+
return tmp - buf;
 }
 
@@ -703,6 +706,9 @@ static void charlcd_puts(struct charlcd *lcd, const char *s)
 
charlcd_write_char(lcd, *tmp);
}
+
+   if (lcd->ops->flush)
+   lcd->ops->flush(lcd);
 }
 
 /* initialize the LCD driver */
diff --git a/include/misc/charlcd.h b/include/misc/charlcd.h
index 23f61850f363..ff8fd456018e 100644
--- a/include/misc/charlcd.h
+++ b/include/misc/charlcd.h
@@ -32,6 +32,7 @@ struct charlcd_ops {
void (*write_cmd_raw4)(struct charlcd *lcd, int cmd);   /* 4-bit only */
void (*clear_fast)(struct charlcd *lcd);
void (*backlight)(struct charlcd *lcd, int on);
+   void (*flush)(struct charlcd *lcd);
 };
 
 struct charlcd *charlcd_alloc(unsigned int drvdata_size);
-- 
2.14.3