aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/vme/bridges/vme_ca91cx42.c
diff options
context:
space:
mode:
authorMartyn Welch <martyn.welch@gefanuc.com>2009-12-15 08:42:56 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-03 16:42:27 -0800
commit12b2d5c0895a03e941e7c145d9d23a45908a857b (patch)
treeaa56caaf60f1d0dc955ce25ec32fdd29b6dd2b12 /drivers/staging/vme/bridges/vme_ca91cx42.c
parent638f199db463a8f2b1535c45ab27d04bb1a55baf (diff)
downloadkernel_samsung_smdk4412-12b2d5c0895a03e941e7c145d9d23a45908a857b.zip
kernel_samsung_smdk4412-12b2d5c0895a03e941e7c145d9d23a45908a857b.tar.gz
kernel_samsung_smdk4412-12b2d5c0895a03e941e7c145d9d23a45908a857b.tar.bz2
Staging: vme: Allow override of geographical address on ca91c142
Geographical addressing only works if the VME backplane supports it. There are a large number of old backplanes which do not support geographical addressing. These boards will generally report a slot ID of zero - which is an invalid ID in the slot numbering scheme. Allow the geographical address to be over-ridden on the ca91c142 so that a slot ID can be provided manually in these circumstances. Signed-off-by: Martyn Welch <martyn.welch@gefanuc.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/vme/bridges/vme_ca91cx42.c')
-rw-r--r--drivers/staging/vme/bridges/vme_ca91cx42.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/staging/vme/bridges/vme_ca91cx42.c b/drivers/staging/vme/bridges/vme_ca91cx42.c
index 1cf3e91..5799b09 100644
--- a/drivers/staging/vme/bridges/vme_ca91cx42.c
+++ b/drivers/staging/vme/bridges/vme_ca91cx42.c
@@ -38,6 +38,9 @@ static int ca91cx42_probe(struct pci_dev *, const struct pci_device_id *);
static void ca91cx42_remove(struct pci_dev *);
static void __exit ca91cx42_exit(void);
+/* Module parameters */
+static int geoid;
+
struct vme_bridge *ca91cx42_bridge;
wait_queue_head_t dma_queue;
wait_queue_head_t iack_queue;
@@ -881,8 +884,12 @@ int ca91cx42_slot_get(void)
{
u32 slot = 0;
- slot = ioread32(ca91cx42_bridge->base + VCSR_BS);
- slot = ((slot & CA91CX42_VCSR_BS_SLOT_M) >> 27);
+ if (!geoid) {
+ slot = ioread32(ca91cx42_bridge->base + VCSR_BS);
+ slot = ((slot & CA91CX42_VCSR_BS_SLOT_M) >> 27);
+ } else
+ slot = geoid;
+
return (int)slot;
}
@@ -1299,6 +1306,9 @@ static void __exit ca91cx42_exit(void)
pci_unregister_driver(&ca91cx42_driver);
}
+MODULE_PARM_DESC(geoid, "Override geographical addressing");
+module_param(geoid, int, 0);
+
MODULE_DESCRIPTION("VME driver for the Tundra Universe II VME bridge");
MODULE_LICENSE("GPL");