This adds support for the CLCD logic cell. It accepts precompiled register values for specific configuration through a board-supplied data structure. It is used by the Nomadik nhk8815, added by a later patch in this series. Signed-off-by: Alessandro Rubini <rubini@unipv.it> Acked-by: Andrea Gallo <andrea.gallo@stericsson.com>master
parent
9b208ece0a
commit
3e446cbdf3
@ -0,0 +1,79 @@ |
|||||||
|
/*
|
||||||
|
* Driver for AMBA PrimeCell CLCD |
||||||
|
* |
||||||
|
* Copyright (C) 2009 Alessandro Rubini |
||||||
|
* |
||||||
|
* See file CREDITS for list of people who contributed to this |
||||||
|
* project. |
||||||
|
* |
||||||
|
* This program is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU General Public License as |
||||||
|
* published by the Free Software Foundation; either version 2 of |
||||||
|
* the License, or (at your option) any later version. |
||||||
|
* |
||||||
|
* This program is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with this program; if not, write to the Free Software |
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||||
|
* MA 02111-1307 USA |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <common.h> |
||||||
|
#include <asm/io.h> |
||||||
|
#include <lcd.h> |
||||||
|
#include <amba_clcd.h> |
||||||
|
|
||||||
|
/* These variables are required by lcd.c -- although it sets them by itself */ |
||||||
|
int lcd_line_length; |
||||||
|
int lcd_color_fg; |
||||||
|
int lcd_color_bg; |
||||||
|
void *lcd_base; |
||||||
|
void *lcd_console_address; |
||||||
|
short console_col; |
||||||
|
short console_row; |
||||||
|
|
||||||
|
/*
|
||||||
|
* To use this driver you need to provide the following in board files: |
||||||
|
* a panel_info definition |
||||||
|
* an lcd_enable function (can't define a weak default with current code) |
||||||
|
*/ |
||||||
|
|
||||||
|
/* There is nothing to do with color registers, we use true color */ |
||||||
|
void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue) |
||||||
|
{ |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
/* Low level initialization of the logic cell: depends on panel_info */ |
||||||
|
void lcd_ctrl_init(void *lcdbase) |
||||||
|
{ |
||||||
|
struct clcd_config *config; |
||||||
|
struct clcd_registers *regs; |
||||||
|
u32 cntl; |
||||||
|
|
||||||
|
config = panel_info.priv; |
||||||
|
regs = config->address; |
||||||
|
cntl = config->cntl & ~CNTL_LCDEN; |
||||||
|
|
||||||
|
/* Lazily, just copy the registers over: first control with disable */ |
||||||
|
writel(cntl, ®s->cntl); |
||||||
|
|
||||||
|
writel(config->tim0, ®s->tim0); |
||||||
|
writel(config->tim1, ®s->tim1); |
||||||
|
writel(config->tim2, ®s->tim2); |
||||||
|
writel(config->tim3, ®s->tim3); |
||||||
|
writel((u32)lcdbase, ®s->ubas); |
||||||
|
/* finally, enable */ |
||||||
|
writel(cntl | CNTL_LCDEN, ®s->cntl); |
||||||
|
} |
||||||
|
|
||||||
|
/* This is trivial, and copied from atmel_lcdfb.c */ |
||||||
|
ulong calc_fbsize(void) |
||||||
|
{ |
||||||
|
return ((panel_info.vl_col * panel_info.vl_row * |
||||||
|
NBITS(panel_info.vl_bpix)) / 8) + PAGE_SIZE; |
||||||
|
} |
@ -0,0 +1,77 @@ |
|||||||
|
/*
|
||||||
|
* Register definitions for the AMBA CLCD logic cell. |
||||||
|
* |
||||||
|
* derived from David A Rusling, although rearranged as a C structure |
||||||
|
* linux/include/asm-arm/hardware/amba_clcd.h -- Integrator LCD panel. |
||||||
|
* |
||||||
|
* Copyright (C) 2001 ARM Limited |
||||||
|
* |
||||||
|
* This file is subject to the terms and conditions of the GNU General Public |
||||||
|
* License. See the file COPYING in the main directory of this archive |
||||||
|
* for more details. |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* CLCD Controller Internal Register addresses |
||||||
|
*/ |
||||||
|
struct clcd_registers { |
||||||
|
u32 tim0; /* 0x00 */ |
||||||
|
u32 tim1; |
||||||
|
u32 tim2; |
||||||
|
u32 tim3; |
||||||
|
u32 ubas; /* 0x10 */ |
||||||
|
u32 lbas; |
||||||
|
#if !defined(CONFIG_ARCH_VERSATILE) && !defined(CONFIG_ARCH_REALVIEW) |
||||||
|
u32 ienb; |
||||||
|
u32 cntl; |
||||||
|
#else /* Someone rearranged these two registers on the Versatile */ |
||||||
|
u32 cntl; |
||||||
|
u32 ienb; |
||||||
|
#endif |
||||||
|
u32 stat; /* 0x20 */ |
||||||
|
u32 intr; |
||||||
|
u32 ucur; |
||||||
|
u32 lcur; |
||||||
|
u32 unused[0x74]; /* 0x030..0x1ff */ |
||||||
|
u32 palette[0x80]; /* 0x200..0x3ff */ |
||||||
|
}; |
||||||
|
|
||||||
|
/* Bit definition for TIM2 */ |
||||||
|
#define TIM2_CLKSEL (1 << 5) |
||||||
|
#define TIM2_IVS (1 << 11) |
||||||
|
#define TIM2_IHS (1 << 12) |
||||||
|
#define TIM2_IPC (1 << 13) |
||||||
|
#define TIM2_IOE (1 << 14) |
||||||
|
#define TIM2_BCD (1 << 26) |
||||||
|
|
||||||
|
/* Bit definitions for control register */ |
||||||
|
#define CNTL_LCDEN (1 << 0) |
||||||
|
#define CNTL_LCDBPP1 (0 << 1) |
||||||
|
#define CNTL_LCDBPP2 (1 << 1) |
||||||
|
#define CNTL_LCDBPP4 (2 << 1) |
||||||
|
#define CNTL_LCDBPP8 (3 << 1) |
||||||
|
#define CNTL_LCDBPP16 (4 << 1) |
||||||
|
#define CNTL_LCDBPP16_565 (6 << 1) |
||||||
|
#define CNTL_LCDBPP24 (5 << 1) |
||||||
|
#define CNTL_LCDBW (1 << 4) |
||||||
|
#define CNTL_LCDTFT (1 << 5) |
||||||
|
#define CNTL_LCDMONO8 (1 << 6) |
||||||
|
#define CNTL_LCDDUAL (1 << 7) |
||||||
|
#define CNTL_BGR (1 << 8) |
||||||
|
#define CNTL_BEBO (1 << 9) |
||||||
|
#define CNTL_BEPO (1 << 10) |
||||||
|
#define CNTL_LCDPWR (1 << 11) |
||||||
|
#define CNTL_LCDVCOMP(x) ((x) << 12) |
||||||
|
#define CNTL_LDMAFIFOTIME (1 << 15) |
||||||
|
#define CNTL_WATERMARK (1 << 16) |
||||||
|
|
||||||
|
/* u-boot specific: information passed by the board file */ |
||||||
|
struct clcd_config { |
||||||
|
struct clcd_registers *address; |
||||||
|
u32 tim0; |
||||||
|
u32 tim1; |
||||||
|
u32 tim2; |
||||||
|
u32 tim3; |
||||||
|
u32 cntl; |
||||||
|
unsigned long pixclock; |
||||||
|
}; |
Loading…
Reference in new issue