diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-05 18:06:45 (GMT) |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-05 18:06:45 (GMT) |
commit | 3516c6a8dc0b1153c611c4cf0dc4a51631f052bb (patch) | |
tree | c54a5fc916cbe73e43dee20902642f367f44a551 /drivers/staging/phison | |
parent | 714f83d5d9f7c785f622259dad1f4fad12d64664 (diff) | |
parent | ba0e1ebb7ea0616eebc29d2077355bacea62a9d8 (diff) | |
download | linux-fsl-qoriq-3516c6a8dc0b1153c611c4cf0dc4a51631f052bb.tar.xz |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6: (714 commits)
Staging: sxg: slicoss: Specify the license for Sahara SXG and Slicoss drivers
Staging: serqt_usb: fix build due to proc tty changes
Staging: serqt_usb: fix checkpatch errors
Staging: serqt_usb: add TODO file
Staging: serqt_usb: Lindent the code
Staging: add USB serial Quatech driver
staging: document that the wifi staging drivers a bit better
Staging: echo cleanup
Staging: BUG to BUG_ON changes
Staging: remove some pointless conditionals before kfree_skb()
Staging: line6: fix build error, select SND_RAWMIDI
Staging: line6: fix checkpatch errors in variax.c
Staging: line6: fix checkpatch errors in toneport.c
Staging: line6: fix checkpatch errors in pcm.c
Staging: line6: fix checkpatch errors in midibuf.c
Staging: line6: fix checkpatch errors in midi.c
Staging: line6: fix checkpatch errors in dumprequest.c
Staging: line6: fix checkpatch errors in driver.c
Staging: line6: fix checkpatch errors in audio.c
Staging: line6: fix checkpatch errors in pod.c
...
Diffstat (limited to 'drivers/staging/phison')
-rw-r--r-- | drivers/staging/phison/Kconfig | 5 | ||||
-rw-r--r-- | drivers/staging/phison/Makefile | 1 | ||||
-rw-r--r-- | drivers/staging/phison/phison.c | 106 |
3 files changed, 112 insertions, 0 deletions
diff --git a/drivers/staging/phison/Kconfig b/drivers/staging/phison/Kconfig new file mode 100644 index 0000000..d3c65d3 --- /dev/null +++ b/drivers/staging/phison/Kconfig @@ -0,0 +1,5 @@ +config IDE_PHISON + tristate "PCIE ATA PS5000 IDE support" + depends on PCI && ATA && ATA_SFF + ---help--- + This is an experimental driver for PS5000 IDE driver. diff --git a/drivers/staging/phison/Makefile b/drivers/staging/phison/Makefile new file mode 100644 index 0000000..7642a21 --- /dev/null +++ b/drivers/staging/phison/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_IDE_PHISON) += phison.o diff --git a/drivers/staging/phison/phison.c b/drivers/staging/phison/phison.c new file mode 100644 index 0000000..270ebcb --- /dev/null +++ b/drivers/staging/phison/phison.c @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2006 Red Hat <evan_ko@phison.com> + * + * May be copied or modified under the terms of the GNU General Public License + * + * [Modify History] + * #0001, Evan, 2008.10.22, V0.00, New release. + * #0002, Evan, 2008.11.01, V0.90, Test Work In Ubuntu Linux 8.04. + * #0003, Evan, 2008.01.08, V0.91, Change Name "PCIE-SSD" to "E-BOX". + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/pci.h> +#include <linux/init.h> +#include <linux/blkdev.h> +#include <linux/delay.h> +#include <linux/device.h> +#include <scsi/scsi_host.h> +#include <linux/libata.h> +#include <linux/ata.h> + +#define PHISON_DEBUG + +#define DRV_NAME "phison_e-box" /* #0003 */ +#define DRV_VERSION "0.91" /* #0003 */ + +#define PCI_VENDOR_ID_PHISON 0x1987 +#define PCI_DEVICE_ID_PS5000 0x5000 + +static int phison_pre_reset(struct ata_link *link, unsigned long deadline) +{ + int ret; + struct ata_port *ap = link->ap; + + ap->cbl = ATA_CBL_NONE; + ret = ata_std_prereset(link, deadline); + dev_dbg(ap->dev, "phison_pre_reset(), ret = %x\n", ret); + return ret; +} + +static struct scsi_host_template phison_sht = { + ATA_BMDMA_SHT(DRV_NAME), +}; + +static struct ata_port_operations phison_ops = { + .inherits = &ata_bmdma_port_ops, + .prereset = phison_pre_reset, +}; + +static int phison_init_one(struct pci_dev *pdev, const struct pci_device_id *id) +{ + int ret; + struct ata_port_info info = { + .flags = ATA_FLAG_NO_ATAPI, + + .pio_mask = 0x1f, + .mwdma_mask = 0x07, + .udma_mask = ATA_UDMA5, + + .port_ops = &phison_ops, + }; + const struct ata_port_info *ppi[] = { &info, NULL }; + + ret = ata_pci_sff_init_one(pdev, ppi, &phison_sht, NULL); + + dev_dbg(&pdev->dev, "phison_init_one(), ret = %x\n", ret); + + return ret; +} + +static struct pci_device_id phison_pci_tbl[] = { + { PCI_VENDOR_ID_PHISON, PCI_DEVICE_ID_PS5000, PCI_ANY_ID, PCI_ANY_ID, + PCI_CLASS_STORAGE_IDE << 8, 0xffff00, 0 }, + { 0, }, +}; +MODULE_DEVICE_TABLE(pci, phison_pci_tbl); + +static struct pci_driver phison_pci_driver = { + .name = DRV_NAME, + .id_table = phison_pci_tbl, + .probe = phison_init_one, + .remove = ata_pci_remove_one, +#ifdef CONFIG_PM /* haven't tested it. */ + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, +#endif +}; + +static int phison_ide_init(void) +{ + return pci_register_driver(&phison_pci_driver); +} + +static void phison_ide_exit(void) +{ + pci_unregister_driver(&phison_pci_driver); +} + +module_init(phison_ide_init); +module_exit(phison_ide_exit); + +MODULE_AUTHOR("Evan Ko"); +MODULE_DESCRIPTION("PCIE driver module for PHISON PS5000 E-BOX"); +MODULE_LICENSE("GPL"); +MODULE_VERSION(DRV_VERSION); |