mirror of https://github.com/hak5/openwrt-owl.git
parent
7b878dde4b
commit
0d2ad7a816
|
@ -31,6 +31,7 @@
|
||||||
struct rt305x_esw {
|
struct rt305x_esw {
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
struct rt305x_esw_platform_data *pdata;
|
struct rt305x_esw_platform_data *pdata;
|
||||||
|
spinlock_t reg_rw_lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -45,6 +46,27 @@ rt305x_esw_rr(struct rt305x_esw *esw, unsigned reg)
|
||||||
return __raw_readl(esw->base + 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
|
static u32
|
||||||
rt305x_mii_write(struct rt305x_esw *esw, u32 phy_addr, u32 phy_register,
|
rt305x_mii_write(struct rt305x_esw *esw, u32 phy_addr, u32 phy_register,
|
||||||
u32 write_data)
|
u32 write_data)
|
||||||
|
@ -170,6 +192,7 @@ rt305x_esw_probe(struct platform_device *pdev)
|
||||||
platform_set_drvdata(pdev, esw);
|
platform_set_drvdata(pdev, esw);
|
||||||
|
|
||||||
esw->pdata = pdata;
|
esw->pdata = pdata;
|
||||||
|
spin_lock_init(&esw->reg_rw_lock);
|
||||||
rt305x_esw_hw_init(esw);
|
rt305x_esw_hw_init(esw);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue