Path: blob/master/drivers/bcma/driver_chipcommon.c
15109 views
/*1* Broadcom specific AMBA2* ChipCommon core driver3*4* Copyright 2005, Broadcom Corporation5* Copyright 2006, 2007, Michael Buesch <[email protected]>6*7* Licensed under the GNU/GPL. See COPYING for details.8*/910#include "bcma_private.h"11#include <linux/bcma/bcma.h>1213static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset,14u32 mask, u32 value)15{16value &= mask;17value |= bcma_cc_read32(cc, offset) & ~mask;18bcma_cc_write32(cc, offset, value);1920return value;21}2223void bcma_core_chipcommon_init(struct bcma_drv_cc *cc)24{25if (cc->core->id.rev >= 11)26cc->status = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT);27cc->capabilities = bcma_cc_read32(cc, BCMA_CC_CAP);28if (cc->core->id.rev >= 35)29cc->capabilities_ext = bcma_cc_read32(cc, BCMA_CC_CAP_EXT);3031if (cc->core->id.rev >= 20) {32bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, 0);33bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, 0);34}3536if (cc->capabilities & BCMA_CC_CAP_PMU)37bcma_pmu_init(cc);38if (cc->capabilities & BCMA_CC_CAP_PCTL)39pr_err("Power control not implemented!\n");40}4142/* Set chip watchdog reset timer to fire in 'ticks' backplane cycles */43void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks)44{45/* instant NMI */46bcma_cc_write32(cc, BCMA_CC_WATCHDOG, ticks);47}4849void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value)50{51bcma_cc_write32_masked(cc, BCMA_CC_IRQMASK, mask, value);52}5354u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask)55{56return bcma_cc_read32(cc, BCMA_CC_IRQSTAT) & mask;57}5859u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask)60{61return bcma_cc_read32(cc, BCMA_CC_GPIOIN) & mask;62}6364u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value)65{66return bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUT, mask, value);67}6869u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value)70{71return bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUTEN, mask, value);72}7374u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value)75{76return bcma_cc_write32_masked(cc, BCMA_CC_GPIOCTL, mask, value);77}78EXPORT_SYMBOL_GPL(bcma_chipco_gpio_control);7980u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value)81{82return bcma_cc_write32_masked(cc, BCMA_CC_GPIOIRQ, mask, value);83}8485u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value)86{87return bcma_cc_write32_masked(cc, BCMA_CC_GPIOPOL, mask, value);88}899091