ingenic_ecc.h (2068B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __DRIVERS_MTD_NAND_INGENIC_ECC_INTERNAL_H__ 3#define __DRIVERS_MTD_NAND_INGENIC_ECC_INTERNAL_H__ 4 5#include <linux/compiler_types.h> 6#include <linux/err.h> 7#include <linux/mutex.h> 8#include <linux/types.h> 9#include <uapi/asm-generic/errno-base.h> 10 11struct clk; 12struct device; 13struct ingenic_ecc; 14struct platform_device; 15 16/** 17 * struct ingenic_ecc_params - ECC parameters 18 * @size: data bytes per ECC step. 19 * @bytes: ECC bytes per step. 20 * @strength: number of correctable bits per ECC step. 21 */ 22struct ingenic_ecc_params { 23 int size; 24 int bytes; 25 int strength; 26}; 27 28#if IS_ENABLED(CONFIG_MTD_NAND_INGENIC_ECC) 29int ingenic_ecc_calculate(struct ingenic_ecc *ecc, 30 struct ingenic_ecc_params *params, 31 const u8 *buf, u8 *ecc_code); 32int ingenic_ecc_correct(struct ingenic_ecc *ecc, 33 struct ingenic_ecc_params *params, u8 *buf, 34 u8 *ecc_code); 35 36void ingenic_ecc_release(struct ingenic_ecc *ecc); 37struct ingenic_ecc *of_ingenic_ecc_get(struct device_node *np); 38#else /* CONFIG_MTD_NAND_INGENIC_ECC */ 39int ingenic_ecc_calculate(struct ingenic_ecc *ecc, 40 struct ingenic_ecc_params *params, 41 const u8 *buf, u8 *ecc_code) 42{ 43 return -ENODEV; 44} 45 46int ingenic_ecc_correct(struct ingenic_ecc *ecc, 47 struct ingenic_ecc_params *params, u8 *buf, 48 u8 *ecc_code) 49{ 50 return -ENODEV; 51} 52 53void ingenic_ecc_release(struct ingenic_ecc *ecc) 54{ 55} 56 57struct ingenic_ecc *of_ingenic_ecc_get(struct device_node *np) 58{ 59 return ERR_PTR(-ENODEV); 60} 61#endif /* CONFIG_MTD_NAND_INGENIC_ECC */ 62 63struct ingenic_ecc_ops { 64 void (*disable)(struct ingenic_ecc *ecc); 65 int (*calculate)(struct ingenic_ecc *ecc, 66 struct ingenic_ecc_params *params, 67 const u8 *buf, u8 *ecc_code); 68 int (*correct)(struct ingenic_ecc *ecc, 69 struct ingenic_ecc_params *params, 70 u8 *buf, u8 *ecc_code); 71}; 72 73struct ingenic_ecc { 74 struct device *dev; 75 const struct ingenic_ecc_ops *ops; 76 void __iomem *base; 77 struct clk *clk; 78 struct mutex lock; 79}; 80 81int ingenic_ecc_probe(struct platform_device *pdev); 82 83#endif /* __DRIVERS_MTD_NAND_INGENIC_ECC_INTERNAL_H__ */