]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/net/can/mcp251x.c
Add hotplug support to mcp251x driver
[mv-sheeva.git] / drivers / net / can / mcp251x.c
index f8cc168ec76cd29db433bee4face5726c11bd43a..f521579f5adbe35735e13986dd920007fb5907ad 100644 (file)
@@ -922,12 +922,16 @@ static int __devinit mcp251x_can_probe(struct spi_device *spi)
        struct net_device *net;
        struct mcp251x_priv *priv;
        struct mcp251x_platform_data *pdata = spi->dev.platform_data;
+       int model = spi_get_device_id(spi)->driver_data;
        int ret = -ENODEV;
 
        if (!pdata)
                /* Platform data is required for osc freq */
                goto error_out;
 
+       if (model)
+               pdata->model = model;
+
        /* Allocate can/net device */
        net = alloc_candev(sizeof(struct mcp251x_priv), TX_ECHO_SKB_MAX);
        if (!net) {
@@ -1117,6 +1121,15 @@ static int mcp251x_can_resume(struct spi_device *spi)
 #define mcp251x_can_resume NULL
 #endif
 
+static struct spi_device_id mcp251x_id_table[] = {
+       { "mcp251x",    0 /* Use pdata.model */ },
+       { "mcp2510",    CAN_MCP251X_MCP2510 },
+       { "mcp2515",    CAN_MCP251X_MCP2515 },
+       { },
+};
+
+MODULE_DEVICE_TABLE(spi, mcp251x_id_table);
+
 static struct spi_driver mcp251x_can_driver = {
        .driver = {
                .name = DEVICE_NAME,
@@ -1124,6 +1137,7 @@ static struct spi_driver mcp251x_can_driver = {
                .owner = THIS_MODULE,
        },
 
+       .id_table = mcp251x_id_table,
        .probe = mcp251x_can_probe,
        .remove = __devexit_p(mcp251x_can_remove),
        .suspend = mcp251x_can_suspend,