15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 #include <linux/pci.h>
25 #define DRV_NAME "pata_cmd640"
26 #define DRV_VERSION "0.0.5"
57 const unsigned long T = 1000000 / 33;
58 const u8 setup_data[] = { 0x40, 0x40, 0x40, 0x80, 0x00 };
101 pci_read_config_byte(pdev, arttim, ®);
104 pci_write_config_byte(pdev, arttim, reg);
107 pci_write_config_byte(pdev, arttim + 1, (t.
active << 4) | t.
recover);
112 pci_read_config_byte(pdev,
ARTIM23, ®);
115 pci_write_config_byte(pdev,
ARTIM23, reg);
151 static int cmd640_port_start(
struct ata_port *ap)
164 static bool cmd640_sff_irq_check(
struct ata_port *ap)
170 pci_read_config_byte(pdev, irq_reg, &irq_stat);
172 return irq_stat & irq_mask;
183 .sff_irq_check = cmd640_sff_irq_check,
184 .qc_issue = cmd640_qc_issue,
186 .set_piomode = cmd640_set_piomode,
187 .port_start = cmd640_port_start,
190 static void cmd640_hardware_init(
struct pci_dev *pdev)
195 pci_write_config_byte(pdev, 0x5B, 0x00);
197 pci_write_config_byte(pdev,
CMDTIM, 0);
199 pci_write_config_byte(pdev,
BRST, 0x40);
208 pci_read_config_byte(pdev,
CNTRL, &ctrl);
209 pci_write_config_byte(pdev,
CNTRL, ctrl | 0xC0);
211 pci_read_config_byte(pdev,
ARTIM23, &ctrl);
213 pci_write_config_byte(pdev,
ARTIM23, ctrl);
221 .port_ops = &cmd640_port_ops
230 cmd640_hardware_init(pdev);
232 return ata_pci_sff_init_one(pdev, ppi, &cmd640_sht,
NULL, 0);
236 static int cmd640_reinit_one(
struct pci_dev *pdev)
241 rc = ata_pci_device_do_resume(pdev);
244 cmd640_hardware_init(pdev);
245 ata_host_resume(host);
255 static struct pci_driver cmd640_pci_driver = {
258 .probe = cmd640_init_one,
259 .remove = ata_pci_remove_one,
261 .suspend = ata_pci_device_suspend,
262 .resume = cmd640_reinit_one,