Hello, > +static inline int ls1x_nand_check_op(struct nand_chip *chip, const > struct nand_operation *op) No inline function in a c file. > +{ > + struct ls1x_nand_host *host = nand_get_controller_data(chip); > + const struct nand_op_instr *instr1 = NULL, *instr2 = NULL; > + int op_id; > + > + for (op_id = 0; op_id < op->ninstrs; op_id++) { > + const struct nand_op_instr *instr = &op->instrs[op_id]; > + > + if (instr->type == NAND_OP_CMD_INSTR) { > + if (!instr1) > + instr1 = instr; > + else if (!instr2) > + instr2 = instr; > + else > + break; > + } > + } > + > + if (!instr1 || !instr2) > + return 0; Is this expected? > + > + if (instr1->ctx.cmd.opcode == NAND_CMD_RNDOUT && > + instr2->ctx.cmd.opcode == NAND_CMD_RNDOUTSTART) > + return 0; > + > + if (instr1->ctx.cmd.opcode == NAND_CMD_READ0 && > + instr2->ctx.cmd.opcode == NAND_CMD_READSTART) > + return 0; > + > + if (instr1->ctx.cmd.opcode == NAND_CMD_ERASE1 && > + instr2->ctx.cmd.opcode == NAND_CMD_ERASE2) > + return 0; > + > + if (instr1->ctx.cmd.opcode == NAND_CMD_SEQIN && > + instr2->ctx.cmd.opcode == NAND_CMD_PAGEPROG) > + return 0; > + > + dev_err(host->dev, "unsupported opcode sequence: %x %x", > + instr1->ctx.cmd.opcode, instr2->ctx.cmd.opcode); > + > + return -EOPNOTSUPP; > +} > + > +static int ls1x_nand_exec_op(struct nand_chip *chip, > + const struct nand_operation *op, > + bool check_only) > +{ > + int ret; > + if (check_only) ? > + ret = ls1x_nand_check_op(chip, op); > + if (ret) > + return ret; > + > + return nand_op_parser_exec_op(chip, &ls1x_nand_op_parser, op, check_only); > +} > + > +static const char * const nand_ecc_algos[] = { > + [NAND_ECC_ALGO_UNKNOWN] = "none", > + [NAND_ECC_ALGO_HAMMING] = "hamming", > + [NAND_ECC_ALGO_BCH] = "bch", > +}; No way you need this in your driver :-) Thanks, Miquèl