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:
		| @@ -14,6 +14,9 @@ | ||||
| #include <linux/module.h> | ||||
| #include <linux/dma-mapping.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/partitions.h> | ||||
| #include <linux/platform_device.h> | ||||
| @@ -719,7 +722,11 @@ static void ar934x_nfc_cmdfunc(struct nand_chip *nand, unsigned int command, | ||||
| 		break; | ||||
|  | ||||
| 	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) { | ||||
| #endif | ||||
| 			/* the data is already written */ | ||||
| 			break; | ||||
| 		} | ||||
| @@ -1325,15 +1332,29 @@ static int ar934x_nfc_attach_chip(struct nand_chip *nand) | ||||
| 	if (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) { | ||||
| #endif | ||||
| 		ret = ar934x_nfc_setup_hwecc(nfc); | ||||
| 		if (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) { | ||||
| 		dev_err(dev, "unknown ECC mode %d\n", nand->ecc.mode); | ||||
| #endif | ||||
| 		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) && | ||||
| 		   (nand->ecc.algo != NAND_ECC_HAMMING)) { | ||||
| #endif | ||||
| 		dev_err(dev, "unknown software ECC algo %d\n", nand->ecc.algo); | ||||
| 		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.write_buf = ar934x_nfc_write_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 */ | ||||
| #endif | ||||
| 	nand->priv = nfc; | ||||
| 	platform_set_drvdata(pdev, nfc); | ||||
|  | ||||
| @@ -1462,7 +1487,12 @@ static int ar934x_nfc_remove(struct platform_device *pdev) | ||||
|  | ||||
| 	nfc = platform_get_drvdata(pdev); | ||||
| 	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); | ||||
| #endif | ||||
| 		ar934x_nfc_free_buf(nfc); | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David Bauer
					David Bauer