mantis_pcmcia.c revision 86c75c5c2b9318f4b3218615ada18badabd3f166
1bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham/* 2bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham Mantis PCI bridge driver 3bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 4bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham Copyright (C) 2005, 2006 Manu Abraham (abraham.manu@gmail.com) 5bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 6bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham This program is free software; you can redistribute it and/or modify 7bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham it under the terms of the GNU General Public License as published by 8bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham the Free Software Foundation; either version 2 of the License, or 9bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham (at your option) any later version. 10bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 11bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham This program is distributed in the hope that it will be useful, 12bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham but WITHOUT ANY WARRANTY; without even the implied warranty of 13bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham GNU General Public License for more details. 15bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 16bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham You should have received a copy of the GNU General Public License 17bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham along with this program; if not, write to the Free Software 18bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham*/ 20bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 21bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham#include "mantis_common.h" 228ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham#include "mantis_link.h" /* temporary due to physical layer stuff */ 238ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 248ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham/* 258ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham * If Slot state is already PLUG_IN event and we are called 268ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham * again, definitely it is jitter alone 278ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham */ 288ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abrahamvoid mantis_event_cam_plugin(struct mantis_ca *ca) 298ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham{ 308ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham struct mantis_pci *mantis = ca->ca_priv; 318ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 328ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham u32 gpif_irqcfg; 338ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 348ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham if (ca->slot_state == MODULE_XTRACTED) { 35d9dd5f7168d6a61491996fc02e4deb9d96308178Manu Abraham dprintk(verbose, MANTIS_DEBUG, 1, "Event: CAM Plugged IN: Adapter(%d) Slot(0)", mantis->num); 368ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham udelay(50); 378ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham mmwrite(0xda000000, MANTIS_CARD_RESET); 388ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham gpif_irqcfg = mmread(MANTIS_GPIF_IRQCFG); 398ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham gpif_irqcfg |= MANTIS_MASK_PLUGOUT; 408ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham gpif_irqcfg &= ~MANTIS_MASK_PLUGIN; 418ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham mmwrite(gpif_irqcfg, MANTIS_GPIF_IRQCFG); 428ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham udelay(500); 438ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham ca->slot_state = MODULE_INSERTED; 448ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham } 458ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham udelay(100); 468ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham} 478ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 488ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham/* 498ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham * If Slot state is already UN_PLUG event and we are called 508ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham * again, definitely it is jitter alone 518ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham */ 528ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abrahamvoid mantis_event_cam_unplug(struct mantis_ca *ca) 538ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham{ 548ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham struct mantis_pci *mantis = ca->ca_priv; 558ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 568ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham u32 gpif_irqcfg; 578ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 588ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham if (ca->slot_state == MODULE_INSERTED) { 59d9dd5f7168d6a61491996fc02e4deb9d96308178Manu Abraham dprintk(verbose, MANTIS_DEBUG, 1, "Event: CAM Unplugged: Adapter(%d) Slot(0)", mantis->num); 608ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham udelay(50); 618ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham mmwrite(0x00da0000, MANTIS_CARD_RESET); 628ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham gpif_irqcfg = mmread(MANTIS_GPIF_IRQCFG); 638ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham gpif_irqcfg |= MANTIS_MASK_PLUGIN; 648ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham gpif_irqcfg &= ~MANTIS_MASK_PLUGOUT; 658ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham mmwrite(gpif_irqcfg, MANTIS_GPIF_IRQCFG); 668ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham udelay(500); 678ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham ca->slot_state = MODULE_XTRACTED; 688ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham } 698ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham udelay(100); 708ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham} 71bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 72bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abrahamint mantis_pcmcia_init(struct mantis_ca *ca) 73bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham{ 74bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham struct mantis_pci *mantis = ca->ca_priv; 75bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 768ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham u32 gpif_stat, card_stat; 778ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 78d9dd5f7168d6a61491996fc02e4deb9d96308178Manu Abraham mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_IRQ0, MANTIS_INT_MASK); 798ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham gpif_stat = mmread(MANTIS_GPIF_STATUS); 808ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham card_stat = mmread(MANTIS_GPIF_IRQCFG); 818ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 828ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham if (gpif_stat & MANTIS_GPIF_DETSTAT) { 83d9dd5f7168d6a61491996fc02e4deb9d96308178Manu Abraham dprintk(verbose, MANTIS_DEBUG, 1, "CAM found on Adapter(%d) Slot(0)", mantis->num); 848ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham mmwrite(card_stat | MANTIS_MASK_PLUGOUT, MANTIS_GPIF_IRQCFG); 858ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham ca->slot_state = MODULE_INSERTED; 8686c75c5c2b9318f4b3218615ada18badabd3f166Sigmund Augdal dvb_ca_en50221_camchange_irq(&ca->en50221, 8786c75c5c2b9318f4b3218615ada18badabd3f166Sigmund Augdal 0, 8886c75c5c2b9318f4b3218615ada18badabd3f166Sigmund Augdal DVB_CA_EN50221_CAMCHANGE_INSERTED); 898ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham } else { 90d9dd5f7168d6a61491996fc02e4deb9d96308178Manu Abraham dprintk(verbose, MANTIS_DEBUG, 1, "Empty Slot on Adapter(%d) Slot(0)", mantis->num); 918ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham mmwrite(card_stat | MANTIS_MASK_PLUGIN, MANTIS_GPIF_IRQCFG); 928ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham ca->slot_state = MODULE_XTRACTED; 938ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham } 948ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham 95bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham return 0; 96bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham} 97bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 98bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abrahamvoid mantis_pcmcia_exit(struct mantis_ca *ca) 99bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham{ 100bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham struct mantis_pci *mantis = ca->ca_priv; 101bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham 1028ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham mmwrite(mmread(MANTIS_GPIF_STATUS) & (~MANTIS_CARD_PLUGOUT | ~MANTIS_CARD_PLUGIN), MANTIS_GPIF_STATUS); 1038ce571f5e7eb7186f676af3b60af7980c2fc7929Manu Abraham mmwrite(mmread(MANTIS_INT_MASK) & ~MANTIS_INT_IRQ0, MANTIS_INT_MASK); 104bc4ed42fdf762a2049b255de92626ad1cfd86d8eManu Abraham} 105