1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-11-27 18:17:32 +02:00

ramips: ramips_esw: introduce rt305x_esw_rmw{,_raw} function

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@24336 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
juhosg 2010-12-08 10:15:16 +00:00
parent 8b6afc3a6a
commit 293e4ff8cc

View File

@ -31,6 +31,7 @@
struct rt305x_esw {
void __iomem *base;
struct rt305x_esw_platform_data *pdata;
spinlock_t reg_rw_lock;
};
static inline void
@ -45,6 +46,27 @@ rt305x_esw_rr(struct rt305x_esw *esw, unsigned reg)
return __raw_readl(esw->base + reg);
}
static inline void
rt305x_esw_rmw_raw(struct rt305x_esw *esw, unsigned reg, unsigned long mask,
unsigned long val)
{
unsigned long t;
t = __raw_readl(esw->base + reg) & ~mask;
__raw_writel(t | val, esw->base + reg);
}
static void
rt305x_esw_rmw(struct rt305x_esw *esw, unsigned reg, unsigned long mask,
unsigned long val)
{
unsigned long flags;
spin_lock_irqsave(&esw->reg_rw_lock, flags);
rt305x_esw_rmw_raw(esw, reg, mask, val);
spin_unlock_irqrestore(&esw->reg_rw_lock, flags);
}
static u32
rt305x_mii_write(struct rt305x_esw *esw, u32 phy_addr, u32 phy_register,
u32 write_data)
@ -170,6 +192,7 @@ rt305x_esw_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, esw);
esw->pdata = pdata;
spin_lock_init(&esw->reg_rw_lock);
rt305x_esw_hw_init(esw);
return 0;