From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from outbound.st.icloud.com (p-east2-cluster3-host7-snip4-10.eps.apple.com [57.103.77.241]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C03FE41B35E for ; Tue, 20 Jan 2026 13:06:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.77.241 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768914407; cv=none; b=VprLcU0hxMhKH8yt9YDr/FvIcWS9veA2ZGGI30UYDMGElA8z7wX5h/TvAe3X2LuOQKOgzru8C86QkiJxuOTRikTDMNac+yOL3GKBp0iVYmZtRCWVXx7Uu+KRDZEGS5DKIw8aT8epKLzjbmq7ngElm6D4n2oLNbRQsaT35a9jp0A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768914407; c=relaxed/simple; bh=YYv+tO8sFtJPEW13W2wIV0xEsGIm96pSGlAPtqGsIE4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Z4xX3iFyylTAEaKTux7cxgR8/zVWVMPyr1351ygX0B2nG+HCe8oNhmng0397qNvuIqRQZaySA7pFx/1AIZQ7CAZGp2NeiIqyWGBuHInu93JzdM4d1wRnW/iMGm19ETxDKGJp2jkWJLiOER2+GejGXZZoUwE2sK/LpK03VKYLAbI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=subset.ch; spf=pass smtp.mailfrom=subset.ch; dkim=pass (2048-bit key) header.d=subset.ch header.i=@subset.ch header.b=br3ZFuk7; arc=none smtp.client-ip=57.103.77.241 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=subset.ch Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subset.ch Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subset.ch header.i=@subset.ch header.b="br3ZFuk7" Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-20-percent-2 (Postfix) with ESMTPS id 15B76180041C; Tue, 20 Jan 2026 13:06:38 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subset.ch; s=sig1; t=1768914401; x=1771506401; bh=ed3ANQEn+LEWEAqCS+KC8f0XFWN0y7ndXWvvumxi0TU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=br3ZFuk7OaOw4/CBsqo1CwpbTGzouR6kRAmeCX737drRjFV07frNa/t/ol4XZZ2PHmcFB9l/LRcwCQgz4VfW6NkCtxERtTYQbxtGYWBuVpFpc37Nypxo7/JIyPfp5TCeSZvcr46/MMrS9Qv+KofjBlTzQog+kSqQRuxNb1PbT3hXY4uz7B72yDKEPgdtvdbGSlAREmod06HZ0YOB/leEo6FbT4WvhD8Zm7meh95A2T06Gz+VXfOP5S8NZKzaj+sQ51ytMQ7pV0gBRNGti92CJYIFCNGWQogqaOvlSXxkxKoZ4if3pkOQX1tSHmmfxMTdLw59px+qWtNVskBUYuIKXg== mail-alias-created-date: 1663698038540 Received: from desk (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-20-percent-2 (Postfix) with ESMTPSA id 743B91800426; Tue, 20 Jan 2026 13:06:37 +0000 (UTC) From: patrick@subset.ch To: linux-kernel@vger.kernel.org Cc: alexander.sverdlin@siemens.com, gregkh@linuxfoundation.org, arnd@arndb.de, Patrick Wicki Subject: [PATCH 1/2] eeprom: at25: add support for Infineon Cypress QSN FRAMs Date: Tue, 20 Jan 2026 14:06:02 +0100 Message-ID: <20260120130603.1066559-1-patrick@subset.ch> X-Mailer: git-send-email 2.52.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Authority-Info: v=2.4 cv=GYkaXAXL c=1 sm=1 tr=0 ts=696f7ddf cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=a_U1oVfrAAAA:8 a=sSCbrDDkWoXA0xul28MA:9 X-Proofpoint-GUID: 8Vsj7kc-ahAocU4F_rWdq8Ysymk4t4Ox X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIwMDEwOSBTYWx0ZWRfX6wfuisnUrPGA h0cqdy1PM4WiJsacOSMSCg3NxFU2VuyxqkpsBSGunWO3wHe51sGM+crRnsa3rKkzQhS+4fTgK2G +g9IukHewx8V99ipxgkcJF0cINNbCrdq9EVG75kNJSq5DZC9e84KBc9C/JCO/hrni9hKzojFEqh UT4bUGWIGu+gBckPh7qcAtAD4ojzPkqnda3eJoiB0/CUawb5Maj6BD+MCbFpDLQ0x/AkKuQzB9e 4dQxDh7p12uMzi2aso1fLfcCKmoTPSvJYfgsi7KLgwlm0eSAfH8jvaNsZaqhdS5YvP9x3uYh3D9 cw05/XvgYVg7gjCRtwj X-Proofpoint-ORIG-GUID: 8Vsj7kc-ahAocU4F_rWdq8Ysymk4t4Ox X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-20_03,2026-01-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 bulkscore=0 mlxscore=0 suspectscore=0 clxscore=1030 malwarescore=0 phishscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601200109 X-JNJ: AAAAAAABbrCDW1zM1uIIerMgbSVJflRMn8ebxOr1Q90cTJUmGpuPV7vOShvIWPY3NF0fe4wi+OabHQbINp8Px8IRTwsqDQVcMKBAqnEtQ/fDrbgB8KSYvW4l1A2S+dXTePR3fxrAfBiMtHMIRIZpGsUfGZDWnTiy3/EB1novxZwycL1D5WeWwnjSGq7ySTBuUQ479Wf6NiGUsCy1W7aTfn0jUjiQ2yf5QOqBx2si2tEnzu3ooioqy4ZgIbJ8G5rkQV9OjUfnoALKMYVw8MB7U8+GI1dcjLzNEcxAgFUv2XDbY87jwJh4fms+fNotTKNN3wND87+dTyi2Q93eHPUUdeC6BQCJOPRbWQoky9kT9L02/h7s6vVbEvvH/t5Gzob9QY3Lzsi0XdmoBn752vJf4lAZGyMdtVJgQ7DcVHyseApz6aOXADYCv4C2UhVQ2Rb3UPiCnF1yDHhK5BoIZk5uDezwFw1WmMwEjUS0HQqH2warHnUc7hRmVK6pncc8/0AliY7PCL2sFS9kx1j/eNytjpN/QkHN9uKNJvOzDq5k2USF5LMfmBMXmTAVSp28alT1+n0DAA87hehAeVYtd8iNkI1Js5DukkQBDqEo+WP6AK8KPP6uNLexUcHJi+jzOXOLthisWgH3TsH7ZNX/pxdqKaLZpwGQFCt7oFN3qiM= From: Patrick Wicki Add support for Infineon Cypress CY15****QSN FRAM chips. Unlike the QN variants these chips have an 8 byte JEDEC ID. The layout of the serial number matches that of already supported chips like the CY15B204QN, so make the read-out unconditional. Tested with the CY15B204QSN. According to Infineon datasheets, all QSN variants appear to share a consistent pattern so the size should be correctly detected based on the density bits in the ID: CY15B201QSN: 0x00 00 00 00 06 82 54 40, density_id: 8: 1Mb CY15B102QSN: 0x00 00 00 00 06 82 51 48, density_id: 9: 2Mb CY15B204QSN: 0x00 00 00 00 06 82 54 50, density_id: 10: 4Mb CY15V108QSN: 0x00 00 00 00 06 82 52 58, density_id: 11: 8Mb Signed-off-by: Patrick Wicki --- drivers/misc/eeprom/at25.c | 50 +++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c index 883dfd0ed6583..5b00921d07d2e 100644 --- a/drivers/misc/eeprom/at25.c +++ b/drivers/misc/eeprom/at25.c @@ -398,30 +398,40 @@ static int at25_fram_to_chip(struct device *dev, struct spi_eeprom *chip) id[i] = id[j]; id[j] = tmp; } - if (id[6] != 0xc2) { - dev_err(dev, "Error: no Cypress FRAM with device ID (manufacturer ID bank 7: %02x)\n", id[6]); - return -ENODEV; - } - switch (id[7]) { - case 0x21 ... 0x26: - chip->byte_len = BIT(id[7] - 0x21 + 4) * 1024; - break; - case 0x2a ... 0x30: - /* CY15B102QN ... CY15B116QN */ - chip->byte_len = BIT(((id[7] >> 1) & 0xf) + 13); - break; - default: - dev_err(dev, "Error: unsupported size (id %02x)\n", id[7]); + if (id[6] == 0xc2) { + switch (id[7]) { + case 0x21 ... 0x26: + chip->byte_len = BIT(id[7] - 0x21 + 4) * 1024; + break; + case 0x2a ... 0x30: + /* CY15B102QN ... CY15B116QN */ + chip->byte_len = BIT(((id[7] >> 1) & 0xf) + 13); + break; + default: + dev_err(dev, "Error: unsupported size (id %02x)\n", id[7]); + return -ENODEV; + } + } else if (id[2] == 0x82 && id[3] == 0x06) { + switch (id[1]) { + case 0x51 ... 0x54: + /* CY15B102QSN ... CY15B204QSN */ + chip->byte_len = BIT(((id[0] >> 3) & 0x1F) + 9); + break; + default: + dev_err(dev, "Error: unsupported product id %02x\n", id[1]); + return -ENODEV; + } + } else { + dev_err(dev, "Error: unrecognized JEDEC ID format: %*ph\n", + FM25_ID_LEN, id); return -ENODEV; } - if (id[8]) { - fm25_aux_read(at25, sernum, FM25_RDSN, FM25_SN_LEN); - /* Swap byte order */ - for (i = 0; i < FM25_SN_LEN; i++) - at25->sernum[i] = sernum[FM25_SN_LEN - 1 - i]; - } + fm25_aux_read(at25, sernum, FM25_RDSN, FM25_SN_LEN); + /* Swap byte order */ + for (i = 0; i < FM25_SN_LEN; i++) + at25->sernum[i] = sernum[FM25_SN_LEN - 1 - i]; } if (chip->byte_len > 64 * 1024) -- 2.52.0