Hello, After having sent two versions of a series removing the nand_scan_ident/nand_scan_tail limitation that prevents us to allocate memory at critical moments, we are still discussing the internal API. To avoid sending again more than 20 patches, this is an RFC of the internal changes prior to the above modifications in each driver: 1/ Rename struct nand_hw_control -> struct nand_controller which is much more meaningful. 2/ Rename the function initializing the above structure nand_hw_control_init() -> nand_controller_init(). 3/ Rename the dummy controller implementation in the nand_chip structure hwcontrol -> dummy_controller. 3/ Create a nand_controller_ops structure which will be embedded in the nand_controller structure. These operations are: int (*attach_chip)(struct nand_chip *) and void (*detach_chip)(struct nand_chip *). If we agree on this, I could merge them first and then send the bunch of patches making use of these API changes. Thanks, Miqu?l Changes since v2: ================= * Reworded the nand_controller structure documentation as suggested. * Used Boris' explanation of the introduction of the ->attach/detach_chip() hooks. * Removed the initialization of controller->ops() in nand_controller_init(). * s/may be called/will be called/ in ->attach/detach_chip() documentation line. * Also mentioned that ->detach_chip() will be called from nand_cleanup(). Changes since v1 (RFC): ======================= * Added Acked-by tags from Boris. * Updated the commit logs as commented. * Squashed the 2 patches about nand_hw_control and nand_init_hw_control(). * Also added the rename of hwcontrol in patch 1. * Added helpers to 1/ check the controller operations are present and 2/ ->attach_chip() or ->detach_chip() is available, as suggested by Boris. Miquel Raynal (2): mtd: rawnand: better name for the controller structure mtd: rawnand: add hooks that may be called during nand_scan() drivers/mtd/nand/raw/atmel/nand-controller.c | 10 ++++---- drivers/mtd/nand/raw/brcmnand/brcmnand.c | 4 ++-- drivers/mtd/nand/raw/docg4.c | 4 ++-- drivers/mtd/nand/raw/fsl_elbc_nand.c | 4 ++-- drivers/mtd/nand/raw/fsl_ifc_nand.c | 4 ++-- drivers/mtd/nand/raw/jz4780_nand.c | 7 +++--- drivers/mtd/nand/raw/marvell_nand.c | 6 ++--- drivers/mtd/nand/raw/mtk_nand.c | 2 +- drivers/mtd/nand/raw/nand_base.c | 36 ++++++++++++++++++++++++---- drivers/mtd/nand/raw/ndfc.c | 4 ++-- drivers/mtd/nand/raw/omap2.c | 2 +- drivers/mtd/nand/raw/oxnas_nand.c | 4 ++-- drivers/mtd/nand/raw/qcom_nandc.c | 4 ++-- drivers/mtd/nand/raw/s3c2410.c | 4 ++-- drivers/mtd/nand/raw/sunxi_nand.c | 6 ++--- drivers/mtd/nand/raw/tango_nand.c | 4 ++-- drivers/mtd/nand/raw/tegra_nand.c | 6 ++--- drivers/mtd/nand/raw/txx9ndfmc.c | 4 ++-- include/linux/mtd/rawnand.h | 29 +++++++++++++++++----- 19 files changed, 95 insertions(+), 49 deletions(-) -- 2.14.1