Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / arch / arm / common / locomo.c
index a7dc137..4e0dcae 100644 (file)
@@ -15,7 +15,6 @@
  * Based on sa1111.c
  */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
@@ -205,7 +204,8 @@ static void locomo_unmask_irq(unsigned int irq)
        locomo_writel(r, mapbase + LOCOMO_ICR);
 }
 
-static struct irqchip locomo_chip = {
+static struct irq_chip locomo_chip = {
+       .name   = "LOCOMO",
        .ack    = locomo_ack_irq,
        .mask   = locomo_mask_irq,
        .unmask = locomo_unmask_irq,
@@ -250,7 +250,8 @@ static void locomo_key_unmask_irq(unsigned int irq)
        locomo_writel(r, mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC);
 }
 
-static struct irqchip locomo_key_chip = {
+static struct irq_chip locomo_key_chip = {
+       .name   = "LOCOMO-key",
        .ack    = locomo_key_ack_irq,
        .mask   = locomo_key_mask_irq,
        .unmask = locomo_key_unmask_irq,
@@ -313,7 +314,8 @@ static void locomo_gpio_unmask_irq(unsigned int irq)
        locomo_writel(r, mapbase + LOCOMO_GIE);
 }
 
-static struct irqchip locomo_gpio_chip = {
+static struct irq_chip locomo_gpio_chip = {
+       .name   = "LOCOMO-gpio",
        .ack    = locomo_gpio_ack_irq,
        .mask   = locomo_gpio_mask_irq,
        .unmask = locomo_gpio_unmask_irq,
@@ -358,7 +360,8 @@ static void locomo_lt_unmask_irq(unsigned int irq)
        locomo_writel(r, mapbase + LOCOMO_LTINT);
 }
 
-static struct irqchip locomo_lt_chip = {
+static struct irq_chip locomo_lt_chip = {
+       .name   = "LOCOMO-lt",
        .ack    = locomo_lt_ack_irq,
        .mask   = locomo_lt_mask_irq,
        .unmask = locomo_lt_unmask_irq,
@@ -419,7 +422,8 @@ static void locomo_spi_unmask_irq(unsigned int irq)
        locomo_writel(r, mapbase + LOCOMO_SPIIE);
 }
 
-static struct irqchip locomo_spi_chip = {
+static struct irq_chip locomo_spi_chip = {
+       .name   = "LOCOMO-spi",
        .ack    = locomo_spi_ack_irq,
        .mask   = locomo_spi_mask_irq,
        .unmask = locomo_spi_unmask_irq,
@@ -507,7 +511,7 @@ locomo_init_one_child(struct locomo *lchip, struct locomo_dev_info *info)
                goto out;
        }
 
-       strncpy(dev->dev.bus_id,info->name,sizeof(dev->dev.bus_id));
+       strncpy(dev->dev.bus_id, info->name, sizeof(dev->dev.bus_id));
        /*
         * If the parent device has a DMA mask associated with it,
         * propagate it down to the children.
@@ -629,21 +633,6 @@ static int locomo_resume(struct platform_device *dev)
 #endif
 
 
-#define LCM_ALC_EN     0x8000
-
-void frontlight_set(struct locomo *lchip, int duty, int vr, int bpwf)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&lchip->lock, flags);
-       locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
-       udelay(100);
-       locomo_writel(duty, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
-       locomo_writel(bpwf | LCM_ALC_EN, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
-       spin_unlock_irqrestore(&lchip->lock, flags);
-}
-
-
 /**
  *     locomo_probe - probe for a single LoCoMo chip.
  *     @phys_addr: physical address of device.
@@ -698,14 +687,10 @@ __locomo_probe(struct device *me, struct resource *mem, int irq)
                        , lchip->base + LOCOMO_GPD);
        locomo_writel(0, lchip->base + LOCOMO_GIE);
 
-       /* FrontLight */
+       /* Frontlight */
        locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
        locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
 
-       /* Same constants can be used for collie and poodle
-          (depending on CONFIG options in original sharp code)? */
-       frontlight_set(lchip, 163, 0, 148);
-
        /* Longtime timer */
        locomo_writel(0, lchip->base + LOCOMO_LTINT);
        /* SPI */
@@ -749,7 +734,6 @@ __locomo_probe(struct device *me, struct resource *mem, int irq)
 
        for (i = 0; i < ARRAY_SIZE(locomo_devices); i++)
                locomo_init_one_child(lchip, &locomo_devices[i]);
-
        return 0;
 
  out:
@@ -1062,6 +1046,30 @@ void locomo_m62332_senddata(struct locomo_dev *ldev, unsigned int dac_data, int
        spin_unlock_irqrestore(&lchip->lock, flags);
 }
 
+/*
+ *     Frontlight control
+ */
+
+static struct locomo *locomo_chip_driver(struct locomo_dev *ldev);
+
+void locomo_frontlight_set(struct locomo_dev *dev, int duty, int vr, int bpwf)
+{
+       unsigned long flags;
+       struct locomo *lchip = locomo_chip_driver(dev);
+
+       if (vr)
+               locomo_gpio_write(dev, LOCOMO_GPIO_FL_VR, 1);
+       else
+               locomo_gpio_write(dev, LOCOMO_GPIO_FL_VR, 0);
+
+       spin_lock_irqsave(&lchip->lock, flags);
+       locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
+       udelay(100);
+       locomo_writel(duty, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
+       locomo_writel(bpwf | LOCOMO_ALC_EN, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
+       spin_unlock_irqrestore(&lchip->lock, flags);
+}
+
 /*
  *     LoCoMo "Register Access Bus."
  *