diff options
author | Steve Glendinning <steve.glendinning@smsc.com> | 2009-01-27 01:51:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-02-01 03:37:19 -0500 |
commit | 61307ed85dbf0ee232e354721a5a0a2011da7996 (patch) | |
tree | 2a3961ceff61a5442abf4a97bea32cb376fdda1a /drivers/net/smsc911x.c | |
parent | 05bee4737774881e027bfd9a8b5c40a7d68f6325 (diff) |
smsc911x: add support for platform-specific irq flags
this patch adds support for the platform_device's resources to indicate
additional flags to use when registering the irq, for example
IORESOURCE_IRQ_LOWLEVEL (which corresponds to IRQF_TRIGGER_LOW). These
should be set in the irq resource flags field.
Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/smsc911x.c')
-rw-r--r-- | drivers/net/smsc911x.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c index ae4c74b51827..d273a0720ef1 100644 --- a/drivers/net/smsc911x.c +++ b/drivers/net/smsc911x.c | |||
@@ -1886,9 +1886,9 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev) | |||
1886 | struct net_device *dev; | 1886 | struct net_device *dev; |
1887 | struct smsc911x_data *pdata; | 1887 | struct smsc911x_data *pdata; |
1888 | struct smsc911x_platform_config *config = pdev->dev.platform_data; | 1888 | struct smsc911x_platform_config *config = pdev->dev.platform_data; |
1889 | struct resource *res; | 1889 | struct resource *res, *irq_res; |
1890 | unsigned int intcfg = 0; | 1890 | unsigned int intcfg = 0; |
1891 | int res_size; | 1891 | int res_size, irq_flags; |
1892 | int retval; | 1892 | int retval; |
1893 | DECLARE_MAC_BUF(mac); | 1893 | DECLARE_MAC_BUF(mac); |
1894 | 1894 | ||
@@ -1913,6 +1913,14 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev) | |||
1913 | } | 1913 | } |
1914 | res_size = res->end - res->start; | 1914 | res_size = res->end - res->start; |
1915 | 1915 | ||
1916 | irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); | ||
1917 | if (!irq_res) { | ||
1918 | pr_warning("%s: Could not allocate irq resource.\n", | ||
1919 | SMSC_CHIPNAME); | ||
1920 | retval = -ENODEV; | ||
1921 | goto out_0; | ||
1922 | } | ||
1923 | |||
1916 | if (!request_mem_region(res->start, res_size, SMSC_CHIPNAME)) { | 1924 | if (!request_mem_region(res->start, res_size, SMSC_CHIPNAME)) { |
1917 | retval = -EBUSY; | 1925 | retval = -EBUSY; |
1918 | goto out_0; | 1926 | goto out_0; |
@@ -1929,7 +1937,8 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev) | |||
1929 | 1937 | ||
1930 | pdata = netdev_priv(dev); | 1938 | pdata = netdev_priv(dev); |
1931 | 1939 | ||
1932 | dev->irq = platform_get_irq(pdev, 0); | 1940 | dev->irq = irq_res->start; |
1941 | irq_flags = irq_res->flags & IRQF_TRIGGER_MASK; | ||
1933 | pdata->ioaddr = ioremap_nocache(res->start, res_size); | 1942 | pdata->ioaddr = ioremap_nocache(res->start, res_size); |
1934 | 1943 | ||
1935 | /* copy config parameters across to pdata */ | 1944 | /* copy config parameters across to pdata */ |
@@ -1962,8 +1971,8 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev) | |||
1962 | smsc911x_reg_write(pdata, INT_EN, 0); | 1971 | smsc911x_reg_write(pdata, INT_EN, 0); |
1963 | smsc911x_reg_write(pdata, INT_STS, 0xFFFFFFFF); | 1972 | smsc911x_reg_write(pdata, INT_STS, 0xFFFFFFFF); |
1964 | 1973 | ||
1965 | retval = request_irq(dev->irq, smsc911x_irqhandler, IRQF_DISABLED, | 1974 | retval = request_irq(dev->irq, smsc911x_irqhandler, |
1966 | dev->name, dev); | 1975 | irq_flags | IRQF_DISABLED, dev->name, dev); |
1967 | if (retval) { | 1976 | if (retval) { |
1968 | SMSC_WARNING(PROBE, | 1977 | SMSC_WARNING(PROBE, |
1969 | "Unable to claim requested irq: %d", dev->irq); | 1978 | "Unable to claim requested irq: %d", dev->irq); |