Ignore:
Timestamp:
2010-12-08T11:15:00+01:00 (5 years ago)
Author:
juhosg
Message:

ramips: ramips_esw: convert it to be a platform driver

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/files/drivers/net/ramips_esw.c

    r24330 r24331  
    1 #include <rt305x.h> 
     1#include <linux/ioport.h> 
     2 
    23#include <rt305x_regs.h> 
     4#include <rt305x_esw_platform.h> 
    35 
    46#define GPIO_PRUPOSE           0x60 
     
    1113struct rt305x_esw { 
    1214        void __iomem *base; 
     15        struct rt305x_esw_platform_data *pdata; 
    1316}; 
    14  
    15 static struct rt305x_esw rt305x_esw; 
    1617 
    1718static inline void 
     
    122123 
    123124static int 
     125rt305x_esw_probe(struct platform_device *pdev) 
     126{ 
     127        struct rt305x_esw_platform_data *pdata; 
     128        struct rt305x_esw *esw; 
     129        struct resource *res; 
     130        int err; 
     131 
     132        pdata = pdev->dev.platform_data; 
     133        if (!pdata) 
     134                return -EINVAL; 
     135 
     136        res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 
     137        if (!res) { 
     138                dev_err(&pdev->dev, "no memory resource found\n"); 
     139                return -ENOMEM; 
     140        } 
     141 
     142        esw = kzalloc(sizeof (struct rt305x_esw), GFP_KERNEL); 
     143        if (!esw) { 
     144                dev_err(&pdev->dev, "no memory for private data\n"); 
     145                return -ENOMEM; 
     146        } 
     147 
     148        esw->base = ioremap(res->start, resource_size(res)); 
     149        if (!esw->base) { 
     150                dev_err(&pdev->dev, "ioremap failed\n"); 
     151                err = -ENOMEM; 
     152                goto free_esw; 
     153        } 
     154 
     155        platform_set_drvdata(pdev, esw); 
     156 
     157        esw->pdata = pdata; 
     158        rt305x_esw_hw_init(esw); 
     159 
     160        return 0; 
     161 
     162free_esw: 
     163        kfree(esw); 
     164        return err; 
     165} 
     166 
     167static int 
     168rt305x_esw_remove(struct platform_device *pdev) 
     169{ 
     170        struct rt305x_esw *esw; 
     171 
     172        esw = platform_get_drvdata(pdev); 
     173        if (esw) { 
     174                platform_set_drvdata(pdev, NULL); 
     175                iounmap(esw->base); 
     176                kfree(esw); 
     177        } 
     178 
     179        return 0; 
     180} 
     181 
     182static struct platform_driver rt305x_esw_driver = { 
     183        .probe = rt305x_esw_probe, 
     184        .remove = rt305x_esw_remove, 
     185        .driver = { 
     186                .name = "rt305x-esw", 
     187                .owner = THIS_MODULE, 
     188        }, 
     189}; 
     190 
     191static int __init 
    124192rt305x_esw_init(void) 
    125193{ 
    126         struct rt305x_esw *esw; 
    127  
    128         esw = &rt305x_esw; 
    129         esw->base = ioremap_nocache(RT305X_SWITCH_BASE, PAGE_SIZE); 
    130         if(!esw->base) 
    131                 return -ENOMEM; 
    132  
    133         rt305x_esw_hw_init(esw); 
    134         return 0; 
    135 } 
     194        return platform_driver_register(&rt305x_esw_driver); 
     195} 
     196 
     197static void __exit 
     198rt305x_esw_exit(void) 
     199{ 
     200        platform_driver_unregister(&rt305x_esw_driver); 
     201} 
Note: See TracChangeset for help on using the changeset viewer.