Lines Matching refs:chip

34 void zd_chip_init(struct zd_chip *chip,  in zd_chip_init()  argument
38 memset(chip, 0, sizeof(*chip)); in zd_chip_init()
39 mutex_init(&chip->mutex); in zd_chip_init()
40 zd_usb_init(&chip->usb, hw, intf); in zd_chip_init()
41 zd_rf_init(&chip->rf); in zd_chip_init()
44 void zd_chip_clear(struct zd_chip *chip) in zd_chip_clear() argument
46 ZD_ASSERT(!mutex_is_locked(&chip->mutex)); in zd_chip_clear()
47 zd_usb_clear(&chip->usb); in zd_chip_clear()
48 zd_rf_clear(&chip->rf); in zd_chip_clear()
49 mutex_destroy(&chip->mutex); in zd_chip_clear()
50 ZD_MEMCLEAR(chip, sizeof(*chip)); in zd_chip_clear()
53 static int scnprint_mac_oui(struct zd_chip *chip, char *buffer, size_t size) in scnprint_mac_oui() argument
55 u8 *addr = zd_mac_get_perm_addr(zd_chip_to_mac(chip)); in scnprint_mac_oui()
61 static int scnprint_id(struct zd_chip *chip, char *buffer, size_t size) in scnprint_id() argument
66 zd_chip_is_zd1211b(chip) ? "b" : ""); in scnprint_id()
67 i += zd_usb_scnprint_id(&chip->usb, buffer+i, size-i); in scnprint_id()
69 i += scnprint_mac_oui(chip, buffer+i, size-i); in scnprint_id()
71 i += zd_rf_scnprint_id(&chip->rf, buffer+i, size-i); in scnprint_id()
72 i += scnprintf(buffer+i, size-i, " pa%1x %c%c%c%c%c", chip->pa_type, in scnprint_id()
73 chip->patch_cck_gain ? 'g' : '-', in scnprint_id()
74 chip->patch_cr157 ? '7' : '-', in scnprint_id()
75 chip->patch_6m_band_edge ? '6' : '-', in scnprint_id()
76 chip->new_phy_layout ? 'N' : '-', in scnprint_id()
77 chip->al2230s_bit ? 'S' : '-'); in scnprint_id()
81 static void print_id(struct zd_chip *chip) in print_id() argument
85 scnprint_id(chip, buffer, sizeof(buffer)); in print_id()
87 dev_info(zd_chip_dev(chip), "%s\n", buffer); in print_id()
105 int zd_ioread32v_locked(struct zd_chip *chip, u32 *values, const zd_addr_t *addr, in zd_ioread32v_locked() argument
129 r = zd_ioread16v_locked(chip, v16, a16, count16); in zd_ioread32v_locked()
131 dev_dbg_f(zd_chip_dev(chip), in zd_ioread32v_locked()
144 static int _zd_iowrite32v_async_locked(struct zd_chip *chip, in _zd_iowrite32v_async_locked() argument
154 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in _zd_iowrite32v_async_locked()
173 r = zd_usb_iowrite16v_async(&chip->usb, ioreqs16, count16); in _zd_iowrite32v_async_locked()
176 dev_dbg_f(zd_chip_dev(chip), in _zd_iowrite32v_async_locked()
183 int _zd_iowrite32v_locked(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs, in _zd_iowrite32v_locked() argument
188 zd_usb_iowrite16v_async_start(&chip->usb); in _zd_iowrite32v_locked()
189 r = _zd_iowrite32v_async_locked(chip, ioreqs, count); in _zd_iowrite32v_locked()
191 zd_usb_iowrite16v_async_end(&chip->usb, 0); in _zd_iowrite32v_locked()
194 return zd_usb_iowrite16v_async_end(&chip->usb, 50 /* ms */); in _zd_iowrite32v_locked()
197 int zd_iowrite16a_locked(struct zd_chip *chip, in zd_iowrite16a_locked() argument
203 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in zd_iowrite16a_locked()
204 zd_usb_iowrite16v_async_start(&chip->usb); in zd_iowrite16a_locked()
218 r = zd_usb_iowrite16v_async(&chip->usb, &ioreqs[i], j); in zd_iowrite16a_locked()
220 zd_usb_iowrite16v_async_end(&chip->usb, 0); in zd_iowrite16a_locked()
221 dev_dbg_f(zd_chip_dev(chip), in zd_iowrite16a_locked()
228 return zd_usb_iowrite16v_async_end(&chip->usb, 50 /* ms */); in zd_iowrite16a_locked()
235 int zd_iowrite32a_locked(struct zd_chip *chip, in zd_iowrite32a_locked() argument
241 zd_usb_iowrite16v_async_start(&chip->usb); in zd_iowrite32a_locked()
255 r = _zd_iowrite32v_async_locked(chip, &ioreqs[i], j); in zd_iowrite32a_locked()
257 zd_usb_iowrite16v_async_end(&chip->usb, 0); in zd_iowrite32a_locked()
258 dev_dbg_f(zd_chip_dev(chip), in zd_iowrite32a_locked()
265 return zd_usb_iowrite16v_async_end(&chip->usb, 50 /* ms */); in zd_iowrite32a_locked()
268 int zd_ioread16(struct zd_chip *chip, zd_addr_t addr, u16 *value) in zd_ioread16() argument
272 mutex_lock(&chip->mutex); in zd_ioread16()
273 r = zd_ioread16_locked(chip, value, addr); in zd_ioread16()
274 mutex_unlock(&chip->mutex); in zd_ioread16()
278 int zd_ioread32(struct zd_chip *chip, zd_addr_t addr, u32 *value) in zd_ioread32() argument
282 mutex_lock(&chip->mutex); in zd_ioread32()
283 r = zd_ioread32_locked(chip, value, addr); in zd_ioread32()
284 mutex_unlock(&chip->mutex); in zd_ioread32()
288 int zd_iowrite16(struct zd_chip *chip, zd_addr_t addr, u16 value) in zd_iowrite16() argument
292 mutex_lock(&chip->mutex); in zd_iowrite16()
293 r = zd_iowrite16_locked(chip, value, addr); in zd_iowrite16()
294 mutex_unlock(&chip->mutex); in zd_iowrite16()
298 int zd_iowrite32(struct zd_chip *chip, zd_addr_t addr, u32 value) in zd_iowrite32() argument
302 mutex_lock(&chip->mutex); in zd_iowrite32()
303 r = zd_iowrite32_locked(chip, value, addr); in zd_iowrite32()
304 mutex_unlock(&chip->mutex); in zd_iowrite32()
308 int zd_ioread32v(struct zd_chip *chip, const zd_addr_t *addresses, in zd_ioread32v() argument
313 mutex_lock(&chip->mutex); in zd_ioread32v()
314 r = zd_ioread32v_locked(chip, values, addresses, count); in zd_ioread32v()
315 mutex_unlock(&chip->mutex); in zd_ioread32v()
319 int zd_iowrite32a(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs, in zd_iowrite32a() argument
324 mutex_lock(&chip->mutex); in zd_iowrite32a()
325 r = zd_iowrite32a_locked(chip, ioreqs, count); in zd_iowrite32a()
326 mutex_unlock(&chip->mutex); in zd_iowrite32a()
330 static int read_pod(struct zd_chip *chip, u8 *rf_type) in read_pod() argument
335 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in read_pod()
336 r = zd_ioread32_locked(chip, &value, E2P_POD); in read_pod()
339 dev_dbg_f(zd_chip_dev(chip), "E2P_POD %#010x\n", value); in read_pod()
343 chip->pa_type = (value >> 16) & 0x0f; in read_pod()
344 chip->patch_cck_gain = (value >> 8) & 0x1; in read_pod()
345 chip->patch_cr157 = (value >> 13) & 0x1; in read_pod()
346 chip->patch_6m_band_edge = (value >> 21) & 0x1; in read_pod()
347 chip->new_phy_layout = (value >> 31) & 0x1; in read_pod()
348 chip->al2230s_bit = (value >> 7) & 0x1; in read_pod()
349 chip->link_led = ((value >> 4) & 1) ? LED1 : LED2; in read_pod()
350 chip->supports_tx_led = 1; in read_pod()
353 chip->supports_tx_led = 0; in read_pod()
356 dev_dbg_f(zd_chip_dev(chip), in read_pod()
360 chip->pa_type, chip->patch_cck_gain, in read_pod()
361 chip->patch_cr157, chip->patch_6m_band_edge, in read_pod()
362 chip->new_phy_layout, in read_pod()
363 chip->link_led == LED1 ? 1 : 2, in read_pod()
364 chip->supports_tx_led); in read_pod()
368 chip->pa_type = 0; in read_pod()
369 chip->patch_cck_gain = 0; in read_pod()
370 chip->patch_cr157 = 0; in read_pod()
371 chip->patch_6m_band_edge = 0; in read_pod()
372 chip->new_phy_layout = 0; in read_pod()
376 static int zd_write_mac_addr_common(struct zd_chip *chip, const u8 *mac_addr, in zd_write_mac_addr_common() argument
390 dev_dbg_f(zd_chip_dev(chip), "%s addr %pM\n", type, mac_addr); in zd_write_mac_addr_common()
392 dev_dbg_f(zd_chip_dev(chip), "set NULL %s\n", type); in zd_write_mac_addr_common()
395 mutex_lock(&chip->mutex); in zd_write_mac_addr_common()
396 r = zd_iowrite32a_locked(chip, reqs, ARRAY_SIZE(reqs)); in zd_write_mac_addr_common()
397 mutex_unlock(&chip->mutex); in zd_write_mac_addr_common()
404 int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr) in zd_write_mac_addr() argument
411 return zd_write_mac_addr_common(chip, mac_addr, reqs, "mac"); in zd_write_mac_addr()
414 int zd_write_bssid(struct zd_chip *chip, const u8 *bssid) in zd_write_bssid() argument
421 return zd_write_mac_addr_common(chip, bssid, reqs, "bssid"); in zd_write_bssid()
424 int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain) in zd_read_regdomain() argument
429 mutex_lock(&chip->mutex); in zd_read_regdomain()
430 r = zd_ioread32_locked(chip, &value, E2P_SUBID); in zd_read_regdomain()
431 mutex_unlock(&chip->mutex); in zd_read_regdomain()
436 dev_dbg_f(zd_chip_dev(chip), "regdomain: %#04x\n", *regdomain); in zd_read_regdomain()
441 static int read_values(struct zd_chip *chip, u8 *values, size_t count, in read_values() argument
448 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in read_values()
450 r = zd_ioread32_locked(chip, &v, in read_values()
468 static int read_pwr_cal_values(struct zd_chip *chip) in read_pwr_cal_values() argument
470 return read_values(chip, chip->pwr_cal_values, in read_pwr_cal_values()
475 static int read_pwr_int_values(struct zd_chip *chip) in read_pwr_int_values() argument
477 return read_values(chip, chip->pwr_int_values, in read_pwr_int_values()
482 static int read_ofdm_cal_values(struct zd_chip *chip) in read_ofdm_cal_values() argument
493 r = read_values(chip, chip->ofdm_cal_values[i], in read_ofdm_cal_values()
501 static int read_cal_int_tables(struct zd_chip *chip) in read_cal_int_tables() argument
505 r = read_pwr_cal_values(chip); in read_cal_int_tables()
508 r = read_pwr_int_values(chip); in read_cal_int_tables()
511 r = read_ofdm_cal_values(chip); in read_cal_int_tables()
518 int zd_chip_lock_phy_regs(struct zd_chip *chip) in zd_chip_lock_phy_regs() argument
523 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in zd_chip_lock_phy_regs()
524 r = zd_ioread32_locked(chip, &tmp, CR_REG1); in zd_chip_lock_phy_regs()
526 dev_err(zd_chip_dev(chip), "error ioread32(CR_REG1): %d\n", r); in zd_chip_lock_phy_regs()
532 r = zd_iowrite32_locked(chip, tmp, CR_REG1); in zd_chip_lock_phy_regs()
534 dev_err(zd_chip_dev(chip), "error iowrite32(CR_REG1): %d\n", r); in zd_chip_lock_phy_regs()
538 int zd_chip_unlock_phy_regs(struct zd_chip *chip) in zd_chip_unlock_phy_regs() argument
543 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in zd_chip_unlock_phy_regs()
544 r = zd_ioread32_locked(chip, &tmp, CR_REG1); in zd_chip_unlock_phy_regs()
546 dev_err(zd_chip_dev(chip), in zd_chip_unlock_phy_regs()
553 r = zd_iowrite32_locked(chip, tmp, CR_REG1); in zd_chip_unlock_phy_regs()
555 dev_err(zd_chip_dev(chip), "error iowrite32(CR_REG1): %d\n", r); in zd_chip_unlock_phy_regs()
560 static int patch_cr157(struct zd_chip *chip) in patch_cr157() argument
565 if (!chip->patch_cr157) in patch_cr157()
568 r = zd_ioread16_locked(chip, &value, E2P_PHY_REG); in patch_cr157()
572 dev_dbg_f(zd_chip_dev(chip), "patching value %x\n", value >> 8); in patch_cr157()
573 return zd_iowrite32_locked(chip, value >> 8, ZD_CR157); in patch_cr157()
581 static int patch_6m_band_edge(struct zd_chip *chip, u8 channel) in patch_6m_band_edge() argument
583 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in patch_6m_band_edge()
584 if (!chip->patch_6m_band_edge) in patch_6m_band_edge()
587 return zd_rf_patch_6m_band_edge(&chip->rf, channel); in patch_6m_band_edge()
592 int zd_chip_generic_patch_6m_band(struct zd_chip *chip, int channel) in zd_chip_generic_patch_6m_band() argument
603 dev_dbg_f(zd_chip_dev(chip), "patching for channel %d\n", channel); in zd_chip_generic_patch_6m_band()
604 return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in zd_chip_generic_patch_6m_band()
607 static int zd1211_hw_reset_phy(struct zd_chip *chip) in zd1211_hw_reset_phy() argument
677 dev_dbg_f(zd_chip_dev(chip), "\n"); in zd1211_hw_reset_phy()
679 r = zd_chip_lock_phy_regs(chip); in zd1211_hw_reset_phy()
683 r = zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in zd1211_hw_reset_phy()
687 r = patch_cr157(chip); in zd1211_hw_reset_phy()
689 t = zd_chip_unlock_phy_regs(chip); in zd1211_hw_reset_phy()
696 static int zd1211b_hw_reset_phy(struct zd_chip *chip) in zd1211b_hw_reset_phy() argument
759 dev_dbg_f(zd_chip_dev(chip), "\n"); in zd1211b_hw_reset_phy()
761 r = zd_chip_lock_phy_regs(chip); in zd1211b_hw_reset_phy()
765 r = zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in zd1211b_hw_reset_phy()
766 t = zd_chip_unlock_phy_regs(chip); in zd1211b_hw_reset_phy()
773 static int hw_reset_phy(struct zd_chip *chip) in hw_reset_phy() argument
775 return zd_chip_is_zd1211b(chip) ? zd1211b_hw_reset_phy(chip) : in hw_reset_phy()
776 zd1211_hw_reset_phy(chip); in hw_reset_phy()
779 static int zd1211_hw_init_hmac(struct zd_chip *chip) in zd1211_hw_init_hmac() argument
786 dev_dbg_f(zd_chip_dev(chip), "\n"); in zd1211_hw_init_hmac()
787 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in zd1211_hw_init_hmac()
788 return zd_iowrite32a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in zd1211_hw_init_hmac()
791 static int zd1211b_hw_init_hmac(struct zd_chip *chip) in zd1211b_hw_init_hmac() argument
805 dev_dbg_f(zd_chip_dev(chip), "\n"); in zd1211b_hw_init_hmac()
806 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in zd1211b_hw_init_hmac()
807 return zd_iowrite32a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in zd1211b_hw_init_hmac()
810 static int hw_init_hmac(struct zd_chip *chip) in hw_init_hmac() argument
836 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in hw_init_hmac()
837 r = zd_iowrite32a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in hw_init_hmac()
841 return zd_chip_is_zd1211b(chip) ? in hw_init_hmac()
842 zd1211b_hw_init_hmac(chip) : zd1211_hw_init_hmac(chip); in hw_init_hmac()
851 static int get_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s) in get_aw_pt_bi() argument
858 r = zd_ioread32v_locked(chip, values, (const zd_addr_t *)aw_pt_bi_addr, in get_aw_pt_bi()
871 static int set_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s) in set_aw_pt_bi() argument
890 return zd_iowrite32a_locked(chip, reqs, ARRAY_SIZE(reqs)); in set_aw_pt_bi()
894 static int set_beacon_interval(struct zd_chip *chip, u16 interval, in set_beacon_interval() argument
901 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in set_beacon_interval()
923 r = zd_iowrite32_locked(chip, b_interval, CR_BCN_INTERVAL); in set_beacon_interval()
926 r = get_aw_pt_bi(chip, &s); in set_beacon_interval()
929 return set_aw_pt_bi(chip, &s); in set_beacon_interval()
932 int zd_set_beacon_interval(struct zd_chip *chip, u16 interval, u8 dtim_period, in zd_set_beacon_interval() argument
937 mutex_lock(&chip->mutex); in zd_set_beacon_interval()
938 r = set_beacon_interval(chip, interval, dtim_period, type); in zd_set_beacon_interval()
939 mutex_unlock(&chip->mutex); in zd_set_beacon_interval()
943 static int hw_init(struct zd_chip *chip) in hw_init() argument
947 dev_dbg_f(zd_chip_dev(chip), "\n"); in hw_init()
948 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in hw_init()
949 r = hw_reset_phy(chip); in hw_init()
953 r = hw_init_hmac(chip); in hw_init()
957 return set_beacon_interval(chip, 100, 0, NL80211_IFTYPE_UNSPECIFIED); in hw_init()
960 static zd_addr_t fw_reg_addr(struct zd_chip *chip, u16 offset) in fw_reg_addr() argument
962 return (zd_addr_t)((u16)chip->fw_regs_base + offset); in fw_reg_addr()
966 static int dump_cr(struct zd_chip *chip, const zd_addr_t addr, in dump_cr() argument
972 r = zd_ioread32_locked(chip, &value, addr); in dump_cr()
974 dev_dbg_f(zd_chip_dev(chip), in dump_cr()
979 dev_dbg_f(zd_chip_dev(chip), "%s %#010x\n", in dump_cr()
984 static int test_init(struct zd_chip *chip) in test_init() argument
988 r = dump_cr(chip, CR_AFTER_PNP, "CR_AFTER_PNP"); in test_init()
991 r = dump_cr(chip, CR_GPI_EN, "CR_GPI_EN"); in test_init()
994 return dump_cr(chip, CR_INTERRUPT, "CR_INTERRUPT"); in test_init()
997 static void dump_fw_registers(struct zd_chip *chip) in dump_fw_registers() argument
1000 fw_reg_addr(chip, FW_REG_FIRMWARE_VER), in dump_fw_registers()
1001 fw_reg_addr(chip, FW_REG_USB_SPEED), in dump_fw_registers()
1002 fw_reg_addr(chip, FW_REG_FIX_TX_RATE), in dump_fw_registers()
1003 fw_reg_addr(chip, FW_REG_LED_LINK_STATUS), in dump_fw_registers()
1009 r = zd_ioread16v_locked(chip, values, (const zd_addr_t*)addr, in dump_fw_registers()
1012 dev_dbg_f(zd_chip_dev(chip), "error %d zd_ioread16v_locked\n", in dump_fw_registers()
1017 dev_dbg_f(zd_chip_dev(chip), "FW_FIRMWARE_VER %#06hx\n", values[0]); in dump_fw_registers()
1018 dev_dbg_f(zd_chip_dev(chip), "FW_USB_SPEED %#06hx\n", values[1]); in dump_fw_registers()
1019 dev_dbg_f(zd_chip_dev(chip), "FW_FIX_TX_RATE %#06hx\n", values[2]); in dump_fw_registers()
1020 dev_dbg_f(zd_chip_dev(chip), "FW_LINK_STATUS %#06hx\n", values[3]); in dump_fw_registers()
1024 static int print_fw_version(struct zd_chip *chip) in print_fw_version() argument
1026 struct wiphy *wiphy = zd_chip_to_mac(chip)->hw->wiphy; in print_fw_version()
1030 r = zd_ioread16_locked(chip, &version, in print_fw_version()
1031 fw_reg_addr(chip, FW_REG_FIRMWARE_VER)); in print_fw_version()
1035 dev_info(zd_chip_dev(chip),"firmware version %04hx\n", version); in print_fw_version()
1043 static int set_mandatory_rates(struct zd_chip *chip, int gmode) in set_mandatory_rates() argument
1046 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in set_mandatory_rates()
1057 return zd_iowrite32_locked(chip, rates, CR_MANDATORY_RATE_TBL); in set_mandatory_rates()
1060 int zd_chip_set_rts_cts_rate_locked(struct zd_chip *chip, in zd_chip_set_rts_cts_rate_locked() argument
1065 dev_dbg_f(zd_chip_dev(chip), "preamble=%x\n", preamble); in zd_chip_set_rts_cts_rate_locked()
1075 return zd_iowrite32_locked(chip, value, CR_RTS_CTS_RATE); in zd_chip_set_rts_cts_rate_locked()
1078 int zd_chip_enable_hwint(struct zd_chip *chip) in zd_chip_enable_hwint() argument
1082 mutex_lock(&chip->mutex); in zd_chip_enable_hwint()
1083 r = zd_iowrite32_locked(chip, HWINT_ENABLED, CR_INTERRUPT); in zd_chip_enable_hwint()
1084 mutex_unlock(&chip->mutex); in zd_chip_enable_hwint()
1088 static int disable_hwint(struct zd_chip *chip) in disable_hwint() argument
1090 return zd_iowrite32_locked(chip, HWINT_DISABLED, CR_INTERRUPT); in disable_hwint()
1093 int zd_chip_disable_hwint(struct zd_chip *chip) in zd_chip_disable_hwint() argument
1097 mutex_lock(&chip->mutex); in zd_chip_disable_hwint()
1098 r = disable_hwint(chip); in zd_chip_disable_hwint()
1099 mutex_unlock(&chip->mutex); in zd_chip_disable_hwint()
1103 static int read_fw_regs_offset(struct zd_chip *chip) in read_fw_regs_offset() argument
1107 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in read_fw_regs_offset()
1108 r = zd_ioread16_locked(chip, (u16*)&chip->fw_regs_base, in read_fw_regs_offset()
1112 dev_dbg_f(zd_chip_dev(chip), "fw_regs_base: %#06hx\n", in read_fw_regs_offset()
1113 (u16)chip->fw_regs_base); in read_fw_regs_offset()
1119 int zd_chip_read_mac_addr_fw(struct zd_chip *chip, u8 *addr) in zd_chip_read_mac_addr_fw() argument
1121 dev_dbg_f(zd_chip_dev(chip), "\n"); in zd_chip_read_mac_addr_fw()
1122 return zd_usb_read_fw(&chip->usb, E2P_MAC_ADDR_P1, addr, in zd_chip_read_mac_addr_fw()
1126 int zd_chip_init_hw(struct zd_chip *chip) in zd_chip_init_hw() argument
1131 dev_dbg_f(zd_chip_dev(chip), "\n"); in zd_chip_init_hw()
1133 mutex_lock(&chip->mutex); in zd_chip_init_hw()
1136 r = test_init(chip); in zd_chip_init_hw()
1140 r = zd_iowrite32_locked(chip, 1, CR_AFTER_PNP); in zd_chip_init_hw()
1144 r = read_fw_regs_offset(chip); in zd_chip_init_hw()
1150 r = zd_iowrite32_locked(chip, 0, CR_GPI_EN); in zd_chip_init_hw()
1153 r = zd_iowrite32_locked(chip, CWIN_SIZE, CR_CWMIN_CWMAX); in zd_chip_init_hw()
1160 r = set_mandatory_rates(chip, 1); in zd_chip_init_hw()
1165 r = disable_hwint(chip); in zd_chip_init_hw()
1168 r = read_pod(chip, &rf_type); in zd_chip_init_hw()
1171 r = hw_init(chip); in zd_chip_init_hw()
1174 r = zd_rf_init_hw(&chip->rf, rf_type); in zd_chip_init_hw()
1178 r = print_fw_version(chip); in zd_chip_init_hw()
1183 dump_fw_registers(chip); in zd_chip_init_hw()
1184 r = test_init(chip); in zd_chip_init_hw()
1189 r = read_cal_int_tables(chip); in zd_chip_init_hw()
1193 print_id(chip); in zd_chip_init_hw()
1195 mutex_unlock(&chip->mutex); in zd_chip_init_hw()
1199 static int update_pwr_int(struct zd_chip *chip, u8 channel) in update_pwr_int() argument
1201 u8 value = chip->pwr_int_values[channel - 1]; in update_pwr_int()
1202 return zd_iowrite16_locked(chip, value, ZD_CR31); in update_pwr_int()
1205 static int update_pwr_cal(struct zd_chip *chip, u8 channel) in update_pwr_cal() argument
1207 u8 value = chip->pwr_cal_values[channel-1]; in update_pwr_cal()
1208 return zd_iowrite16_locked(chip, value, ZD_CR68); in update_pwr_cal()
1211 static int update_ofdm_cal(struct zd_chip *chip, u8 channel) in update_ofdm_cal() argument
1216 ioreqs[0].value = chip->ofdm_cal_values[OFDM_36M_INDEX][channel-1]; in update_ofdm_cal()
1218 ioreqs[1].value = chip->ofdm_cal_values[OFDM_48M_INDEX][channel-1]; in update_ofdm_cal()
1220 ioreqs[2].value = chip->ofdm_cal_values[OFDM_54M_INDEX][channel-1]; in update_ofdm_cal()
1222 return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in update_ofdm_cal()
1225 static int update_channel_integration_and_calibration(struct zd_chip *chip, in update_channel_integration_and_calibration() argument
1230 if (!zd_rf_should_update_pwr_int(&chip->rf)) in update_channel_integration_and_calibration()
1233 r = update_pwr_int(chip, channel); in update_channel_integration_and_calibration()
1236 if (zd_chip_is_zd1211b(chip)) { in update_channel_integration_and_calibration()
1243 r = update_ofdm_cal(chip, channel); in update_channel_integration_and_calibration()
1246 r = update_pwr_cal(chip, channel); in update_channel_integration_and_calibration()
1249 r = zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in update_channel_integration_and_calibration()
1258 static int patch_cck_gain(struct zd_chip *chip) in patch_cck_gain() argument
1263 if (!chip->patch_cck_gain || !zd_rf_should_patch_cck_gain(&chip->rf)) in patch_cck_gain()
1266 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in patch_cck_gain()
1267 r = zd_ioread32_locked(chip, &value, E2P_PHY_REG); in patch_cck_gain()
1270 dev_dbg_f(zd_chip_dev(chip), "patching value %x\n", value & 0xff); in patch_cck_gain()
1271 return zd_iowrite16_locked(chip, value & 0xff, ZD_CR47); in patch_cck_gain()
1274 int zd_chip_set_channel(struct zd_chip *chip, u8 channel) in zd_chip_set_channel() argument
1278 mutex_lock(&chip->mutex); in zd_chip_set_channel()
1279 r = zd_chip_lock_phy_regs(chip); in zd_chip_set_channel()
1282 r = zd_rf_set_channel(&chip->rf, channel); in zd_chip_set_channel()
1285 r = update_channel_integration_and_calibration(chip, channel); in zd_chip_set_channel()
1288 r = patch_cck_gain(chip); in zd_chip_set_channel()
1291 r = patch_6m_band_edge(chip, channel); in zd_chip_set_channel()
1294 r = zd_iowrite32_locked(chip, 0, CR_CONFIG_PHILIPS); in zd_chip_set_channel()
1296 t = zd_chip_unlock_phy_regs(chip); in zd_chip_set_channel()
1300 mutex_unlock(&chip->mutex); in zd_chip_set_channel()
1304 u8 zd_chip_get_channel(struct zd_chip *chip) in zd_chip_get_channel() argument
1308 mutex_lock(&chip->mutex); in zd_chip_get_channel()
1309 channel = chip->rf.channel; in zd_chip_get_channel()
1310 mutex_unlock(&chip->mutex); in zd_chip_get_channel()
1314 int zd_chip_control_leds(struct zd_chip *chip, enum led_status status) in zd_chip_control_leds() argument
1317 fw_reg_addr(chip, FW_REG_LED_LINK_STATUS), in zd_chip_control_leds()
1324 [0] = { fw_reg_addr(chip, FW_REG_LED_LINK_STATUS) }, in zd_chip_control_leds()
1329 mutex_lock(&chip->mutex); in zd_chip_control_leds()
1330 r = zd_ioread16v_locked(chip, v, (const zd_addr_t *)a, ARRAY_SIZE(a)); in zd_chip_control_leds()
1334 other_led = chip->link_led == LED1 ? LED2 : LED1; in zd_chip_control_leds()
1345 ioreqs[1].value &= ~chip->link_led; in zd_chip_control_leds()
1347 ioreqs[1].value |= chip->link_led; in zd_chip_control_leds()
1353 ioreqs[1].value |= chip->link_led; in zd_chip_control_leds()
1361 r = zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in zd_chip_control_leds()
1367 mutex_unlock(&chip->mutex); in zd_chip_control_leds()
1371 int zd_chip_set_basic_rates(struct zd_chip *chip, u16 cr_rates) in zd_chip_set_basic_rates() argument
1378 mutex_lock(&chip->mutex); in zd_chip_set_basic_rates()
1379 r = zd_iowrite32_locked(chip, cr_rates, CR_BASIC_RATE_TBL); in zd_chip_set_basic_rates()
1380 mutex_unlock(&chip->mutex); in zd_chip_set_basic_rates()
1424 int zd_chip_switch_radio_on(struct zd_chip *chip) in zd_chip_switch_radio_on() argument
1428 mutex_lock(&chip->mutex); in zd_chip_switch_radio_on()
1429 r = zd_switch_radio_on(&chip->rf); in zd_chip_switch_radio_on()
1430 mutex_unlock(&chip->mutex); in zd_chip_switch_radio_on()
1434 int zd_chip_switch_radio_off(struct zd_chip *chip) in zd_chip_switch_radio_off() argument
1438 mutex_lock(&chip->mutex); in zd_chip_switch_radio_off()
1439 r = zd_switch_radio_off(&chip->rf); in zd_chip_switch_radio_off()
1440 mutex_unlock(&chip->mutex); in zd_chip_switch_radio_off()
1444 int zd_chip_enable_int(struct zd_chip *chip) in zd_chip_enable_int() argument
1448 mutex_lock(&chip->mutex); in zd_chip_enable_int()
1449 r = zd_usb_enable_int(&chip->usb); in zd_chip_enable_int()
1450 mutex_unlock(&chip->mutex); in zd_chip_enable_int()
1454 void zd_chip_disable_int(struct zd_chip *chip) in zd_chip_disable_int() argument
1456 mutex_lock(&chip->mutex); in zd_chip_disable_int()
1457 zd_usb_disable_int(&chip->usb); in zd_chip_disable_int()
1458 mutex_unlock(&chip->mutex); in zd_chip_disable_int()
1461 cancel_work_sync(&zd_chip_to_mac(chip)->process_intr); in zd_chip_disable_int()
1464 int zd_chip_enable_rxtx(struct zd_chip *chip) in zd_chip_enable_rxtx() argument
1468 mutex_lock(&chip->mutex); in zd_chip_enable_rxtx()
1469 zd_usb_enable_tx(&chip->usb); in zd_chip_enable_rxtx()
1470 r = zd_usb_enable_rx(&chip->usb); in zd_chip_enable_rxtx()
1471 zd_tx_watchdog_enable(&chip->usb); in zd_chip_enable_rxtx()
1472 mutex_unlock(&chip->mutex); in zd_chip_enable_rxtx()
1476 void zd_chip_disable_rxtx(struct zd_chip *chip) in zd_chip_disable_rxtx() argument
1478 mutex_lock(&chip->mutex); in zd_chip_disable_rxtx()
1479 zd_tx_watchdog_disable(&chip->usb); in zd_chip_disable_rxtx()
1480 zd_usb_disable_rx(&chip->usb); in zd_chip_disable_rxtx()
1481 zd_usb_disable_tx(&chip->usb); in zd_chip_disable_rxtx()
1482 mutex_unlock(&chip->mutex); in zd_chip_disable_rxtx()
1485 int zd_rfwritev_locked(struct zd_chip *chip, in zd_rfwritev_locked() argument
1492 r = zd_rfwrite_locked(chip, values[i], bits); in zd_rfwritev_locked()
1504 int zd_rfwrite_cr_locked(struct zd_chip *chip, u32 value) in zd_rfwrite_cr_locked() argument
1511 ZD_ASSERT(mutex_is_locked(&chip->mutex)); in zd_rfwrite_cr_locked()
1512 return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs)); in zd_rfwrite_cr_locked()
1515 int zd_rfwritev_cr_locked(struct zd_chip *chip, in zd_rfwritev_cr_locked() argument
1522 r = zd_rfwrite_cr_locked(chip, values[i]); in zd_rfwritev_cr_locked()
1530 int zd_chip_set_multicast_hash(struct zd_chip *chip, in zd_chip_set_multicast_hash() argument
1538 return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs)); in zd_chip_set_multicast_hash()
1541 u64 zd_chip_get_tsf(struct zd_chip *chip) in zd_chip_get_tsf() argument
1549 mutex_lock(&chip->mutex); in zd_chip_get_tsf()
1550 r = zd_ioread32v_locked(chip, values, (const zd_addr_t *)aw_pt_bi_addr, in zd_chip_get_tsf()
1552 mutex_unlock(&chip->mutex); in zd_chip_get_tsf()