bit操作

#define BIT(nr)                 (1UL << (nr))
#define BIT_MASK(nr)            (1UL << ((nr) % BITS_PER_LONG))
#define BIT_WORD(nr)            ((nr) / BITS_PER_LONG)
#define BITS_PER_BYTE           8
#define BITS_TO_LONGS(nr)       DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))

 

 

#define DECLARE_BITMAP(name,bits) /
 unsigned long name[BITS_TO_LONGS(bits)]

  

039/**
040 * Bitmap of enabled clocks, excluding ACPU which is always
041 * enabled
042 */
043static DECLARE_BITMAP(clock_map_enabled, NR_CLKS);
044static DEFINE_SPINLOCK(clock_map_lock);

 

clock_map_enabled[BIT_WORD(clk->id)] &= ~BIT_MASK(clk->id);

 

        clock_map_enabled[BIT_WORD(clk->id)] |= BIT_MASK(clk->id);

 

int clk_enable(struct clk *clk)

076{
077    unsigned long flags;
078    spin_lock_irqsave(&clocks_lock, flags);
079    clk->count++;
080    if (clk->count == 1) {
081        clk->ops->enable(clk->id);
082        spin_lock(&clock_map_lock);
083        clock_map_enabled[BIT_WORD(clk->id)] |= BIT_MASK(clk->id);
084        spin_unlock(&clock_map_lock);
085    }
086    spin_unlock_irqrestore(&clocks_lock, flags);
087    return 0;
088}
089EXPORT_SYMBOL(clk_enable);
090  
091void clk_disable(struct clk *clk)
092{
093    unsigned long flags;
094    spin_lock_irqsave(&clocks_lock, flags);
095    BUG_ON(clk->count == 0);
096    clk->count--;
097    if (clk->count == 0) {
098        clk->ops->disable(clk->id);
099        spin_lock(&clock_map_lock);
100        clock_map_enabled[BIT_WORD(clk->id)] &= ~BIT_MASK(clk->id);
101        spin_unlock(&clock_map_lock);
102    }
103    spin_unlock_irqrestore(&clocks_lock, flags);
104}
105EXPORT_SYMBOL(clk_disable);
void check_clk_is_enable(int clkid)
{
if(clock_map_enabled[BIT_WORD(clkid)] & BIT_MASK(clkid))
{
printk("clk->id %d is enable/n", clkid);
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值