summaryrefslogtreecommitdiff
path: root/drivers/staging/fbtft
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/fbtft')
-rw-r--r--drivers/staging/fbtft/Kconfig6
-rw-r--r--drivers/staging/fbtft/README29
-rw-r--r--drivers/staging/fbtft/fb_agm1264k-fl.c2
-rw-r--r--drivers/staging/fbtft/fb_hx8340bn.c8
-rw-r--r--drivers/staging/fbtft/fb_hx8353d.c13
-rw-r--r--drivers/staging/fbtft/fb_hx8357d.c14
-rw-r--r--drivers/staging/fbtft/fb_ili9163.c2
-rw-r--r--drivers/staging/fbtft/fb_ili9340.c12
-rw-r--r--drivers/staging/fbtft/fb_ili9341.c12
-rw-r--r--drivers/staging/fbtft/fb_ili9481.c12
-rw-r--r--drivers/staging/fbtft/fb_ili9486.c12
-rw-r--r--drivers/staging/fbtft/fb_s6d02a1.c12
-rw-r--r--drivers/staging/fbtft/fb_st7735r.c12
-rw-r--r--drivers/staging/fbtft/fb_tinylcd.c14
-rw-r--r--drivers/staging/fbtft/fbtft-core.c13
15 files changed, 20 insertions, 153 deletions
diff --git a/drivers/staging/fbtft/Kconfig b/drivers/staging/fbtft/Kconfig
index 578412a2f379..92943564cb91 100644
--- a/drivers/staging/fbtft/Kconfig
+++ b/drivers/staging/fbtft/Kconfig
@@ -86,7 +86,11 @@ config FB_TFT_PCD8544
config FB_TFT_RA8875
tristate "FB driver for the RA8875 LCD Controller"
help
- Generic Framebuffer support for RA8875
+ This enables generic framebuffer support for the RAiO RA8875
+ display controller. The controller is intended for medium size text/graphic
+ mixed displays with a resolution of up to 800x480 pixels.
+
+ Say Y if you have such a display that utilizes this controller.
config FB_TFT_S6D02A1
tristate "FB driver for the S6D02A1 LCD Controller"
diff --git a/drivers/staging/fbtft/README b/drivers/staging/fbtft/README
index ba4c74c92e4c..91f152d622bd 100644
--- a/drivers/staging/fbtft/README
+++ b/drivers/staging/fbtft/README
@@ -6,27 +6,12 @@ The module 'fbtft' makes writing drivers for some of these displays very easy.
Development is done on a Raspberry Pi running the Raspbian "wheezy" distribution.
-INSTALLATION
- Download kernel sources
+For new hardware support consider using DRM subsystem (see TODO).
- From Linux 3.15
- cd drivers/video/fbdev/fbtft
- git clone https://github.com/notro/fbtft.git
+NOTE:
- Add to drivers/video/fbdev/Kconfig: source "drivers/video/fbdev/fbtft/Kconfig"
- Add to drivers/video/fbdev/Makefile: obj-y += fbtft/
-
- Before Linux 3.15
- cd drivers/video
- git clone https://github.com/notro/fbtft.git
-
- Add to drivers/video/Kconfig: source "drivers/video/fbtft/Kconfig"
- Add to drivers/video/Makefile: obj-y += fbtft/
-
- Enable driver(s) in menuconfig and build the kernel
-
-
-See wiki for more information: https://github.com/notro/fbtft/wiki
-
-
-Source: https://github.com/notro/fbtft/
+The driver is in maintenance mode, only performance issue or bug fixes
+are accepted, which effectively means the patches must be tested on
+the real hardware (the patch must be accompanied with the information
+what hardware is that). The treewide changes may also be accepted as
+an exception.
diff --git a/drivers/staging/fbtft/fb_agm1264k-fl.c b/drivers/staging/fbtft/fb_agm1264k-fl.c
index af2dbebefc72..6fc8f4e9c814 100644
--- a/drivers/staging/fbtft/fb_agm1264k-fl.c
+++ b/drivers/staging/fbtft/fb_agm1264k-fl.c
@@ -376,7 +376,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
/* write bitmap */
gpiod_set_value(par->RS, 1); /* RS->1 (data mode) */
- par->fbtftops.write(par, buf, len);
+ ret = par->fbtftops.write(par, buf, len);
if (ret < 0)
dev_err(par->info->device,
"write failed and returned: %d\n",
diff --git a/drivers/staging/fbtft/fb_hx8340bn.c b/drivers/staging/fbtft/fb_hx8340bn.c
index 2fd7b87ea0ce..ca27914f1412 100644
--- a/drivers/staging/fbtft/fb_hx8340bn.c
+++ b/drivers/staging/fbtft/fb_hx8340bn.c
@@ -106,13 +106,6 @@ static int init_display(struct fbtft_par *par)
return 0;
}
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS, 0x00, xs, 0x00, xe);
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS, 0x00, ys, 0x00, ye);
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
static int set_var(struct fbtft_par *par)
{
/* MADCTL - Memory data access control */
@@ -207,7 +200,6 @@ static struct fbtft_display display = {
.gamma = DEFAULT_GAMMA,
.fbtftops = {
.init_display = init_display,
- .set_addr_win = set_addr_win,
.set_var = set_var,
.set_gamma = set_gamma,
},
diff --git a/drivers/staging/fbtft/fb_hx8353d.c b/drivers/staging/fbtft/fb_hx8353d.c
index 3e73b69b6a27..f6cd82df4da6 100644
--- a/drivers/staging/fbtft/fb_hx8353d.c
+++ b/drivers/staging/fbtft/fb_hx8353d.c
@@ -61,18 +61,6 @@ static int init_display(struct fbtft_par *par)
return 0;
};
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- /* column address */
- write_reg(par, 0x2a, xs >> 8, xs & 0xff, xe >> 8, xe & 0xff);
-
- /* Row address */
- write_reg(par, 0x2b, ys >> 8, ys & 0xff, ye >> 8, ye & 0xff);
-
- /* memory write */
- write_reg(par, 0x2c);
-}
-
#define my BIT(7)
#define mx BIT(6)
#define mv BIT(5)
@@ -130,7 +118,6 @@ static struct fbtft_display display = {
.gamma = DEFAULT_GAMMA,
.fbtftops = {
.init_display = init_display,
- .set_addr_win = set_addr_win,
.set_var = set_var,
.set_gamma = set_gamma,
},
diff --git a/drivers/staging/fbtft/fb_hx8357d.c b/drivers/staging/fbtft/fb_hx8357d.c
index 94a357e8fdf6..7b9f020a956f 100644
--- a/drivers/staging/fbtft/fb_hx8357d.c
+++ b/drivers/staging/fbtft/fb_hx8357d.c
@@ -129,19 +129,6 @@ static int init_display(struct fbtft_par *par)
return 0;
}
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
- xs >> 8, xs & 0xff, /* XSTART */
- xe >> 8, xe & 0xff); /* XEND */
-
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
- ys >> 8, ys & 0xff, /* YSTART */
- ye >> 8, ye & 0xff); /* YEND */
-
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
#define HX8357D_MADCTL_MY 0x80
#define HX8357D_MADCTL_MX 0x40
#define HX8357D_MADCTL_MV 0x20
@@ -184,7 +171,6 @@ static struct fbtft_display display = {
.gamma_len = 14,
.fbtftops = {
.init_display = init_display,
- .set_addr_win = set_addr_win,
.set_var = set_var,
},
};
diff --git a/drivers/staging/fbtft/fb_ili9163.c b/drivers/staging/fbtft/fb_ili9163.c
index 6582a2c90aaf..a2b5033a9860 100644
--- a/drivers/staging/fbtft/fb_ili9163.c
+++ b/drivers/staging/fbtft/fb_ili9163.c
@@ -60,7 +60,7 @@
* configure to constrain the memory and resolution to a fixed dimension (in
* that case 128x128) but they leaved those pins configured for 128x160 so
* there was several pixel memory addressing problems.
- * I solved by setup several parameters that dinamically fix the resolution as
+ * I solved by setup several parameters that dynamically fix the resolution as
* needit so below the parameters for this display. If you have a strain or a
* correct display (can happen with chinese) you can copy those parameters and
* create setup for different displays.
diff --git a/drivers/staging/fbtft/fb_ili9340.c b/drivers/staging/fbtft/fb_ili9340.c
index 704236bcaf3f..023d8cb96f95 100644
--- a/drivers/staging/fbtft/fb_ili9340.c
+++ b/drivers/staging/fbtft/fb_ili9340.c
@@ -78,17 +78,6 @@ static int init_display(struct fbtft_par *par)
return 0;
}
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
- xs >> 8, xs & 0xFF, xe >> 8, xe & 0xFF);
-
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
- ys >> 8, ys & 0xFF, ye >> 8, ye & 0xFF);
-
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
#define ILI9340_MADCTL_MV 0x20
#define ILI9340_MADCTL_MX 0x40
#define ILI9340_MADCTL_MY 0x80
@@ -122,7 +111,6 @@ static struct fbtft_display display = {
.height = HEIGHT,
.fbtftops = {
.init_display = init_display,
- .set_addr_win = set_addr_win,
.set_var = set_var,
},
};
diff --git a/drivers/staging/fbtft/fb_ili9341.c b/drivers/staging/fbtft/fb_ili9341.c
index 47e72b87d76d..428922dee9f9 100644
--- a/drivers/staging/fbtft/fb_ili9341.c
+++ b/drivers/staging/fbtft/fb_ili9341.c
@@ -65,17 +65,6 @@ static int init_display(struct fbtft_par *par)
return 0;
}
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
- (xs >> 8) & 0xFF, xs & 0xFF, (xe >> 8) & 0xFF, xe & 0xFF);
-
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
- (ys >> 8) & 0xFF, ys & 0xFF, (ye >> 8) & 0xFF, ye & 0xFF);
-
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
#define MEM_Y BIT(7) /* MY row address order */
#define MEM_X BIT(6) /* MX column address order */
#define MEM_V BIT(5) /* MV row / column exchange */
@@ -139,7 +128,6 @@ static struct fbtft_display display = {
.gamma = DEFAULT_GAMMA,
.fbtftops = {
.init_display = init_display,
- .set_addr_win = set_addr_win,
.set_var = set_var,
.set_gamma = set_gamma,
},
diff --git a/drivers/staging/fbtft/fb_ili9481.c b/drivers/staging/fbtft/fb_ili9481.c
index 19eba085ea53..5f31b5d5590f 100644
--- a/drivers/staging/fbtft/fb_ili9481.c
+++ b/drivers/staging/fbtft/fb_ili9481.c
@@ -42,17 +42,6 @@ static const s16 default_init_sequence[] = {
-3
};
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
- xs >> 8, xs & 0xff, xe >> 8, xe & 0xff);
-
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
- ys >> 8, ys & 0xff, ye >> 8, ye & 0xff);
-
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
#define HFLIP 0x01
#define VFLIP 0x02
#define ROW_X_COL 0x20
@@ -86,7 +75,6 @@ static struct fbtft_display display = {
.height = HEIGHT,
.init_sequence = default_init_sequence,
.fbtftops = {
- .set_addr_win = set_addr_win,
.set_var = set_var,
},
};
diff --git a/drivers/staging/fbtft/fb_ili9486.c b/drivers/staging/fbtft/fb_ili9486.c
index 66210a7137fc..a4d699ef57e4 100644
--- a/drivers/staging/fbtft/fb_ili9486.c
+++ b/drivers/staging/fbtft/fb_ili9486.c
@@ -43,17 +43,6 @@ static const s16 default_init_sequence[] = {
-3
};
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
- xs >> 8, xs & 0xFF, xe >> 8, xe & 0xFF);
-
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
- ys >> 8, ys & 0xFF, ye >> 8, ye & 0xFF);
-
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
static int set_var(struct fbtft_par *par)
{
switch (par->info->var.rotate) {
@@ -86,7 +75,6 @@ static struct fbtft_display display = {
.height = HEIGHT,
.init_sequence = default_init_sequence,
.fbtftops = {
- .set_addr_win = set_addr_win,
.set_var = set_var,
},
};
diff --git a/drivers/staging/fbtft/fb_s6d02a1.c b/drivers/staging/fbtft/fb_s6d02a1.c
index d3d6871d8c47..d8ddc804d626 100644
--- a/drivers/staging/fbtft/fb_s6d02a1.c
+++ b/drivers/staging/fbtft/fb_s6d02a1.c
@@ -97,17 +97,6 @@ static const s16 default_init_sequence[] = {
};
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
- xs >> 8, xs & 0xFF, xe >> 8, xe & 0xFF);
-
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
- ys >> 8, ys & 0xFF, ye >> 8, ye & 0xFF);
-
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
#define MY BIT(7)
#define MX BIT(6)
#define MV BIT(5)
@@ -149,7 +138,6 @@ static struct fbtft_display display = {
.height = 160,
.init_sequence = default_init_sequence,
.fbtftops = {
- .set_addr_win = set_addr_win,
.set_var = set_var,
},
};
diff --git a/drivers/staging/fbtft/fb_st7735r.c b/drivers/staging/fbtft/fb_st7735r.c
index 9670a8989b91..6d9735fa2332 100644
--- a/drivers/staging/fbtft/fb_st7735r.c
+++ b/drivers/staging/fbtft/fb_st7735r.c
@@ -83,17 +83,6 @@ static const s16 default_init_sequence[] = {
-3
};
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
- xs >> 8, xs & 0xFF, xe >> 8, xe & 0xFF);
-
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
- ys >> 8, ys & 0xFF, ye >> 8, ye & 0xFF);
-
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
#define MY BIT(7)
#define MX BIT(6)
#define MV BIT(5)
@@ -168,7 +157,6 @@ static struct fbtft_display display = {
.gamma_len = 16,
.gamma = DEFAULT_GAMMA,
.fbtftops = {
- .set_addr_win = set_addr_win,
.set_var = set_var,
.set_gamma = set_gamma,
},
diff --git a/drivers/staging/fbtft/fb_tinylcd.c b/drivers/staging/fbtft/fb_tinylcd.c
index 9469248f2c50..afa8f1c740c5 100644
--- a/drivers/staging/fbtft/fb_tinylcd.c
+++ b/drivers/staging/fbtft/fb_tinylcd.c
@@ -41,23 +41,12 @@ static int init_display(struct fbtft_par *par)
0x00, 0x35, 0x33, 0x00, 0x00, 0x00);
write_reg(par, MIPI_DCS_SET_PIXEL_FORMAT, 0x55);
write_reg(par, MIPI_DCS_EXIT_SLEEP_MODE);
- udelay(250);
+ fsleep(250);
write_reg(par, MIPI_DCS_SET_DISPLAY_ON);
return 0;
}
-static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
-{
- write_reg(par, MIPI_DCS_SET_COLUMN_ADDRESS,
- xs >> 8, xs & 0xFF, xe >> 8, xe & 0xFF);
-
- write_reg(par, MIPI_DCS_SET_PAGE_ADDRESS,
- ys >> 8, ys & 0xFF, ye >> 8, ye & 0xFF);
-
- write_reg(par, MIPI_DCS_WRITE_MEMORY_START);
-}
-
static int set_var(struct fbtft_par *par)
{
switch (par->info->var.rotate) {
@@ -88,7 +77,6 @@ static struct fbtft_display display = {
.height = HEIGHT,
.fbtftops = {
.init_display = init_display,
- .set_addr_win = set_addr_win,
.set_var = set_var,
},
};
diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c
index f427c0914907..3da42c8ca6e3 100644
--- a/drivers/staging/fbtft/fbtft-core.c
+++ b/drivers/staging/fbtft/fbtft-core.c
@@ -300,12 +300,6 @@ static void fbtft_mkdirty(struct fb_info *info, int y, int height)
struct fbtft_par *par = info->par;
struct fb_deferred_io *fbdefio = info->fbdefio;
- /* special case, needed ? */
- if (y == -1) {
- y = 0;
- height = info->var.yres;
- }
-
/* Mark display lines/area as dirty */
spin_lock(&par->dirty_lock);
if (y < par->dirty_lines_start)
@@ -413,9 +407,12 @@ static int fbtft_fb_blank(int blank, struct fb_info *info)
static void fbtft_ops_damage_range(struct fb_info *info, off_t off, size_t len)
{
struct fbtft_par *par = info->par;
+ u32 start, end;
+
+ start = off / info->fix.line_length;
+ end = (off + len - 1) / info->fix.line_length;
- /* TODO: only mark changed area update all for now */
- par->fbtftops.mkdirty(info, -1, 0);
+ par->fbtftops.mkdirty(info, start, end - start + 1);
}
static void fbtft_ops_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height)