]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-pxa/generic.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[linux-2.6-omap-h63xx.git] / arch / arm / mach-pxa / generic.c
index 1c5413fc6e74ad5e5a6127066759f491306859f1..1c34946ee16e60c0fb3f6ff6491efc276455e108 100644 (file)
@@ -51,8 +51,10 @@ unsigned int get_clk_frequency_khz(int info)
 {
        if (cpu_is_pxa21x() || cpu_is_pxa25x())
                return pxa25x_get_clk_frequency_khz(info);
-       else
+       else if (cpu_is_pxa27x())
                return pxa27x_get_clk_frequency_khz(info);
+       else
+               return pxa3xx_get_clk_frequency_khz(info);
 }
 EXPORT_SYMBOL(get_clk_frequency_khz);
 
@@ -63,14 +65,17 @@ unsigned int get_memclk_frequency_10khz(void)
 {
        if (cpu_is_pxa21x() || cpu_is_pxa25x())
                return pxa25x_get_memclk_frequency_10khz();
-       else
+       else if (cpu_is_pxa27x())
                return pxa27x_get_memclk_frequency_10khz();
+       else
+               return pxa3xx_get_memclk_frequency_10khz();
 }
 EXPORT_SYMBOL(get_memclk_frequency_10khz);
 
 /*
  * Handy function to set GPIO alternate functions
  */
+int pxa_last_gpio;
 
 int pxa_gpio_mode(int gpio_mode)
 {
@@ -79,7 +84,7 @@ int pxa_gpio_mode(int gpio_mode)
        int fn = (gpio_mode & GPIO_MD_MASK_FN) >> 8;
        int gafr;
 
-       if (gpio > PXA_LAST_GPIO)
+       if (gpio > pxa_last_gpio)
                return -EINVAL;
 
        local_irq_save(flags);
@@ -100,6 +105,44 @@ int pxa_gpio_mode(int gpio_mode)
 
 EXPORT_SYMBOL(pxa_gpio_mode);
 
+int gpio_direction_input(unsigned gpio)
+{
+       unsigned long flags;
+       u32 mask;
+
+       if (gpio > pxa_last_gpio)
+               return -EINVAL;
+
+       mask = GPIO_bit(gpio);
+       local_irq_save(flags);
+       GPDR(gpio) &= ~mask;
+       local_irq_restore(flags);
+
+       return 0;
+}
+EXPORT_SYMBOL(gpio_direction_input);
+
+int gpio_direction_output(unsigned gpio, int value)
+{
+       unsigned long flags;
+       u32 mask;
+
+       if (gpio > pxa_last_gpio)
+               return -EINVAL;
+
+       mask = GPIO_bit(gpio);
+       local_irq_save(flags);
+       if (value)
+               GPSR(gpio) = mask;
+       else
+               GPCR(gpio) = mask;
+       GPDR(gpio) |= mask;
+       local_irq_restore(flags);
+
+       return 0;
+}
+EXPORT_SYMBOL(gpio_direction_output);
+
 /*
  * Return GPIO level
  */