Commit 5ed70d5f authored by Christian Heusel's avatar Christian Heusel Committed by Wentao Guan
Browse files

Revert "drivers/card_reader/rtsx_usb: Restore interrupt based detection"

stable inclusion
from stable-v6.6.83
commit 3cae0b7e9639188dca2e3586f1f6b9a275028479
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IBW08Q

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=3cae0b7e9639188dca2e3586f1f6b9a275028479

--------------------------------

commit 2397d61ee45cddb8f3bd3a3a9840ef0f0b5aa843 upstream.

This reverts commit 235b630eda072d7e7b102ab346d6b8a2c028a772.

This commit was found responsible for issues with SD card recognition,
as users had to re-insert their cards in the readers and wait for a
while. As for some people the SD card was involved in the boot process
it also caused boot failures.

Cc: stable@vger.kernel.org
Link: https://bbs.archlinux.org/viewtopic.php?id=303321


Fixes: 235b630eda07 ("drivers/card_reader/rtsx_usb: Restore interrupt based detection")
Reported-by: default avatarqf <quintafeira@tutanota.com>
Closes: https://lore.kernel.org/all/1de87dfa-1e81-45b7-8dcb-ad86c21d5352@heusel.eu


Signed-off-by: default avatarChristian Heusel <christian@heusel.eu>
Link: https://lore.kernel.org/r/20250224-revert-sdcard-patch-v1-1-d1a457fbb796@heusel.eu


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 3cae0b7e9639188dca2e3586f1f6b9a275028479)
Signed-off-by: default avatarWentao Guan <guanwentao@uniontech.com>
parent f31de6c4
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -286,7 +286,6 @@ static int rtsx_usb_get_status_with_bulk(struct rtsx_ucr *ucr, u16 *status)
int rtsx_usb_get_card_status(struct rtsx_ucr *ucr, u16 *status)
{
	int ret;
	u8 interrupt_val = 0;
	u16 *buf;

	if (!status)
@@ -309,20 +308,6 @@ int rtsx_usb_get_card_status(struct rtsx_ucr *ucr, u16 *status)
		ret = rtsx_usb_get_status_with_bulk(ucr, status);
	}

	rtsx_usb_read_register(ucr, CARD_INT_PEND, &interrupt_val);
	/* Cross check presence with interrupts */
	if (*status & XD_CD)
		if (!(interrupt_val & XD_INT))
			*status &= ~XD_CD;

	if (*status & SD_CD)
		if (!(interrupt_val & SD_INT))
			*status &= ~SD_CD;

	if (*status & MS_CD)
		if (!(interrupt_val & MS_INT))
			*status &= ~MS_CD;

	/* usb_control_msg may return positive when success */
	if (ret < 0)
		return ret;