// SPDX-License-Identifier: GPL-2.0 /* * Copyright (C) 2016-2017 Micron Technology, Inc. * * Authors: * Peter Pan * Boris Brezillon * Copyright (c) 2023, ArtInChip Technology Co., Ltd * Author: Dehuang Wu */ #define pr_fmt(fmt) "spi-nand: " fmt #include #include #include #include #include #include #include #include #include #include #include "manufacturer.h" static const struct spinand_manufacturer *spinand_manufacturers[] = { #ifdef CONFIG_SPI_NAND_GIGADEVICE &gigadevice_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_MACRONIX ¯onix_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_MICRON µn_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_TOSHIBA &toshiba_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_WINBOND &winbond_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_FMSH &fmsh_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_FORESEE &foresee_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_ZBIT &zbit_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_ELITE &elite_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_ESMT &esmt_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_UMTEK &umtek_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_BYTE &byte_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_XTX &xtx_spinand_manufacturer, #endif #ifdef CONFIG_SPI_NAND_XINCUN &xincun_spinand_manufacturer, #endif }; int spinand_manufacturer_detect(struct spinand_device *spinand) { unsigned int i; int ret; for (i = 0; i < ARRAY_SIZE(spinand_manufacturers); i++) { ret = spinand_manufacturers[i]->ops->detect(spinand); if (ret > 0) { spinand->manufacturer = spinand_manufacturers[i]; return 0; } else if (ret < 0) { continue; } } return -ENOTSUPP; } int spinand_manufacturer_init(struct spinand_device *spinand) { if (spinand->manufacturer->ops->init) return spinand->manufacturer->ops->init(spinand); return 0; } void spinand_manufacturer_cleanup(struct spinand_device *spinand) { /* Release manufacturer private data */ if (spinand->manufacturer->ops->cleanup) return spinand->manufacturer->ops->cleanup(spinand); }