|
@@ -50,12 +50,14 @@ unsigned long corgi_ssp_ads7846_putget(ulong data)
|
|
|
unsigned long ret,flag;
|
|
|
|
|
|
spin_lock_irqsave(&corgi_ssp_lock, flag);
|
|
|
- GPCR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846);
|
|
|
+ if (ssp_machinfo->cs_ads7846 >= 0)
|
|
|
+ GPCR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846);
|
|
|
|
|
|
ssp_write_word(&corgi_ssp_dev,data);
|
|
|
ret = ssp_read_word(&corgi_ssp_dev);
|
|
|
|
|
|
- GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846);
|
|
|
+ if (ssp_machinfo->cs_ads7846 >= 0)
|
|
|
+ GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846);
|
|
|
spin_unlock_irqrestore(&corgi_ssp_lock, flag);
|
|
|
|
|
|
return ret;
|
|
@@ -68,12 +70,14 @@ unsigned long corgi_ssp_ads7846_putget(ulong data)
|
|
|
void corgi_ssp_ads7846_lock(void)
|
|
|
{
|
|
|
spin_lock(&corgi_ssp_lock);
|
|
|
- GPCR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846);
|
|
|
+ if (ssp_machinfo->cs_ads7846 >= 0)
|
|
|
+ GPCR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846);
|
|
|
}
|
|
|
|
|
|
void corgi_ssp_ads7846_unlock(void)
|
|
|
{
|
|
|
- GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846);
|
|
|
+ if (ssp_machinfo->cs_ads7846 >= 0)
|
|
|
+ GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846);
|
|
|
spin_unlock(&corgi_ssp_lock);
|
|
|
}
|
|
|
|
|
@@ -110,11 +114,13 @@ unsigned long corgi_ssp_dac_put(ulong data)
|
|
|
ssp_config(&corgi_ssp_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07 )), sscr1, 0, SSCR0_SerClkDiv(ssp_machinfo->clk_lcdcon));
|
|
|
ssp_enable(&corgi_ssp_dev);
|
|
|
|
|
|
- GPCR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon);
|
|
|
+ if (ssp_machinfo->cs_lcdcon >= 0)
|
|
|
+ GPCR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon);
|
|
|
ssp_write_word(&corgi_ssp_dev,data);
|
|
|
/* Read null data back from device to prevent SSP overflow */
|
|
|
ssp_read_word(&corgi_ssp_dev);
|
|
|
- GPSR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon);
|
|
|
+ if (ssp_machinfo->cs_lcdcon >= 0)
|
|
|
+ GPSR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon);
|
|
|
|
|
|
ssp_disable(&corgi_ssp_dev);
|
|
|
ssp_config(&corgi_ssp_dev, (SSCR0_National | (SSCR0_DSS & 0x0b )), 0, 0, SSCR0_SerClkDiv(ssp_machinfo->clk_ads7846));
|
|
@@ -147,7 +153,8 @@ int corgi_ssp_max1111_get(ulong data)
|
|
|
int voltage,voltage1,voltage2;
|
|
|
|
|
|
spin_lock_irqsave(&corgi_ssp_lock, flag);
|
|
|
- GPCR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111);
|
|
|
+ if (ssp_machinfo->cs_max1111 >= 0)
|
|
|
+ GPCR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111);
|
|
|
ssp_disable(&corgi_ssp_dev);
|
|
|
ssp_config(&corgi_ssp_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07 )), 0, 0, SSCR0_SerClkDiv(ssp_machinfo->clk_max1111));
|
|
|
ssp_enable(&corgi_ssp_dev);
|
|
@@ -169,7 +176,8 @@ int corgi_ssp_max1111_get(ulong data)
|
|
|
ssp_disable(&corgi_ssp_dev);
|
|
|
ssp_config(&corgi_ssp_dev, (SSCR0_National | (SSCR0_DSS & 0x0b )), 0, 0, SSCR0_SerClkDiv(ssp_machinfo->clk_ads7846));
|
|
|
ssp_enable(&corgi_ssp_dev);
|
|
|
- GPSR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111);
|
|
|
+ if (ssp_machinfo->cs_max1111 >= 0)
|
|
|
+ GPSR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111);
|
|
|
spin_unlock_irqrestore(&corgi_ssp_lock, flag);
|
|
|
|
|
|
if (voltage1 & 0xc0 || voltage2 & 0x3f)
|
|
@@ -196,9 +204,12 @@ static int __init corgi_ssp_probe(struct platform_device *dev)
|
|
|
int ret;
|
|
|
|
|
|
/* Chip Select - Disable All */
|
|
|
- pxa_gpio_mode(ssp_machinfo->cs_lcdcon | GPIO_OUT | GPIO_DFLT_HIGH);
|
|
|
- pxa_gpio_mode(ssp_machinfo->cs_max1111 | GPIO_OUT | GPIO_DFLT_HIGH);
|
|
|
- pxa_gpio_mode(ssp_machinfo->cs_ads7846 | GPIO_OUT | GPIO_DFLT_HIGH);
|
|
|
+ if (ssp_machinfo->cs_lcdcon >= 0)
|
|
|
+ pxa_gpio_mode(ssp_machinfo->cs_lcdcon | GPIO_OUT | GPIO_DFLT_HIGH);
|
|
|
+ if (ssp_machinfo->cs_max1111 >= 0)
|
|
|
+ pxa_gpio_mode(ssp_machinfo->cs_max1111 | GPIO_OUT | GPIO_DFLT_HIGH);
|
|
|
+ if (ssp_machinfo->cs_ads7846 >= 0)
|
|
|
+ pxa_gpio_mode(ssp_machinfo->cs_ads7846 | GPIO_OUT | GPIO_DFLT_HIGH);
|
|
|
|
|
|
ret = ssp_init(&corgi_ssp_dev, ssp_machinfo->port, 0);
|
|
|
|
|
@@ -229,9 +240,12 @@ static int corgi_ssp_suspend(struct platform_device *dev, pm_message_t state)
|
|
|
|
|
|
static int corgi_ssp_resume(struct platform_device *dev)
|
|
|
{
|
|
|
- GPSR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon); /* High - Disable LCD Control/Timing Gen */
|
|
|
- GPSR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111); /* High - Disable MAX1111*/
|
|
|
- GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846); /* High - Disable ADS7846*/
|
|
|
+ if (ssp_machinfo->cs_lcdcon >= 0)
|
|
|
+ GPSR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon); /* High - Disable LCD Control/Timing Gen */
|
|
|
+ if (ssp_machinfo->cs_max1111 >= 0)
|
|
|
+ GPSR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111); /* High - Disable MAX1111*/
|
|
|
+ if (ssp_machinfo->cs_ads7846 >= 0)
|
|
|
+ GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846); /* High - Disable ADS7846*/
|
|
|
ssp_restore_state(&corgi_ssp_dev,&corgi_ssp_state);
|
|
|
ssp_enable(&corgi_ssp_dev);
|
|
|
|