Changeset 24331


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

ramips: ramips_esw: convert it to be a platform driver

Location:
trunk/target/linux/ramips/files
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c

    r20599 r24331  
    22 *  Ralink RT305x SoC platform device registration 
    33 * 
    4  *  Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org> 
    55 * 
    66 *  This program is free software; you can redistribute it and/or modify it 
     
    131131}; 
    132132 
     133static struct resource rt305x_esw_resources[] = { 
     134        { 
     135                .start  = RT305X_SWITCH_BASE, 
     136                .end    = RT305X_SWITCH_BASE + PAGE_SIZE - 1, 
     137                .flags  = IORESOURCE_MEM, 
     138        }, 
     139}; 
     140 
     141struct rt305x_esw_platform_data rt305x_esw_data; 
     142static struct platform_device rt305x_esw_device = { 
     143        .name           = "rt305x-esw", 
     144        .resource       = rt305x_esw_resources, 
     145        .num_resources  = ARRAY_SIZE(rt305x_esw_resources), 
     146        .dev = { 
     147                .platform_data = &rt305x_esw_data, 
     148        } 
     149}; 
     150 
    133151void __init rt305x_register_ethernet(void) 
    134152{ 
    135153        ramips_eth_data.sys_freq = rt305x_sys_freq; 
    136154 
     155        platform_device_register(&rt305x_esw_device); 
    137156        platform_device_register(&rt305x_eth_device); 
    138157} 
  • trunk/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.h

    r20627 r24331  
    22 * Ralink RT305x SoC specific platform device definitions 
    33 * 
    4  * Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org> 
     4 * Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org> 
    55 * 
    66 * This program is free software; you can redistribute it and/or modify it 
     
    1212#define __RT305X_DEVICES_H 
    1313 
     14#include <asm/mach-ralink/rt305x_esw_platform.h> 
     15 
    1416struct physmap_flash_data; 
     17 
     18extern struct rt305x_esw_platform_data rt305x_esw_data; 
    1519 
    1620extern void rt305x_register_flash(unsigned int id, 
  • trunk/target/linux/ramips/files/drivers/net/ramips.c

    r24124 r24331  
    3434#ifdef CONFIG_RALINK_RT305X 
    3535#include "ramips_esw.c" 
     36#else 
     37static inline int rt305x_esw_init(void) { return 0; } 
     38static inline void rt305x_esw_exit(void) { } 
    3639#endif 
    3740 
     
    508511        } 
    509512 
    510 #ifdef CONFIG_RALINK_RT305X 
    511         rt305x_esw_init(); 
    512 #endif 
    513513        printk(KERN_DEBUG "ramips_eth: loaded\n"); 
    514514        return 0; 
     
    542542ramips_eth_init(void) 
    543543{ 
    544         int ret = platform_driver_register(&ramips_eth_driver); 
     544        int ret; 
     545 
     546        ret = rt305x_esw_init(); 
    545547        if (ret) 
     548                return ret; 
     549 
     550        ret = platform_driver_register(&ramips_eth_driver); 
     551        if (ret) { 
    546552                printk(KERN_ERR 
    547553                       "ramips_eth: Error registering platfom driver!\n"); 
     554                goto esw_cleanup; 
     555        } 
     556 
     557        return 0; 
     558 
     559esw_cleanup: 
     560        rt305x_esw_exit(); 
    548561        return ret; 
    549562} 
     
    553566{ 
    554567        platform_driver_unregister(&ramips_eth_driver); 
     568        rt305x_esw_exit(); 
    555569} 
    556570 
  • 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.