mirror of https://gitee.com/openkylin/linux.git
mtd: nand: add a shorthand to generate nand_ecc_caps structure
struct nand_ecc_caps was designed as flexible as possible to support multiple stepsizes (like sunxi_nand.c). So, we need to write multiple arrays even for the simplest case. I guess many controllers support a single stepsize, so here is a shorthand macro for the case. It allows to describe like ... NAND_ECC_CAPS_SINGLE(denali_pci_ecc_caps, denali_calc_ecc_bytes, 512, 8, 15); ... instead of static const int denali_pci_ecc_strengths[] = {8, 15}; static const struct nand_ecc_step_info denali_pci_ecc_stepinfo = { .stepsize = 512, .strengths = denali_pci_ecc_strengths, .nstrengths = ARRAY_SIZE(denali_pci_ecc_strengths), }; static const struct nand_ecc_caps denali_pci_ecc_caps = { .stepinfos = &denali_pci_ecc_stepinfo, .nstepinfos = 1, .calc_ecc_bytes = denali_calc_ecc_bytes, }; Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
This commit is contained in:
parent
2c8f8afa7f
commit
a03c60178c
|
@ -505,6 +505,20 @@ struct nand_ecc_caps {
|
|||
int (*calc_ecc_bytes)(int step_size, int strength);
|
||||
};
|
||||
|
||||
/* a shorthand to generate struct nand_ecc_caps with only one ECC stepsize */
|
||||
#define NAND_ECC_CAPS_SINGLE(__name, __calc, __step, ...) \
|
||||
static const int __name##_strengths[] = { __VA_ARGS__ }; \
|
||||
static const struct nand_ecc_step_info __name##_stepinfo = { \
|
||||
.stepsize = __step, \
|
||||
.strengths = __name##_strengths, \
|
||||
.nstrengths = ARRAY_SIZE(__name##_strengths), \
|
||||
}; \
|
||||
static const struct nand_ecc_caps __name = { \
|
||||
.stepinfos = &__name##_stepinfo, \
|
||||
.nstepinfos = 1, \
|
||||
.calc_ecc_bytes = __calc, \
|
||||
}
|
||||
|
||||
/**
|
||||
* struct nand_ecc_ctrl - Control structure for ECC
|
||||
* @mode: ECC mode
|
||||
|
|
Loading…
Reference in New Issue