예제 #1
0
파일: bb_cfg.c 프로젝트: 020gzh/linux
bool rtl88eu_phy_bb_config(struct adapter *adapt)
{
	int rtstatus = true;
	struct hal_data_8188e	*hal_data = GET_HAL_DATA(adapt);
	u32 regval;
	u8 crystal_cap;

	rtl88e_phy_init_bb_rf_register_definition(adapt);

	/*  Enable BB and RF */
	regval = usb_read16(adapt, REG_SYS_FUNC_EN);
	usb_write16(adapt, REG_SYS_FUNC_EN,
		    (u16)(regval | BIT(13) | BIT(0) | BIT(1)));

	usb_write8(adapt, REG_RF_CTRL, RF_EN | RF_RSTB | RF_SDMRSTB);

	usb_write8(adapt, REG_SYS_FUNC_EN, FEN_USBA |
		   FEN_USBD | FEN_BB_GLB_RSTn | FEN_BBRSTB);

	/*  Config BB and AGC */
	rtstatus = config_parafile(adapt);

	/*  write 0x24[16:11] = 0x24[22:17] = crystal_cap */
	crystal_cap = hal_data->CrystalCap & 0x3F;
	phy_set_bb_reg(adapt, REG_AFE_XTAL_CTRL, 0x7ff800,
		       (crystal_cap | (crystal_cap << 6)));

	return rtstatus;
}
예제 #2
0
파일: rtw_debug.c 프로젝트: 19Dan01/linux
int proc_set_write_reg(struct file *file, const char __user *buffer,
		unsigned long count, void *data)
{
	struct net_device *dev = data;
	struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
	char tmp[32];
	u32 addr, val, len;

	if (count < 3) {
		DBG_88E("argument size is less than 3\n");
		return -EFAULT;
	}

	if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
		int num = sscanf(tmp, "%x %x %x", &addr, &val, &len);

		if (num !=  3) {
			DBG_88E("invalid write_reg parameter!\n");
			return count;
		}
		switch (len) {
		case 1:
			usb_write8(padapter, addr, (u8)val);
			break;
		case 2:
			usb_write16(padapter, addr, (u16)val);
			break;
		case 4:
			usb_write32(padapter, addr, val);
			break;
		default:
			DBG_88E("error write length =%d", len);
			break;
		}
	}
	return count;
}