Lines Matching +full:compact +full:- +full:flash

1 // SPDX-License-Identifier: GPL-2.0-only
3 * A low-level PATA driver to handle a Compact Flash connected on the
10 * Copyright (C) 2006-07 Tower Technologies
31 #include <asm/mach-rc32434/rb.h>
33 #define DRV_NAME "pata-rb532-cf"
35 #define DRV_DESC "PATA driver for RouterBOARD 532 Compact Flash"
52 /* ------------------------------------------------------------------------ */
57 struct rb532_cf_info *info = ah->private_data; in rb532_pata_irq_handler()
59 if (gpiod_get_value(info->gpio_line)) { in rb532_pata_irq_handler()
60 irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW); in rb532_pata_irq_handler()
61 ata_sff_interrupt(info->irq, dev_instance); in rb532_pata_irq_handler()
63 irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_HIGH); in rb532_pata_irq_handler()
74 /* ------------------------------------------------------------------------ */
80 /* ------------------------------------------------------------------------ */
84 struct rb532_cf_info *info = ah->private_data; in rb532_pata_setup_ports()
87 ap = ah->ports[0]; in rb532_pata_setup_ports()
89 ap->ops = &rb532_pata_port_ops; in rb532_pata_setup_ports()
90 ap->pio_mask = ATA_PIO4; in rb532_pata_setup_ports()
92 ap->ioaddr.cmd_addr = info->iobase + RB500_CF_REG_BASE; in rb532_pata_setup_ports()
93 ap->ioaddr.ctl_addr = info->iobase + RB500_CF_REG_CTRL; in rb532_pata_setup_ports()
94 ap->ioaddr.altstatus_addr = info->iobase + RB500_CF_REG_CTRL; in rb532_pata_setup_ports()
96 ata_sff_std_ports(&ap->ioaddr); in rb532_pata_setup_ports()
98 ap->ioaddr.data_addr = info->iobase + RB500_CF_REG_DBUF32; in rb532_pata_setup_ports()
99 ap->ioaddr.error_addr = info->iobase + RB500_CF_REG_ERR; in rb532_pata_setup_ports()
113 dev_err(&pdev->dev, "no IOMEM resource found\n"); in rb532_pata_driver_probe()
114 return -EINVAL; in rb532_pata_driver_probe()
121 return -EINVAL; in rb532_pata_driver_probe()
123 gpiod = devm_gpiod_get(&pdev->dev, NULL, GPIOD_IN); in rb532_pata_driver_probe()
125 dev_err(&pdev->dev, "no GPIO found for irq%d\n", irq); in rb532_pata_driver_probe()
131 ah = ata_host_alloc(&pdev->dev, RB500_CF_MAXPORTS); in rb532_pata_driver_probe()
133 return -ENOMEM; in rb532_pata_driver_probe()
135 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); in rb532_pata_driver_probe()
137 return -ENOMEM; in rb532_pata_driver_probe()
139 ah->private_data = info; in rb532_pata_driver_probe()
140 info->gpio_line = gpiod; in rb532_pata_driver_probe()
141 info->irq = irq; in rb532_pata_driver_probe()
143 info->iobase = devm_ioremap(&pdev->dev, res->start, in rb532_pata_driver_probe()
145 if (!info->iobase) in rb532_pata_driver_probe()
146 return -ENOMEM; in rb532_pata_driver_probe()