Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28446acb authored by Jean-Christophe PLAGNIOL-VILLARD's avatar Jean-Christophe PLAGNIOL-VILLARD Committed by David Woodhouse
Browse files

mtd: atmel nand: fix gpio missing request



without this the gpio will not be muxed as a gpio by the current custom pinmux
or later by the pinctrl

Signed-off-by: default avatarJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent aa6d01fa
Loading
Loading
Loading
Loading
+63 −2
Original line number Diff line number Diff line
@@ -1399,7 +1399,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
	if (pdev->dev.of_node) {
		res = atmel_of_init_port(host, pdev->dev.of_node);
		if (res)
			goto err_nand_ioremap;
			goto err_ecc_ioremap;
	} else {
		memcpy(&host->board, pdev->dev.platform_data,
		       sizeof(struct atmel_nand_data));
@@ -1414,8 +1414,43 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
	nand_chip->IO_ADDR_W = host->io_base;
	nand_chip->cmd_ctrl = atmel_nand_cmd_ctrl;

	if (gpio_is_valid(host->board.rdy_pin))
	if (gpio_is_valid(host->board.rdy_pin)) {
		res = gpio_request(host->board.rdy_pin, "nand_rdy");
		if (res < 0) {
			dev_err(&pdev->dev,
				"can't request rdy gpio %d\n",
				host->board.rdy_pin);
			goto err_ecc_ioremap;
		}

		res = gpio_direction_input(host->board.rdy_pin);
		if (res < 0) {
			dev_err(&pdev->dev,
				"can't request input direction rdy gpio %d\n",
				host->board.rdy_pin);
			goto err_ecc_ioremap;
		}

		nand_chip->dev_ready = atmel_nand_device_ready;
	}

	if (gpio_is_valid(host->board.enable_pin)) {
		res = gpio_request(host->board.enable_pin, "nand_enable");
		if (res < 0) {
			dev_err(&pdev->dev,
				"can't request enable gpio %d\n",
				host->board.enable_pin);
			goto err_ecc_ioremap;
		}

		res = gpio_direction_output(host->board.enable_pin, 1);
		if (res < 0) {
			dev_err(&pdev->dev,
				"can't request output direction enable gpio %d\n",
				host->board.enable_pin);
			goto err_ecc_ioremap;
		}
	}

	nand_chip->ecc.mode = host->board.ecc_mode;
	nand_chip->chip_delay = 20;		/* 20us command delay time */
@@ -1430,6 +1465,22 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
	atmel_nand_enable(host);

	if (gpio_is_valid(host->board.det_pin)) {
		res = gpio_request(host->board.det_pin, "nand_det");
		if (res < 0) {
			dev_err(&pdev->dev,
				"can't request det gpio %d\n",
				host->board.det_pin);
			goto err_no_card;
		}

		res = gpio_direction_input(host->board.det_pin);
		if (res < 0) {
			dev_err(&pdev->dev,
				"can't request input direction det gpio %d\n",
				host->board.det_pin);
			goto err_no_card;
		}

		if (gpio_get_value(host->board.det_pin)) {
			printk(KERN_INFO "No SmartMedia card inserted.\n");
			res = -ENXIO;
@@ -1509,6 +1560,7 @@ err_no_card:
	platform_set_drvdata(pdev, NULL);
	if (host->dma_chan)
		dma_release_channel(host->dma_chan);
err_ecc_ioremap:
	iounmap(host->io_base);
err_nand_ioremap:
	kfree(host);
@@ -1534,6 +1586,15 @@ static int __exit atmel_nand_remove(struct platform_device *pdev)
		pmecc_data_free(host);
	}

	if (gpio_is_valid(host->board.det_pin))
		gpio_free(host->board.det_pin);

	if (gpio_is_valid(host->board.enable_pin))
		gpio_free(host->board.enable_pin);

	if (gpio_is_valid(host->board.rdy_pin))
		gpio_free(host->board.rdy_pin);

	if (host->ecc)
		iounmap(host->ecc);
	if (host->pmecc_rom_base)