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:
parent
8b6afc3a6a
commit
293e4ff8cc
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user