Commit 592dd383 authored by John Lenz's avatar John Lenz Committed by Russell King

[ARM PATCH] 2460/1: fix up resource usage on locomo

Patch from John Lenz

Add the list of devices on the locomo chip, and change around
how resources and struct resource are used.  There is only one
struct resource for the entire locomo, but each driver will
call request_mem_region on the pieces it is using.
Secondly, add a few helper functions to locomo.c to control
GPIOs and DAC.

Signed-off-by: John Lenz
Signed-off-by: Russell King
parent 4a550694
This diff is collapsed.
...@@ -35,146 +35,139 @@ ...@@ -35,146 +35,139 @@
#define LOCOMO_MCSX3 0x1c #define LOCOMO_MCSX3 0x1c
/* Touch panel controller */ /* Touch panel controller */
#define LOCOMO_ASD 0x20 /* AD start delay */ #define LOCOMO_ASD 0x20 /* AD start delay */
#define LOCOMO_HSD 0x28 /* HSYS delay */ #define LOCOMO_HSD 0x28 /* HSYS delay */
#define LOCOMO_HSC 0x2c /* HSYS period */ #define LOCOMO_HSC 0x2c /* HSYS period */
#define LOCOMO_TADC 0x30 /* tablet ADC clock */ #define LOCOMO_TADC 0x30 /* tablet ADC clock */
/* TFT signal */
#define LOCOMO_TC 0x38 /* TFT control signal */
#define LOCOMO_CPSD 0x3c /* CPS delay */
/* Key controller */
#define LOCOMO_KIB 0x40 /* KIB level */
#define LOCOMO_KSC 0x44 /* KSTRB control */
#define LOCOMO_KCMD 0x48 /* KSTRB command */
#define LOCOMO_KIC 0x4c /* Key interrupt */
/* Audio clock */
#define LOCOMO_ACC 0x54
/* SPI interface */
#define LOCOMO_SPIMD 0x60 /* SPI mode setting */
#define LOCOMO_SPICT 0x64 /* SPI mode control */
#define LOCOMO_SPIST 0x68 /* SPI status */
#define LOCOMO_SPIIS 0x70 /* SPI interrupt status */
#define LOCOMO_SPIWE 0x74 /* SPI interrupt status write enable */
#define LOCOMO_SPIIE 0x78 /* SPI interrupt enable */
#define LOCOMO_SPIIR 0x7c /* SPI interrupt request */
#define LOCOMO_SPITD 0x80 /* SPI transfer data write */
#define LOCOMO_SPIRD 0x84 /* SPI receive data read */
#define LOCOMO_SPITS 0x88 /* SPI transfer data shift */
#define LOCOMO_SPIRS 0x8C /* SPI receive data shift */
#define LOCOMO_SPI_TEND (1 << 3) /* Transfer end bit */
#define LOCOMO_SPI_OVRN (1 << 2) /* Over Run bit */
#define LOCOMO_SPI_RFW (1 << 1) /* write buffer bit */
#define LOCOMO_SPI_RFR (1) /* read buffer bit */
/* GPIO */
#define LOCOMO_GPD 0x90 /* GPIO direction */
#define LOCOMO_GPE 0x94 /* GPIO input enable */
#define LOCOMO_GPL 0x98 /* GPIO level */
#define LOCOMO_GPO 0x9c /* GPIO out data setteing */
#define LOCOMO_GRIE 0xa0 /* GPIO rise detection */
#define LOCOMO_GFIE 0xa4 /* GPIO fall detection */
#define LOCOMO_GIS 0xa8 /* GPIO edge detection status */
#define LOCOMO_GWE 0xac /* GPIO status write enable */
#define LOCOMO_GIE 0xb0 /* GPIO interrupt enable */
#define LOCOMO_GIR 0xb4 /* GPIO interrupt request */
#define LOCOMO_GPIO0 (1<<0)
#define LOCOMO_GPIO1 (1<<1)
#define LOCOMO_GPIO2 (1<<2)
#define LOCOMO_GPIO3 (1<<3)
#define LOCOMO_GPIO4 (1<<4)
#define LOCOMO_GPIO5 (1<<5)
#define LOCOMO_GPIO6 (1<<6)
#define LOCOMO_GPIO7 (1<<7)
#define LOCOMO_GPIO8 (1<<8)
#define LOCOMO_GPIO9 (1<<9)
#define LOCOMO_GPIO10 (1<<10)
#define LOCOMO_GPIO11 (1<<11)
#define LOCOMO_GPIO12 (1<<12)
#define LOCOMO_GPIO13 (1<<13)
#define LOCOMO_GPIO14 (1<<14)
#define LOCOMO_GPIO15 (1<<15)
/* Front light adjustment controller */
#define LOCOMO_ALS 0xc8 /* Adjust light cycle */
#define LOCOMO_ALD 0xcc /* Adjust light duty */
/* PCM audio interface */
#define LOCOMO_PAIF 0xd0
/* Long time timer */ /* Long time timer */
#define LOCOMO_LTC 0xd8 /* LTC interrupt setting */ #define LOCOMO_LTC 0xd8 /* LTC interrupt setting */
#define LOCOMO_LTINT 0xdc /* LTC interrupt */ #define LOCOMO_LTINT 0xdc /* LTC interrupt */
/* DAC control signal for LCD (COMADJ ) */ /* DAC control signal for LCD (COMADJ ) */
#define LOCOMO_DAC 0xe0 #define LOCOMO_DAC 0xe0
/* DAC control */ /* DAC control */
#define LOCOMO_DAC_SCLOEB 0x08 /* SCL pin output data */ #define LOCOMO_DAC_SCLOEB 0x08 /* SCL pin output data */
#define LOCOMO_DAC_TEST 0x04 /* Test bit */ #define LOCOMO_DAC_TEST 0x04 /* Test bit */
#define LOCOMO_DAC_SDA 0x02 /* SDA pin level (read-only) */ #define LOCOMO_DAC_SDA 0x02 /* SDA pin level (read-only) */
#define LOCOMO_DAC_SDAOEB 0x01 /* SDA pin output data */ #define LOCOMO_DAC_SDAOEB 0x01 /* SDA pin output data */
/* LED controller */ /* SPI interface */
#define LOCOMO_LPT0 0xe8 /* LEDPWM0 timer */ #define LOCOMO_SPIMD 0x60 /* SPI mode setting */
#define LOCOMO_LPT1 0xec /* LEDPWM1 timer */ #define LOCOMO_SPICT 0x64 /* SPI mode control */
#define LOCOMO_SPIST 0x68 /* SPI status */
#define LOCOMO_SPIIS 0x70 /* SPI interrupt status */
#define LOCOMO_SPIWE 0x74 /* SPI interrupt status write enable */
#define LOCOMO_SPIIE 0x78 /* SPI interrupt enable */
#define LOCOMO_SPIIR 0x7c /* SPI interrupt request */
#define LOCOMO_SPITD 0x80 /* SPI transfer data write */
#define LOCOMO_SPIRD 0x84 /* SPI receive data read */
#define LOCOMO_SPITS 0x88 /* SPI transfer data shift */
#define LOCOMO_SPIRS 0x8C /* SPI receive data shift */
#define LOCOMO_SPI_TEND (1 << 3) /* Transfer end bit */
#define LOCOMO_SPI_OVRN (1 << 2) /* Over Run bit */
#define LOCOMO_SPI_RFW (1 << 1) /* write buffer bit */
#define LOCOMO_SPI_RFR (1) /* read buffer bit */
#define LOCOMO_LPT_TOFH 0x80 /* */ /* GPIO */
#define LOCOMO_LPT_TOFL 0x08 /* */ #define LOCOMO_GPD 0x90 /* GPIO direction */
#define LOCOMO_LPT_TOH(TOH) ((TOH & 0x7) << 4) /* */ #define LOCOMO_GPE 0x94 /* GPIO input enable */
#define LOCOMO_LPT_TOL(TOL) ((TOL & 0x7)) /* */ #define LOCOMO_GPL 0x98 /* GPIO level */
#define LOCOMO_GPO 0x9c /* GPIO out data setteing */
#define LOCOMO_GRIE 0xa0 /* GPIO rise detection */
#define LOCOMO_GFIE 0xa4 /* GPIO fall detection */
#define LOCOMO_GIS 0xa8 /* GPIO edge detection status */
#define LOCOMO_GWE 0xac /* GPIO status write enable */
#define LOCOMO_GIE 0xb0 /* GPIO interrupt enable */
#define LOCOMO_GIR 0xb4 /* GPIO interrupt request */
#define LOCOMO_GPIO(Nb) (0x01 << (Nb))
#define LOCOMO_GPIO_RTS LOCOMO_GPIO(0)
#define LOCOMO_GPIO_CTS LOCOMO_GPIO(1)
#define LOCOMO_GPIO_DSR LOCOMO_GPIO(2)
#define LOCOMO_GPIO_DTR LOCOMO_GPIO(3)
#define LOCOMO_GPIO_LCD_VSHA_ON LOCOMO_GPIO(4)
#define LOCOMO_GPIO_LCD_VSHD_ON LOCOMO_GPIO(5)
#define LOCOMO_GPIO_LCD_VEE_ON LOCOMO_GPIO(6)
#define LOCOMO_GPIO_LCD_MOD LOCOMO_GPIO(7)
#define LOCOMO_GPIO_DAC_ON LOCOMO_GPIO(8)
#define LOCOMO_GPIO_FL_VR LOCOMO_GPIO(9)
#define LOCOMO_GPIO_DAC_SDATA LOCOMO_GPIO(10)
#define LOCOMO_GPIO_DAC_SCK LOCOMO_GPIO(11)
#define LOCOMO_GPIO_DAC_SLOAD LOCOMO_GPIO(12)
/* Start the definitions of the devices. Each device has an initial
* base address and a series of offsets from that base address. */
/* Keyboard controller */
#define LOCOMO_KEYBOARD 0x40
#define LOCOMO_KIB 0x00 /* KIB level */
#define LOCOMO_KSC 0x04 /* KSTRB control */
#define LOCOMO_KCMD 0x08 /* KSTRB command */
#define LOCOMO_KIC 0x0c /* Key interrupt */
/* Front light adjustment controller */
#define LOCOMO_FRONTLIGHT 0xc8
#define LOCOMO_ALS 0x00 /* Adjust light cycle */
#define LOCOMO_ALD 0x04 /* Adjust light duty */
/* Backlight controller: TFT signal */
#define LOCOMO_BACKLIGHT 0x38
#define LOCOMO_TC 0x00 /* TFT control signal */
#define LOCOMO_CPSD 0x04 /* CPS delay */
/* Audio controller */
#define LOCOMO_AUDIO 0x54
#define LOCOMO_ACC 0x00 /* Audio clock */
#define LOCOMO_PAIF 0x7C /* PCM audio interface */
/* Audio clock */ /* Audio clock */
#define LOCOMO_ACC_XON 0x80 /* */ #define LOCOMO_ACC_XON 0x80
#define LOCOMO_ACC_XEN 0x40 /* */ #define LOCOMO_ACC_XEN 0x40
#define LOCOMO_ACC_XSEL0 0x00 /* */ #define LOCOMO_ACC_XSEL0 0x00
#define LOCOMO_ACC_XSEL1 0x20 /* */ #define LOCOMO_ACC_XSEL1 0x20
#define LOCOMO_ACC_MCLKEN 0x10 /* */ #define LOCOMO_ACC_MCLKEN 0x10
#define LOCOMO_ACC_64FSEN 0x08 /* */ #define LOCOMO_ACC_64FSEN 0x08
#define LOCOMO_ACC_CLKSEL000 0x00 /* mclk 2 */ #define LOCOMO_ACC_CLKSEL000 0x00 /* mclk 2 */
#define LOCOMO_ACC_CLKSEL001 0x01 /* mclk 3 */ #define LOCOMO_ACC_CLKSEL001 0x01 /* mclk 3 */
#define LOCOMO_ACC_CLKSEL010 0x02 /* mclk 4 */ #define LOCOMO_ACC_CLKSEL010 0x02 /* mclk 4 */
#define LOCOMO_ACC_CLKSEL011 0x03 /* mclk 6 */ #define LOCOMO_ACC_CLKSEL011 0x03 /* mclk 6 */
#define LOCOMO_ACC_CLKSEL100 0x04 /* mclk 8 */ #define LOCOMO_ACC_CLKSEL100 0x04 /* mclk 8 */
#define LOCOMO_ACC_CLKSEL101 0x05 /* mclk 12 */ #define LOCOMO_ACC_CLKSEL101 0x05 /* mclk 12 */
/* PCM audio interface */ /* PCM audio interface */
#define LOCOMO_PAIF_SCINV 0x20 /* */ #define LOCOMO_PAIF_SCINV 0x20
#define LOCOMO_PAIF_SCEN 0x10 /* */ #define LOCOMO_PAIF_SCEN 0x10
#define LOCOMO_PAIF_LRCRST 0x08 /* */ #define LOCOMO_PAIF_LRCRST 0x08
#define LOCOMO_PAIF_LRCEVE 0x04 /* */ #define LOCOMO_PAIF_LRCEVE 0x04
#define LOCOMO_PAIF_LRCINV 0x02 /* */ #define LOCOMO_PAIF_LRCINV 0x02
#define LOCOMO_PAIF_LRCEN 0x01 /* */ #define LOCOMO_PAIF_LRCEN 0x01
/* GPIO */ /* LED controller */
#define LOCOMO_GPIO(Nb) (0x01 << (Nb)) /* LoCoMo GPIO [0...15] */ #define LOCOMO_LED 0xe8
#define LOCOMO_GPIO_RTS LOCOMO_GPIO(0) /* LoCoMo GPIO [0] */ #define LOCOMO_LPT0 0x00
#define LOCOMO_GPIO_CTS LOCOMO_GPIO(1) /* LoCoMo GPIO [1] */ #define LOCOMO_LPT1 0x04
#define LOCOMO_GPIO_DSR LOCOMO_GPIO(2) /* LoCoMo GPIO [2] */ /* LED control */
#define LOCOMO_GPIO_DTR LOCOMO_GPIO(3) /* LoCoMo GPIO [3] */ #define LOCOMO_LPT_TOFH 0x80
#define LOCOMO_GPIO_LCD_VSHA_ON LOCOMO_GPIO(4) /* LoCoMo GPIO [4] */ #define LOCOMO_LPT_TOFL 0x08
#define LOCOMO_GPIO_LCD_VSHD_ON LOCOMO_GPIO(5) /* LoCoMo GPIO [5] */ #define LOCOMO_LPT_TOH(TOH) ((TOH & 0x7) << 4)
#define LOCOMO_GPIO_LCD_VEE_ON LOCOMO_GPIO(6) /* LoCoMo GPIO [6] */ #define LOCOMO_LPT_TOL(TOL) ((TOL & 0x7))
#define LOCOMO_GPIO_LCD_MOD LOCOMO_GPIO(7) /* LoCoMo GPIO [7] */
#define LOCOMO_GPIO_DAC_ON LOCOMO_GPIO(8) /* LoCoMo GPIO [8] */
#define LOCOMO_GPIO_FL_VR LOCOMO_GPIO(9) /* LoCoMo GPIO [9] */
#define LOCOMO_GPIO_DAC_SDATA LOCOMO_GPIO(10) /* LoCoMo GPIO [10] */
#define LOCOMO_GPIO_DAC_SCK LOCOMO_GPIO(11) /* LoCoMo GPIO [11] */
#define LOCOMO_GPIO_DAC_SLOAD LOCOMO_GPIO(12) /* LoCoMo GPIO [12] */
extern struct bus_type locomo_bus_type; extern struct bus_type locomo_bus_type;
#define LOCOMO_DEVID_KEYBOARD 0
#define LOCOMO_DEVID_FRONTLIGHT 1
#define LOCOMO_DEVID_BACKLIGHT 2
#define LOCOMO_DEVID_AUDIO 3
#define LOCOMO_DEVID_LED 4
#define LOCOMO_DEVID_UART 5
struct locomo_dev { struct locomo_dev {
struct device dev; struct device dev;
unsigned int devid; unsigned int devid;
struct resource res;
void *mapbase;
unsigned int irq[1]; unsigned int irq[1];
void *mapbase;
unsigned long length;
u64 dma_mask; u64 dma_mask;
}; };
...@@ -201,4 +194,13 @@ void locomo_lcd_power(struct locomo_dev *, int, unsigned int); ...@@ -201,4 +194,13 @@ void locomo_lcd_power(struct locomo_dev *, int, unsigned int);
int locomo_driver_register(struct locomo_driver *); int locomo_driver_register(struct locomo_driver *);
void locomo_driver_unregister(struct locomo_driver *); void locomo_driver_unregister(struct locomo_driver *);
/* GPIO control functions */
void locomo_gpio_set_dir(struct locomo_dev *ldev, unsigned int bits, unsigned int dir);
unsigned int locomo_gpio_read_level(struct locomo_dev *ldev, unsigned int bits);
unsigned int locomo_gpio_read_output(struct locomo_dev *ldev, unsigned int bits);
void locomo_gpio_write(struct locomo_dev *ldev, unsigned int bits, unsigned int set);
/* M62332 control function */
void locomo_m62332_senddata(struct locomo_dev *ldev, unsigned int dac_data, int channel);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment