Lines Matching refs:cc
18 static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset, in bcma_cc_write32_masked() argument
22 value |= bcma_cc_read32(cc, offset) & ~mask; in bcma_cc_write32_masked()
23 bcma_cc_write32(cc, offset, value); in bcma_cc_write32_masked()
28 u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) in bcma_chipco_get_alp_clock() argument
30 if (cc->capabilities & BCMA_CC_CAP_PMU) in bcma_chipco_get_alp_clock()
31 return bcma_pmu_get_alp_clock(cc); in bcma_chipco_get_alp_clock()
37 static u32 bcma_chipco_watchdog_get_max_timer(struct bcma_drv_cc *cc) in bcma_chipco_watchdog_get_max_timer() argument
39 struct bcma_bus *bus = cc->core->bus; in bcma_chipco_watchdog_get_max_timer()
42 if (cc->capabilities & BCMA_CC_CAP_PMU) { in bcma_chipco_watchdog_get_max_timer()
45 else if (cc->core->id.rev < 26) in bcma_chipco_watchdog_get_max_timer()
48 nb = (cc->core->id.rev >= 37) ? 32 : 24; in bcma_chipco_watchdog_get_max_timer()
61 struct bcma_drv_cc *cc = bcm47xx_wdt_get_drvdata(wdt); in bcma_chipco_watchdog_timer_set_wdt() local
63 return bcma_chipco_watchdog_timer_set(cc, ticks); in bcma_chipco_watchdog_timer_set_wdt()
69 struct bcma_drv_cc *cc = bcm47xx_wdt_get_drvdata(wdt); in bcma_chipco_watchdog_timer_set_ms_wdt() local
72 ticks = bcma_chipco_watchdog_timer_set(cc, cc->ticks_per_ms * ms); in bcma_chipco_watchdog_timer_set_ms_wdt()
73 return ticks / cc->ticks_per_ms; in bcma_chipco_watchdog_timer_set_ms_wdt()
76 static int bcma_chipco_watchdog_ticks_per_ms(struct bcma_drv_cc *cc) in bcma_chipco_watchdog_ticks_per_ms() argument
78 struct bcma_bus *bus = cc->core->bus; in bcma_chipco_watchdog_ticks_per_ms()
80 if (cc->capabilities & BCMA_CC_CAP_PMU) { in bcma_chipco_watchdog_ticks_per_ms()
85 return bcma_chipco_get_alp_clock(cc) / 4000; in bcma_chipco_watchdog_ticks_per_ms()
90 return bcma_chipco_get_alp_clock(cc) / 1000; in bcma_chipco_watchdog_ticks_per_ms()
94 int bcma_chipco_watchdog_register(struct bcma_drv_cc *cc) in bcma_chipco_watchdog_register() argument
99 wdt.driver_data = cc; in bcma_chipco_watchdog_register()
103 bcma_chipco_watchdog_get_max_timer(cc) / cc->ticks_per_ms; in bcma_chipco_watchdog_register()
106 cc->core->bus->num, &wdt, in bcma_chipco_watchdog_register()
111 cc->watchdog = pdev; in bcma_chipco_watchdog_register()
116 void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc) in bcma_core_chipcommon_early_init() argument
118 if (cc->early_setup_done) in bcma_core_chipcommon_early_init()
121 spin_lock_init(&cc->gpio_lock); in bcma_core_chipcommon_early_init()
123 if (cc->core->id.rev >= 11) in bcma_core_chipcommon_early_init()
124 cc->status = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT); in bcma_core_chipcommon_early_init()
125 cc->capabilities = bcma_cc_read32(cc, BCMA_CC_CAP); in bcma_core_chipcommon_early_init()
126 if (cc->core->id.rev >= 35) in bcma_core_chipcommon_early_init()
127 cc->capabilities_ext = bcma_cc_read32(cc, BCMA_CC_CAP_EXT); in bcma_core_chipcommon_early_init()
129 if (cc->capabilities & BCMA_CC_CAP_PMU) in bcma_core_chipcommon_early_init()
130 bcma_pmu_early_init(cc); in bcma_core_chipcommon_early_init()
132 cc->early_setup_done = true; in bcma_core_chipcommon_early_init()
135 void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) in bcma_core_chipcommon_init() argument
140 if (cc->setup_done) in bcma_core_chipcommon_init()
143 bcma_core_chipcommon_early_init(cc); in bcma_core_chipcommon_init()
145 if (cc->core->id.rev >= 20) { in bcma_core_chipcommon_init()
148 if (cc->core->bus->chipinfo.id == BCMA_CHIP_ID_BCM43142) { in bcma_core_chipcommon_init()
153 bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, pullup); in bcma_core_chipcommon_init()
154 bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, pulldown); in bcma_core_chipcommon_init()
157 if (cc->capabilities & BCMA_CC_CAP_PMU) in bcma_core_chipcommon_init()
158 bcma_pmu_init(cc); in bcma_core_chipcommon_init()
159 if (cc->capabilities & BCMA_CC_CAP_PCTL) in bcma_core_chipcommon_init()
160 bcma_err(cc->core->bus, "Power control not implemented!\n"); in bcma_core_chipcommon_init()
162 if (cc->core->id.rev >= 16) { in bcma_core_chipcommon_init()
163 if (cc->core->bus->sprom.leddc_on_time && in bcma_core_chipcommon_init()
164 cc->core->bus->sprom.leddc_off_time) { in bcma_core_chipcommon_init()
165 leddc_on = cc->core->bus->sprom.leddc_on_time; in bcma_core_chipcommon_init()
166 leddc_off = cc->core->bus->sprom.leddc_off_time; in bcma_core_chipcommon_init()
168 bcma_cc_write32(cc, BCMA_CC_GPIOTIMER, in bcma_core_chipcommon_init()
172 cc->ticks_per_ms = bcma_chipco_watchdog_ticks_per_ms(cc); in bcma_core_chipcommon_init()
174 cc->setup_done = true; in bcma_core_chipcommon_init()
178 u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks) in bcma_chipco_watchdog_timer_set() argument
182 maxt = bcma_chipco_watchdog_get_max_timer(cc); in bcma_chipco_watchdog_timer_set()
183 if (cc->capabilities & BCMA_CC_CAP_PMU) { in bcma_chipco_watchdog_timer_set()
188 bcma_cc_write32(cc, BCMA_CC_PMU_WATCHDOG, ticks); in bcma_chipco_watchdog_timer_set()
190 struct bcma_bus *bus = cc->core->bus; in bcma_chipco_watchdog_timer_set()
194 bcma_core_set_clockmode(cc->core, in bcma_chipco_watchdog_timer_set()
200 bcma_cc_write32(cc, BCMA_CC_WATCHDOG, ticks); in bcma_chipco_watchdog_timer_set()
205 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value) in bcma_chipco_irq_mask() argument
207 bcma_cc_write32_masked(cc, BCMA_CC_IRQMASK, mask, value); in bcma_chipco_irq_mask()
210 u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask) in bcma_chipco_irq_status() argument
212 return bcma_cc_read32(cc, BCMA_CC_IRQSTAT) & mask; in bcma_chipco_irq_status()
215 u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask) in bcma_chipco_gpio_in() argument
217 return bcma_cc_read32(cc, BCMA_CC_GPIOIN) & mask; in bcma_chipco_gpio_in()
220 u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value) in bcma_chipco_gpio_out() argument
225 spin_lock_irqsave(&cc->gpio_lock, flags); in bcma_chipco_gpio_out()
226 res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUT, mask, value); in bcma_chipco_gpio_out()
227 spin_unlock_irqrestore(&cc->gpio_lock, flags); in bcma_chipco_gpio_out()
233 u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value) in bcma_chipco_gpio_outen() argument
238 spin_lock_irqsave(&cc->gpio_lock, flags); in bcma_chipco_gpio_outen()
239 res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUTEN, mask, value); in bcma_chipco_gpio_outen()
240 spin_unlock_irqrestore(&cc->gpio_lock, flags); in bcma_chipco_gpio_outen()
250 u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value) in bcma_chipco_gpio_control() argument
255 spin_lock_irqsave(&cc->gpio_lock, flags); in bcma_chipco_gpio_control()
256 res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOCTL, mask, value); in bcma_chipco_gpio_control()
257 spin_unlock_irqrestore(&cc->gpio_lock, flags); in bcma_chipco_gpio_control()
263 u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value) in bcma_chipco_gpio_intmask() argument
268 spin_lock_irqsave(&cc->gpio_lock, flags); in bcma_chipco_gpio_intmask()
269 res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOIRQ, mask, value); in bcma_chipco_gpio_intmask()
270 spin_unlock_irqrestore(&cc->gpio_lock, flags); in bcma_chipco_gpio_intmask()
275 u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value) in bcma_chipco_gpio_polarity() argument
280 spin_lock_irqsave(&cc->gpio_lock, flags); in bcma_chipco_gpio_polarity()
281 res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOPOL, mask, value); in bcma_chipco_gpio_polarity()
282 spin_unlock_irqrestore(&cc->gpio_lock, flags); in bcma_chipco_gpio_polarity()
287 u32 bcma_chipco_gpio_pullup(struct bcma_drv_cc *cc, u32 mask, u32 value) in bcma_chipco_gpio_pullup() argument
292 if (cc->core->id.rev < 20) in bcma_chipco_gpio_pullup()
295 spin_lock_irqsave(&cc->gpio_lock, flags); in bcma_chipco_gpio_pullup()
296 res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOPULLUP, mask, value); in bcma_chipco_gpio_pullup()
297 spin_unlock_irqrestore(&cc->gpio_lock, flags); in bcma_chipco_gpio_pullup()
302 u32 bcma_chipco_gpio_pulldown(struct bcma_drv_cc *cc, u32 mask, u32 value) in bcma_chipco_gpio_pulldown() argument
307 if (cc->core->id.rev < 20) in bcma_chipco_gpio_pulldown()
310 spin_lock_irqsave(&cc->gpio_lock, flags); in bcma_chipco_gpio_pulldown()
311 res = bcma_cc_write32_masked(cc, BCMA_CC_GPIOPULLDOWN, mask, value); in bcma_chipco_gpio_pulldown()
312 spin_unlock_irqrestore(&cc->gpio_lock, flags); in bcma_chipco_gpio_pulldown()
318 void bcma_chipco_serial_init(struct bcma_drv_cc *cc) in bcma_chipco_serial_init() argument
323 unsigned int ccrev = cc->core->id.rev; in bcma_chipco_serial_init()
324 struct bcma_serial_port *ports = cc->serial_ports; in bcma_chipco_serial_init()
327 baud_base = bcma_chipco_get_alp_clock(cc); in bcma_chipco_serial_init()
330 bcma_cc_write32(cc, BCMA_CC_CORECTL, in bcma_chipco_serial_init()
331 bcma_cc_read32(cc, BCMA_CC_CORECTL) in bcma_chipco_serial_init()
335 bcma_cc_write32(cc, BCMA_CC_CORECTL, in bcma_chipco_serial_init()
336 bcma_cc_read32(cc, BCMA_CC_CORECTL) in bcma_chipco_serial_init()
340 bcma_cc_write32(cc, BCMA_CC_CORECTL, in bcma_chipco_serial_init()
341 bcma_cc_read32(cc, BCMA_CC_CORECTL) in bcma_chipco_serial_init()
345 bcma_err(cc->core->bus, "serial not supported on this device ccrev: 0x%x\n", in bcma_chipco_serial_init()
350 irq = bcma_core_irq(cc->core, 0); in bcma_chipco_serial_init()
353 cc->nr_serial_ports = (cc->capabilities & BCMA_CC_CAP_NRUART); in bcma_chipco_serial_init()
354 for (i = 0; i < cc->nr_serial_ports; i++) { in bcma_chipco_serial_init()
355 ports[i].regs = cc->core->io_addr + BCMA_CC_UART0_DATA + in bcma_chipco_serial_init()