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

Commit 2ad6e398 authored by Linus Walleij's avatar Linus Walleij
Browse files

ARM: nomadik: convert SMSC91x ethernet to device tree



This converts the SMSC91x ethernet controller to use device
tree. The existing solution from the board file, to request the
GPIO triggering the ethernet IRQ from the board file is kept
for the time being, but the GPIO number assignment is moved
over to the device tree.

Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 6010d403
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -16,4 +16,9 @@ Required node: usb-s8815
Example:
Example:


usb-s8815 {
usb-s8815 {
		ethernet-gpio {
			gpios = <&gpio3 19 0x1>;
			interrupts = <19 0x1>;
			interrupt-parent = <&gpio3>;
		};
};
};
+6 −0
Original line number Original line Diff line number Diff line
@@ -16,5 +16,11 @@


	/* Custom board node with GPIO pins to active etc */
	/* Custom board node with GPIO pins to active etc */
	usb-s8815 {
	usb-s8815 {
		/* The S8815 is using this very GPIO pin for the SMSC91x IRQs */
		ethernet-gpio {
			gpios = <&gpio3 19 0x1>;
			interrupts = <19 0x1>;
			interrupt-parent = <&gpio3>;
		};
	};
	};
};
};
+12 −0
Original line number Original line Diff line number Diff line
@@ -125,6 +125,18 @@
		};
		};
	};
	};


	external-bus@34000000 {
		compatible = "simple-bus";
		reg = <0x34000000 0x1000000>;
		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0 0x34000000 0x1000000>;
		ethernet@300 {
			compatible = "smsc,lan91c111";
			reg = <0x300 0x0fd00>;
		};
	};

	amba {
	amba {
		compatible = "arm,amba-bus";
		compatible = "arm,amba-bus";
		#address-cells = <1>;
		#address-cells = <1>;
+2 −0
Original line number Original line Diff line number Diff line
@@ -239,6 +239,8 @@ static int __init nhk8815_eth_init(void)
	int gpio_nr = 115; /* hardwired in the board */
	int gpio_nr = 115; /* hardwired in the board */
	int err;
	int err;


	if (!machine_is_nomadik())
		return 0;
	err = gpio_request(gpio_nr, "eth_irq");
	err = gpio_request(gpio_nr, "eth_irq");
	if (!err) err = gpio_direction_input(gpio_nr);
	if (!err) err = gpio_direction_input(gpio_nr);
	if (err)
	if (err)
+34 −0
Original line number Original line Diff line number Diff line
@@ -31,9 +31,11 @@
#include <linux/pinctrl/machine.h>
#include <linux/pinctrl/machine.h>
#include <linux/platform_data/clocksource-nomadik-mtu.h>
#include <linux/platform_data/clocksource-nomadik-mtu.h>
#include <linux/of_irq.h>
#include <linux/of_irq.h>
#include <linux/of_gpio.h>
#include <linux/of_address.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
#include <linux/of_platform.h>
#include <linux/mtd/fsmc.h>
#include <linux/mtd/fsmc.h>
#include <linux/gpio.h>


#include <mach/hardware.h>
#include <mach/hardware.h>
#include <mach/irqs.h>
#include <mach/irqs.h>
@@ -263,6 +265,38 @@ static struct fsmc_nand_platform_data cpu8815_nand_data = {
	.nand_timings = &cpu8815_nand_timings,
	.nand_timings = &cpu8815_nand_timings,
};
};


/*
 * The SMSC911x IRQ is connected to a GPIO pin, but the driver expects
 * to simply request an IRQ passed as a resource. So the GPIO pin needs
 * to be requested by this hog and set as input.
 */
static int __init cpu8815_eth_init(void)
{
	struct device_node *eth;
	int gpio, irq, err;

	eth = of_find_node_by_path("/usb-s8815/ethernet-gpio");
	if (!eth) {
		pr_info("could not find any ethernet GPIO\n");
		return 0;
	}
	gpio = of_get_gpio(eth, 0);
	err = gpio_request(gpio, "eth_irq");
	if (err) {
		pr_info("failed to request ethernet GPIO\n");
		return -ENODEV;
	}
	err = gpio_direction_input(gpio);
	if (err) {
		pr_info("failed to set ethernet GPIO as input\n");
		return -ENODEV;
	}
	irq = gpio_to_irq(gpio);
	pr_info("enabled USB-S8815 ethernet GPIO %d, IRQ %d\n", gpio, irq);
	return 0;
}
device_initcall(cpu8815_eth_init);

/* These are mostly to get the right device names for the clock lookups */
/* These are mostly to get the right device names for the clock lookups */
static struct of_dev_auxdata cpu8815_auxdata_lookup[] __initdata = {
static struct of_dev_auxdata cpu8815_auxdata_lookup[] __initdata = {
	OF_DEV_AUXDATA("st,nomadik-gpio", NOMADIK_GPIO0_BASE,
	OF_DEV_AUXDATA("st,nomadik-gpio", NOMADIK_GPIO0_BASE,