Lines Matching +full:- +full:300

1 // SPDX-License-Identifier: GPL-2.0-only
54 #define DAC_DATA_HOLD_TIME 1 /* 300 ns */
55 #define DAC_LOW_SETUP_TIME 1 /* 300 ns */
81 /* All the locomo devices. If offset is non-zero, the mapbase for the
90 .name = "locomo-keyboard",
97 .name = "locomo-frontlight",
105 .name = "locomo-backlight",
112 .name = "locomo-audio",
119 .name = "locomo-led",
126 .name = "locomo-uart",
133 .name = "locomo-spi",
145 desc->irq_data.chip->irq_ack(&desc->irq_data);
148 req = locomo_readl(lchip->base + LOCOMO_ICR) & 0x0f00;
154 irq = lchip->irq_base;
172 r = locomo_readl(lchip->base + LOCOMO_ICR);
173 r &= ~(0x0010 << (d->irq - lchip->irq_base));
174 locomo_writel(r, lchip->base + LOCOMO_ICR);
181 r = locomo_readl(lchip->base + LOCOMO_ICR);
182 r |= (0x0010 << (d->irq - lchip->irq_base));
183 locomo_writel(r, lchip->base + LOCOMO_ICR);
195 int irq = lchip->irq_base;
200 irq_set_irq_type(lchip->irq, IRQ_TYPE_EDGE_FALLING);
201 irq_set_chained_handler_and_data(lchip->irq, locomo_handler, lchip);
204 for ( ; irq <= lchip->irq_base + 3; irq++) {
227 ret = -ENOMEM;
235 if (lchip->dev->dma_mask) {
236 dev->dma_mask = *lchip->dev->dma_mask;
237 dev->dev.dma_mask = &dev->dma_mask;
240 dev_set_name(&dev->dev, "%s", info->name);
241 dev->devid = info->devid;
242 dev->dev.parent = lchip->dev;
243 dev->dev.bus = &locomo_bus_type;
244 dev->dev.release = locomo_dev_release;
245 dev->dev.coherent_dma_mask = lchip->dev->coherent_dma_mask;
247 if (info->offset)
248 dev->mapbase = lchip->base + info->offset;
250 dev->mapbase = 0;
251 dev->length = info->length;
253 dev->irq[0] = (lchip->irq_base == NO_IRQ) ?
254 NO_IRQ : lchip->irq_base + info->irq[0];
256 ret = device_register(&dev->dev);
282 return -ENOMEM;
284 lchip->saved_state = save;
286 spin_lock_irqsave(&lchip->lock, flags);
288 save->LCM_GPO = locomo_readl(lchip->base + LOCOMO_GPO); /* GPIO */
289 locomo_writel(0x00, lchip->base + LOCOMO_GPO);
290 save->LCM_SPICT = locomo_readl(lchip->base + LOCOMO_SPI + LOCOMO_SPICT); /* SPI */
291 locomo_writel(0x40, lchip->base + LOCOMO_SPI + LOCOMO_SPICT);
292 save->LCM_GPE = locomo_readl(lchip->base + LOCOMO_GPE); /* GPIO */
293 locomo_writel(0x00, lchip->base + LOCOMO_GPE);
294 save->LCM_ASD = locomo_readl(lchip->base + LOCOMO_ASD); /* ADSTART */
295 locomo_writel(0x00, lchip->base + LOCOMO_ASD);
296 save->LCM_SPIMD = locomo_readl(lchip->base + LOCOMO_SPI + LOCOMO_SPIMD); /* SPI */
297 locomo_writel(0x3C14, lchip->base + LOCOMO_SPI + LOCOMO_SPIMD);
299 locomo_writel(0x00, lchip->base + LOCOMO_PAIF);
300 locomo_writel(0x00, lchip->base + LOCOMO_DAC);
301 locomo_writel(0x00, lchip->base + LOCOMO_BACKLIGHT + LOCOMO_TC);
303 if ((locomo_readl(lchip->base + LOCOMO_LED + LOCOMO_LPT0) & 0x88) && (locomo_readl(lchip->base + LOCOMO_LED + LOCOMO_LPT1) & 0x88))
304 locomo_writel(0x00, lchip->base + LOCOMO_C32K); /* CLK32 off */
307 locomo_writel(0xc1, lchip->base + LOCOMO_C32K); /* CLK32 on */
309 locomo_writel(0x00, lchip->base + LOCOMO_TADC); /* 18MHz clock off*/
310 locomo_writel(0x00, lchip->base + LOCOMO_AUDIO + LOCOMO_ACC); /* 22MHz/24MHz clock off */
311 locomo_writel(0x00, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS); /* FL */
313 spin_unlock_irqrestore(&lchip->lock, flags);
325 save = lchip->saved_state;
329 spin_lock_irqsave(&lchip->lock, flags);
331 locomo_writel(save->LCM_GPO, lchip->base + LOCOMO_GPO);
332 locomo_writel(save->LCM_SPICT, lchip->base + LOCOMO_SPI + LOCOMO_SPICT);
333 locomo_writel(save->LCM_GPE, lchip->base + LOCOMO_GPE);
334 locomo_writel(save->LCM_ASD, lchip->base + LOCOMO_ASD);
335 locomo_writel(save->LCM_SPIMD, lchip->base + LOCOMO_SPI + LOCOMO_SPIMD);
337 locomo_writel(0x00, lchip->base + LOCOMO_C32K);
338 locomo_writel(0x90, lchip->base + LOCOMO_TADC);
340 locomo_writel(0, lchip->base + LOCOMO_KEYBOARD + LOCOMO_KSC);
341 r = locomo_readl(lchip->base + LOCOMO_KEYBOARD + LOCOMO_KIC);
343 locomo_writel(r, lchip->base + LOCOMO_KEYBOARD + LOCOMO_KIC);
344 locomo_writel(0x1, lchip->base + LOCOMO_KEYBOARD + LOCOMO_KCMD);
346 spin_unlock_irqrestore(&lchip->lock, flags);
348 lchip->saved_state = NULL;
358 struct locomo_platform_data *pdata = me->platform_data;
361 int i, ret = -ENODEV;
365 return -ENOMEM;
367 spin_lock_init(&lchip->lock);
369 lchip->dev = me;
370 dev_set_drvdata(lchip->dev, lchip);
372 lchip->phys = mem->start;
373 lchip->irq = irq;
374 lchip->irq_base = (pdata) ? pdata->irq_base : NO_IRQ;
380 lchip->base = ioremap(mem->start, PAGE_SIZE);
381 if (!lchip->base) {
382 ret = -ENOMEM;
387 locomo_writel(0, lchip->base + LOCOMO_ICR);
389 locomo_writel(0, lchip->base + LOCOMO_KEYBOARD + LOCOMO_KIC);
392 locomo_writel(0, lchip->base + LOCOMO_GPO);
394 , lchip->base + LOCOMO_GPE);
396 , lchip->base + LOCOMO_GPD);
397 locomo_writel(0, lchip->base + LOCOMO_GIE);
400 locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
401 locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
404 locomo_writel(0, lchip->base + LOCOMO_LTINT);
406 locomo_writel(0, lchip->base + LOCOMO_SPI + LOCOMO_SPIIE);
408 locomo_writel(6 + 8 + 320 + 30 - 10, lchip->base + LOCOMO_ASD);
409 r = locomo_readl(lchip->base + LOCOMO_ASD);
411 locomo_writel(r, lchip->base + LOCOMO_ASD);
413 locomo_writel(6 + 8 + 320 + 30 - 10 - 128 + 4, lchip->base + LOCOMO_HSD);
414 r = locomo_readl(lchip->base + LOCOMO_HSD);
416 locomo_writel(r, lchip->base + LOCOMO_HSD);
418 locomo_writel(128 / 8, lchip->base + LOCOMO_HSC);
421 locomo_writel(0x80, lchip->base + LOCOMO_TADC);
424 r = locomo_readl(lchip->base + LOCOMO_TADC);
426 locomo_writel(r, lchip->base + LOCOMO_TADC);
430 r = locomo_readl(lchip->base + LOCOMO_DAC);
432 locomo_writel(r, lchip->base + LOCOMO_DAC);
434 r = locomo_readl(lchip->base + LOCOMO_VER);
441 if (lchip->irq != NO_IRQ && lchip->irq_base != NO_IRQ)
461 device_for_each_child(lchip->dev, NULL, locomo_remove_child);
463 if (lchip->irq != NO_IRQ) {
464 irq_set_chained_handler_and_data(lchip->irq, NULL, NULL);
467 iounmap(lchip->base);
472 * locomo_probe - probe for a single LoCoMo chip.
476 * before any other locomo-specific code.
479 * * %-EINVAL - device's IORESOURCE_MEM not found
480 * * %-ENXIO - could not allocate an IRQ for the device
481 * * %-ENODEV - device not found.
482 * * %-EBUSY - physical address already marked in-use.
483 * * %-ENOMEM - could not allocate or iomap memory.
484 * * %0 - successful.
493 return -EINVAL;
496 return -ENXIO;
498 return __locomo_probe(&dev->dev, mem, irq);
514 * the per-machine level, and then have this driver pick
535 return (struct locomo *)dev_get_drvdata(ldev->dev.parent);
547 spin_lock_irqsave(&lchip->lock, flags);
549 r = locomo_readl(lchip->base + LOCOMO_GPD);
554 locomo_writel(r, lchip->base + LOCOMO_GPD);
556 r = locomo_readl(lchip->base + LOCOMO_GPE);
561 locomo_writel(r, lchip->base + LOCOMO_GPE);
563 spin_unlock_irqrestore(&lchip->lock, flags);
574 return -ENODEV;
576 spin_lock_irqsave(&lchip->lock, flags);
577 ret = locomo_readl(lchip->base + LOCOMO_GPL);
578 spin_unlock_irqrestore(&lchip->lock, flags);
592 return -ENODEV;
594 spin_lock_irqsave(&lchip->lock, flags);
595 ret = locomo_readl(lchip->base + LOCOMO_GPO);
596 spin_unlock_irqrestore(&lchip->lock, flags);
612 spin_lock_irqsave(&lchip->lock, flags);
614 r = locomo_readl(lchip->base + LOCOMO_GPO);
619 locomo_writel(r, lchip->base + LOCOMO_GPO);
621 spin_unlock_irqrestore(&lchip->lock, flags);
632 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
633 udelay(DAC_DATA_HOLD_TIME); /* 300 nsec */
637 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
649 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
666 void *mapbase = lchip->base;
669 spin_lock_irqsave(&lchip->lock, flags);
682 udelay(DAC_DATA_HOLD_TIME); /* 300 nsec */
687 locomo_m62332_sendbit(mapbase, data >> (8 - i));
694 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
699 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
715 locomo_m62332_sendbit(mapbase, data >> (8 - i));
722 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
727 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
740 locomo_m62332_sendbit(mapbase, dac_data >> (8 - i));
747 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
752 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
767 udelay(DAC_LOW_SETUP_TIME); /* 300 nsec */
786 spin_unlock_irqrestore(&lchip->lock, flags);
800 locomo_gpio_write(dev->dev.parent, LOCOMO_GPIO_FL_VR, 1);
802 locomo_gpio_write(dev->dev.parent, LOCOMO_GPIO_FL_VR, 0);
804 spin_lock_irqsave(&lchip->lock, flags);
805 locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
807 locomo_writel(duty, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
808 locomo_writel(bpwf | LOCOMO_ALC_EN, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
809 spin_unlock_irqrestore(&lchip->lock, flags);
824 return dev->devid == drv->devid;
830 struct locomo_driver *drv = LOCOMO_DRV(dev->driver);
831 int ret = -ENODEV;
833 if (drv->probe)
834 ret = drv->probe(ldev);
841 struct locomo_driver *drv = LOCOMO_DRV(dev->driver);
843 if (drv->remove)
844 drv->remove(ldev);
848 .name = "locomo-bus",
856 driver->drv.bus = &locomo_bus_type;
857 return driver_register(&driver->drv);
863 driver_unregister(&driver->drv);