ath79: ar934x-nand: add kernel 5.10 compatibility
Adapt the driver to make it work with the NAND subsystem changes between kernel 5.4 and 5.10. Tested-on: Aerohive HiveAP121 Signed-off-by: David Bauer <mail@david-bauer.net>
This commit is contained in:
parent
da55758cc5
commit
fb64e2c30f
@ -14,6 +14,9 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
|
||||||
|
#include <linux/mtd/nand.h>
|
||||||
|
#endif
|
||||||
#include <linux/mtd/rawnand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
@ -719,7 +722,11 @@ static void ar934x_nfc_cmdfunc(struct nand_chip *nand, unsigned int command,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NAND_CMD_PAGEPROG:
|
case NAND_CMD_PAGEPROG:
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
|
||||||
|
if (nand->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST) {
|
||||||
|
#else
|
||||||
if (nand->ecc.mode == NAND_ECC_HW) {
|
if (nand->ecc.mode == NAND_ECC_HW) {
|
||||||
|
#endif
|
||||||
/* the data is already written */
|
/* the data is already written */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1325,15 +1332,29 @@ static int ar934x_nfc_attach_chip(struct nand_chip *nand)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
|
||||||
|
if (nand->ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST) {
|
||||||
|
#else
|
||||||
if (nand->ecc.mode == NAND_ECC_HW) {
|
if (nand->ecc.mode == NAND_ECC_HW) {
|
||||||
|
#endif
|
||||||
ret = ar934x_nfc_setup_hwecc(nfc);
|
ret = ar934x_nfc_setup_hwecc(nfc);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
|
||||||
|
} else if (nand->ecc.engine_type == NAND_ECC_ENGINE_TYPE_SOFT) {
|
||||||
|
dev_err(dev, "unknown ECC mode %d\n", nand->ecc.engine_type);
|
||||||
|
#else
|
||||||
} else if (nand->ecc.mode != NAND_ECC_SOFT) {
|
} else if (nand->ecc.mode != NAND_ECC_SOFT) {
|
||||||
dev_err(dev, "unknown ECC mode %d\n", nand->ecc.mode);
|
dev_err(dev, "unknown ECC mode %d\n", nand->ecc.mode);
|
||||||
|
#endif
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
|
||||||
|
} else if ((nand->ecc.algo != NAND_ECC_ALGO_BCH) &&
|
||||||
|
(nand->ecc.algo != NAND_ECC_ALGO_HAMMING)) {
|
||||||
|
#else
|
||||||
} else if ((nand->ecc.algo != NAND_ECC_BCH) &&
|
} else if ((nand->ecc.algo != NAND_ECC_BCH) &&
|
||||||
(nand->ecc.algo != NAND_ECC_HAMMING)) {
|
(nand->ecc.algo != NAND_ECC_HAMMING)) {
|
||||||
|
#endif
|
||||||
dev_err(dev, "unknown software ECC algo %d\n", nand->ecc.algo);
|
dev_err(dev, "unknown software ECC algo %d\n", nand->ecc.algo);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@ -1422,7 +1443,11 @@ static int ar934x_nfc_probe(struct platform_device *pdev)
|
|||||||
nand->legacy.read_byte = ar934x_nfc_read_byte;
|
nand->legacy.read_byte = ar934x_nfc_read_byte;
|
||||||
nand->legacy.write_buf = ar934x_nfc_write_buf;
|
nand->legacy.write_buf = ar934x_nfc_write_buf;
|
||||||
nand->legacy.read_buf = ar934x_nfc_read_buf;
|
nand->legacy.read_buf = ar934x_nfc_read_buf;
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
|
||||||
|
nand->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST; /* default */
|
||||||
|
#else
|
||||||
nand->ecc.mode = NAND_ECC_HW; /* default */
|
nand->ecc.mode = NAND_ECC_HW; /* default */
|
||||||
|
#endif
|
||||||
nand->priv = nfc;
|
nand->priv = nfc;
|
||||||
platform_set_drvdata(pdev, nfc);
|
platform_set_drvdata(pdev, nfc);
|
||||||
|
|
||||||
@ -1462,7 +1487,12 @@ static int ar934x_nfc_remove(struct platform_device *pdev)
|
|||||||
|
|
||||||
nfc = platform_get_drvdata(pdev);
|
nfc = platform_get_drvdata(pdev);
|
||||||
if (nfc) {
|
if (nfc) {
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)
|
||||||
|
mtd_device_unregister(nand_to_mtd(&nfc->nand_chip));
|
||||||
|
nand_cleanup(&nfc->nand_chip);
|
||||||
|
#else
|
||||||
nand_release(&nfc->nand_chip);
|
nand_release(&nfc->nand_chip);
|
||||||
|
#endif
|
||||||
ar934x_nfc_free_buf(nfc);
|
ar934x_nfc_free_buf(nfc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user