diff options
Diffstat (limited to 'drivers/staging/rts5208')
-rw-r--r-- | drivers/staging/rts5208/Kconfig | 7 | ||||
-rw-r--r-- | drivers/staging/rts5208/general.c | 1 | ||||
-rw-r--r-- | drivers/staging/rts5208/ms.c | 12 | ||||
-rw-r--r-- | drivers/staging/rts5208/rtsx.c | 13 | ||||
-rw-r--r-- | drivers/staging/rts5208/rtsx_card.h | 4 | ||||
-rw-r--r-- | drivers/staging/rts5208/rtsx_chip.c | 20 | ||||
-rw-r--r-- | drivers/staging/rts5208/rtsx_scsi.c | 15 | ||||
-rw-r--r-- | drivers/staging/rts5208/sd.c | 17 | ||||
-rw-r--r-- | drivers/staging/rts5208/trace.h | 8 |
9 files changed, 46 insertions, 51 deletions
diff --git a/drivers/staging/rts5208/Kconfig b/drivers/staging/rts5208/Kconfig index 055655cecaf7..05c990f654a4 100644 --- a/drivers/staging/rts5208/Kconfig +++ b/drivers/staging/rts5208/Kconfig @@ -6,10 +6,3 @@ config RTS5208 PCI-E card reader rts5208/rts5288. If this driver is compiled as a module, it will be named rts5208. - -config RTS5208_DEBUG - bool "Realtek PCI-E Card Reader RTS5208/5288 verbose debug" - depends on RTS5208 - help - Say Y here in order to have the rts5208 code generate - verbose debugging messages. diff --git a/drivers/staging/rts5208/general.c b/drivers/staging/rts5208/general.c index eada934288b2..79d245877264 100644 --- a/drivers/staging/rts5208/general.c +++ b/drivers/staging/rts5208/general.c @@ -25,6 +25,7 @@ int bit1cnt_long(u32 data) { int i, cnt = 0; + for (i = 0; i < 32; i++) { if (data & 0x01) cnt++; diff --git a/drivers/staging/rts5208/ms.c b/drivers/staging/rts5208/ms.c index 390b1f83ebc2..228e48339b9e 100644 --- a/drivers/staging/rts5208/ms.c +++ b/drivers/staging/rts5208/ms.c @@ -305,7 +305,8 @@ static int ms_read_bytes(struct rtsx_chip *chip, if ((tpc == PRO_READ_SHORT_DATA) && (data_len == 8)) { dev_dbg(rtsx_dev(chip), "Read format progress:\n"); - RTSX_DUMP(ptr, cnt); + print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, ptr, + cnt); } return STATUS_SUCCESS; @@ -861,8 +862,8 @@ static int ms_read_attribute_info(struct rtsx_chip *chip) 0, 0, buf, 64 * 512); if (retval == STATUS_SUCCESS) break; - else - rtsx_clear_ms_error(chip); + + rtsx_clear_ms_error(chip); } if (retval != STATUS_SUCCESS) { kfree(buf); @@ -1913,7 +1914,7 @@ RE_SEARCH: ptr = rtsx_get_cmd_data(chip); dev_dbg(rtsx_dev(chip), "Boot block data:\n"); - RTSX_DUMP(ptr, 16); + dev_dbg(rtsx_dev(chip), "%*ph\n", 16, ptr); /* Block ID error * HEADER_ID0, HEADER_ID1 @@ -2712,6 +2713,7 @@ static int mspro_read_format_progress(struct rtsx_chip *chip, ms_card->progress = 0; } else { u64 ulltmp = (u64)cur_progress * (u64)65535; + do_div(ulltmp, total_progress); ms_card->progress = (u16)ulltmp; } @@ -2775,8 +2777,6 @@ void mspro_polling_format_status(struct rtsx_chip *chip) break; } } - - return; } int mspro_format(struct scsi_cmnd *srb, struct rtsx_chip *chip, diff --git a/drivers/staging/rts5208/rtsx.c b/drivers/staging/rts5208/rtsx.c index e7a6ba2002ae..2d2527c3aea2 100644 --- a/drivers/staging/rts5208/rtsx.c +++ b/drivers/staging/rts5208/rtsx.c @@ -313,7 +313,7 @@ int rtsx_read_pci_cfg_byte(u8 bus, u8 dev, u8 func, u8 offset, u8 *val) */ static int rtsx_suspend(struct pci_dev *pci, pm_message_t state) { - struct rtsx_dev *dev = (struct rtsx_dev *)pci_get_drvdata(pci); + struct rtsx_dev *dev = pci_get_drvdata(pci); struct rtsx_chip *chip; if (!dev) @@ -348,7 +348,7 @@ static int rtsx_suspend(struct pci_dev *pci, pm_message_t state) static int rtsx_resume(struct pci_dev *pci) { - struct rtsx_dev *dev = (struct rtsx_dev *)pci_get_drvdata(pci); + struct rtsx_dev *dev = pci_get_drvdata(pci); struct rtsx_chip *chip; if (!dev) @@ -394,7 +394,7 @@ static int rtsx_resume(struct pci_dev *pci) static void rtsx_shutdown(struct pci_dev *pci) { - struct rtsx_dev *dev = (struct rtsx_dev *)pci_get_drvdata(pci); + struct rtsx_dev *dev = pci_get_drvdata(pci); struct rtsx_chip *chip; if (!dev) @@ -414,8 +414,6 @@ static void rtsx_shutdown(struct pci_dev *pci) pci_disable_msi(pci); pci_disable_device(pci); - - return; } static int rtsx_control_thread(void *__dev) @@ -598,8 +596,7 @@ static irqreturn_t rtsx_interrupt(int irq, void *dev_id) spin_unlock(&dev->reg_lock); if (chip->int_reg == 0xFFFFFFFF) return IRQ_HANDLED; - else - return IRQ_NONE; + return IRQ_NONE; } status = chip->int_reg; @@ -1017,7 +1014,7 @@ errout: static void rtsx_remove(struct pci_dev *pci) { - struct rtsx_dev *dev = (struct rtsx_dev *)pci_get_drvdata(pci); + struct rtsx_dev *dev = pci_get_drvdata(pci); dev_info(&pci->dev, "rtsx_remove() called\n"); diff --git a/drivers/staging/rts5208/rtsx_card.h b/drivers/staging/rts5208/rtsx_card.h index b19239e106f9..75cf5889bda4 100644 --- a/drivers/staging/rts5208/rtsx_card.h +++ b/drivers/staging/rts5208/rtsx_card.h @@ -1037,8 +1037,8 @@ static inline u32 get_card_size(struct rtsx_chip *chip, unsigned int lun) if ((get_lun_card(chip, lun) == SD_CARD) && (sd_card->sd_lock_status & SD_LOCKED)) return 0; - else - return chip->capacity[lun]; + + return chip->capacity[lun]; #else return chip->capacity[lun]; #endif diff --git a/drivers/staging/rts5208/rtsx_chip.c b/drivers/staging/rts5208/rtsx_chip.c index fe98309b7de6..a7ade8b4e7f2 100644 --- a/drivers/staging/rts5208/rtsx_chip.c +++ b/drivers/staging/rts5208/rtsx_chip.c @@ -380,6 +380,7 @@ int rtsx_reset_chip(struct rtsx_chip *chip) if (chip->ic_version >= IC_VER_D) { u16 reg; + retval = rtsx_read_phy_register(chip, 0x00, ®); if (retval != STATUS_SUCCESS) @@ -505,6 +506,7 @@ static inline int check_sd_speed_prior(u32 sd_speed_prior) for (i = 0; i < 4; i++) { u8 tmp = (u8)(sd_speed_prior >> (i*8)); + if ((tmp < 0x01) || (tmp > 0x04)) { fake_para = 1; break; @@ -520,6 +522,7 @@ static inline int check_sd_current_prior(u32 sd_current_prior) for (i = 0; i < 4; i++) { u8 tmp = (u8)(sd_current_prior >> (i*8)); + if (tmp > 0x03) { fake_para = 1; break; @@ -876,6 +879,7 @@ void rtsx_polling_func(struct rtsx_chip *chip) if (chip->polling_config) { u8 val; + rtsx_read_config_byte(chip, 0, &val); } @@ -901,6 +905,7 @@ void rtsx_polling_func(struct rtsx_chip *chip) if (sd_card->sd_erase_status) { if (chip->card_exist & SD_CARD) { u8 val; + rtsx_read_register(chip, 0xFD30, &val); if (val & 0x02) { sd_card->sd_erase_status = SD_NOT_ERASE; @@ -923,6 +928,7 @@ void rtsx_polling_func(struct rtsx_chip *chip) } else { if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) { u32 val; + rtsx_read_cfg_dw(chip, 1, 0x04, &val); if (val & 0x07) ss_allowed = 0; @@ -1140,6 +1146,7 @@ void rtsx_stop_cmd(struct rtsx_chip *chip, int card) for (i = 0; i <= 8; i++) { int addr = RTSX_HCBAR + i * 4; u32 reg; + reg = rtsx_readl(chip, addr); dev_dbg(rtsx_dev(chip), "BAR (0x%02x): 0x%08x\n", addr, reg); } @@ -1149,6 +1156,7 @@ void rtsx_stop_cmd(struct rtsx_chip *chip, int card) for (i = 0; i < 16; i++) { u16 addr = 0xFE20 + (u16)i; u8 val; + rtsx_read_register(chip, addr, &val); dev_dbg(rtsx_dev(chip), "0x%04X: 0x%02x\n", addr, val); } @@ -1309,8 +1317,10 @@ int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf, } } - RTSX_DUMP(mask, dw_len * 4); - RTSX_DUMP(data, dw_len * 4); + print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, mask, + dw_len * 4); + print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, data, + dw_len * 4); for (i = 0; i < dw_len; i++) { retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4, @@ -1597,6 +1607,7 @@ void rtsx_enter_ss(struct rtsx_chip *chip) } else { if (!chip->phy_debug_mode) { u32 tmp; + tmp = rtsx_readl(chip, RTSX_BIER); tmp |= CARD_INT; rtsx_writel(chip, RTSX_BIER, tmp); @@ -1802,6 +1813,7 @@ void rtsx_enable_aspm(struct rtsx_chip *chip) if (CHK_SDIO_EXIST(chip)) { u16 val = chip->aspm_l0s_l1_en | 0x0100; + if (CHECK_PID(chip, 0x5288)) rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, val); @@ -1811,8 +1823,6 @@ void rtsx_enable_aspm(struct rtsx_chip *chip) } } } - - return; } void rtsx_disable_aspm(struct rtsx_chip *chip) @@ -1836,8 +1846,6 @@ void rtsx_disable_aspm(struct rtsx_chip *chip) wait_timeout(1); } } - - return; } int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len) diff --git a/drivers/staging/rts5208/rtsx_scsi.c b/drivers/staging/rts5208/rtsx_scsi.c index 5f5f512714e5..bbbf7968a0b6 100644 --- a/drivers/staging/rts5208/rtsx_scsi.c +++ b/drivers/staging/rts5208/rtsx_scsi.c @@ -39,7 +39,7 @@ void scsi_show_command(struct rtsx_chip *chip) { struct scsi_cmnd *srb = chip->srb; char *what = NULL; - int i, unknown_cmd = 0; + int unknown_cmd = 0, len; switch (srb->cmnd[0]) { case TEST_UNIT_READY: @@ -319,9 +319,8 @@ void scsi_show_command(struct rtsx_chip *chip) what, srb->cmd_len); if (unknown_cmd) { - for (i = 0; i < srb->cmd_len && i < 16; i++) - dev_dbg(rtsx_dev(chip), " %02x", srb->cmnd[i]); - dev_dbg(rtsx_dev(chip), "\n"); + len = min_t(unsigned short, srb->cmd_len, 16); + dev_dbg(rtsx_dev(chip), "%*ph\n", len, srb->cmnd); } } @@ -441,6 +440,7 @@ static int test_unit_ready(struct scsi_cmnd *srb, struct rtsx_chip *chip) #ifdef SUPPORT_SD_LOCK if (get_lun_card(chip, SCSI_LUN(srb)) == SD_CARD) { struct sd_info *sd_card = &(chip->sd_card); + if (sd_card->sd_lock_notify) { sd_card->sd_lock_notify = 0; set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); @@ -586,10 +586,9 @@ static int start_stop_unit(struct scsi_cmnd *srb, struct rtsx_chip *chip) case LOAD_MEDIUM: if (check_card_ready(chip, lun)) { return TRANSPORT_GOOD; - } else { - set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); - TRACE_RET(chip, TRANSPORT_FAILED); } + set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); + TRACE_RET(chip, TRANSPORT_FAILED); break; } @@ -747,6 +746,7 @@ static void ms_mode_sense(struct rtsx_chip *chip, u8 cmd, if (data_size > sys_info_offset) { /* 96 Bytes Attribute Data */ int len = data_size - sys_info_offset; + len = (len < 96) ? len : 96; memcpy(buf + sys_info_offset, ms_card->raw_sys_info, len); @@ -1569,6 +1569,7 @@ static int get_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip) rtsx_stor_set_xfer_buf(&tmp, 1, srb); } else if (srb->cmnd[3] == 2) { u8 tmp = chip->blink_led; + rtsx_stor_set_xfer_buf(&tmp, 1, srb); } else { set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); diff --git a/drivers/staging/rts5208/sd.c b/drivers/staging/rts5208/sd.c index c79bea808698..c28a92773f05 100644 --- a/drivers/staging/rts5208/sd.c +++ b/drivers/staging/rts5208/sd.c @@ -427,7 +427,7 @@ static int sd_check_csd(struct rtsx_chip *chip, char check_wp) memcpy(sd_card->raw_csd, rsp + 1, 15); dev_dbg(rtsx_dev(chip), "CSD Response:\n"); - RTSX_DUMP(sd_card->raw_csd, 16); + dev_dbg(rtsx_dev(chip), "%*ph\n", 16, sd_card->raw_csd); csd_ver = (rsp[1] & 0xc0) >> 6; dev_dbg(rtsx_dev(chip), "csd_ver = %d\n", csd_ver); @@ -476,6 +476,7 @@ static int sd_check_csd(struct rtsx_chip *chip, char check_wp) if ((!CHK_SD_HCXC(sd_card)) || (csd_ver == 0)) { u8 blk_size, c_size_mult; u16 c_size; + blk_size = rsp[6] & 0x0F; c_size = ((u16)(rsp[7] & 0x03) << 10) + ((u16)rsp[8] << 2) @@ -487,6 +488,7 @@ static int sd_check_csd(struct rtsx_chip *chip, char check_wp) << (blk_size - 9); } else { u32 total_sector = 0; + total_sector = (((u32)rsp[8] & 0x3f) << 16) | ((u32)rsp[9] << 8) | (u32)rsp[10]; sd_card->capacity = (total_sector + 1) << 10; @@ -812,12 +814,10 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir) PHASE_NOT_RESET); RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0); } else { -#ifdef CONFIG_RTS5208_DEBUG rtsx_read_register(chip, SD_VP_CTL, &val); dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val); rtsx_read_register(chip, SD_DCMPS_CTL, &val); dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val); -#endif if (ddr_rx) { RTSX_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE, @@ -863,12 +863,11 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir) return STATUS_SUCCESS; Fail: -#ifdef CONFIG_RTS5208_DEBUG rtsx_read_register(chip, SD_VP_CTL, &val); dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val); rtsx_read_register(chip, SD_DCMPS_CTL, &val); dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val); -#endif + rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0); rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0); wait_timeout(10); @@ -1060,7 +1059,7 @@ static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode, TRACE_RET(chip, STATUS_FAIL); } - RTSX_DUMP(buf, 64); + dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf); if (func_group == NO_ARGUMENT) { sd_card->func_group1_mask = buf[0x0D]; @@ -1081,6 +1080,7 @@ static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode, * acceptable; bit[511:496] = 0x0000 means some error happened. */ u16 cc = ((u16)buf[0] << 8) | buf[1]; + dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n", cc); if ((cc == 0) || (cc > 800)) @@ -1553,6 +1553,7 @@ static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map, new_block = 1; if (cont_path_cnt) { int idx = cont_path_cnt - 1; + path[idx].len = path[idx].end - path[idx].start + 1; path[idx].mid = path[idx].start + @@ -1566,6 +1567,7 @@ static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map, goto Search_Finish; } else { int idx = cont_path_cnt - 1; + path[idx].len = path[idx].end - path[idx].start + 1; path[idx].mid = path[idx].start + path[idx].len / 2; } @@ -2119,7 +2121,7 @@ static int sd_check_wp_state(struct rtsx_chip *chip) } dev_dbg(rtsx_dev(chip), "ACMD13:\n"); - RTSX_DUMP(buf, 64); + dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf); sd_card_type = ((u16)buf[2] << 8) | buf[3]; dev_dbg(rtsx_dev(chip), "sd_card_type = 0x%04x\n", sd_card_type); @@ -2183,6 +2185,7 @@ Switch_Fail: SD_RSP_TYPE_R4, rsp, 5); if (retval == STATUS_SUCCESS) { int func_num = (rsp[1] >> 4) & 0x07; + if (func_num) { dev_dbg(rtsx_dev(chip), "SD_IO card (Function number: %d)!\n", func_num); diff --git a/drivers/staging/rts5208/trace.h b/drivers/staging/rts5208/trace.h index fbb304a54acc..a9ab4077b283 100644 --- a/drivers/staging/rts5208/trace.h +++ b/drivers/staging/rts5208/trace.h @@ -84,12 +84,4 @@ static inline char *filename(char *path) #define TRACE_GOTO(chip, label) goto label #endif -#ifdef CONFIG_RTS5208_DEBUG -#define RTSX_DUMP(buf, buf_len) \ - print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": ", \ - DUMP_PREFIX_NONE, 16, 1, (buf), (buf_len), false) -#else -#define RTSX_DUMP(buf, buf_len) -#endif - #endif /* __REALTEK_RTSX_TRACE_H */ |