mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
OMAP4: Ethernet: KS8851 Board Support
Enable Micrel KS8851 SPI network chip for OMAP4430 Signed-off-by: Abraham Arce <x0066660@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
parent
8ebeb545a8
commit
b2aa5e5757
1 changed files with 81 additions and 0 deletions
|
@ -18,6 +18,7 @@
|
|||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
@ -32,6 +33,75 @@
|
|||
#include <asm/hardware/gic.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
|
||||
#define ETH_KS8851_IRQ 34
|
||||
#define ETH_KS8851_POWER_ON 48
|
||||
#define ETH_KS8851_QUART 138
|
||||
|
||||
static struct spi_board_info sdp4430_spi_board_info[] __initdata = {
|
||||
{
|
||||
.modalias = "ks8851",
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.max_speed_hz = 24000000,
|
||||
.irq = ETH_KS8851_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static int omap_ethernet_init(void)
|
||||
{
|
||||
int status;
|
||||
|
||||
/* Request of GPIO lines */
|
||||
|
||||
status = gpio_request(ETH_KS8851_POWER_ON, "eth_power");
|
||||
if (status) {
|
||||
pr_err("Cannot request GPIO %d\n", ETH_KS8851_POWER_ON);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = gpio_request(ETH_KS8851_QUART, "quart");
|
||||
if (status) {
|
||||
pr_err("Cannot request GPIO %d\n", ETH_KS8851_QUART);
|
||||
goto error1;
|
||||
}
|
||||
|
||||
status = gpio_request(ETH_KS8851_IRQ, "eth_irq");
|
||||
if (status) {
|
||||
pr_err("Cannot request GPIO %d\n", ETH_KS8851_IRQ);
|
||||
goto error2;
|
||||
}
|
||||
|
||||
/* Configuration of requested GPIO lines */
|
||||
|
||||
status = gpio_direction_output(ETH_KS8851_POWER_ON, 1);
|
||||
if (status) {
|
||||
pr_err("Cannot set output GPIO %d\n", ETH_KS8851_IRQ);
|
||||
goto error3;
|
||||
}
|
||||
|
||||
status = gpio_direction_output(ETH_KS8851_QUART, 1);
|
||||
if (status) {
|
||||
pr_err("Cannot set output GPIO %d\n", ETH_KS8851_QUART);
|
||||
goto error3;
|
||||
}
|
||||
|
||||
status = gpio_direction_input(ETH_KS8851_IRQ);
|
||||
if (status) {
|
||||
pr_err("Cannot set input GPIO %d\n", ETH_KS8851_IRQ);
|
||||
goto error3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error3:
|
||||
gpio_free(ETH_KS8851_IRQ);
|
||||
error2:
|
||||
gpio_free(ETH_KS8851_QUART);
|
||||
error1:
|
||||
gpio_free(ETH_KS8851_POWER_ON);
|
||||
return status;
|
||||
}
|
||||
|
||||
static struct platform_device sdp4430_lcd_device = {
|
||||
.name = "sdp4430_lcd",
|
||||
.id = -1,
|
||||
|
@ -113,6 +183,8 @@ static struct omap_musb_board_data musb_board_data = {
|
|||
|
||||
static void __init omap_4430sdp_init(void)
|
||||
{
|
||||
int status;
|
||||
|
||||
platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
|
||||
omap_serial_init();
|
||||
/* OMAP4 SDP uses internal transceiver so register nop transceiver */
|
||||
|
@ -120,6 +192,15 @@ static void __init omap_4430sdp_init(void)
|
|||
/* FIXME: allow multi-omap to boot until musb is updated for omap4 */
|
||||
if (!cpu_is_omap44xx())
|
||||
usb_musb_init(&musb_board_data);
|
||||
|
||||
status = omap_ethernet_init();
|
||||
if (status) {
|
||||
pr_err("Ethernet initialization failed: %d\n", status);
|
||||
} else {
|
||||
sdp4430_spi_board_info[0].irq = gpio_to_irq(ETH_KS8851_IRQ);
|
||||
spi_register_board_info(sdp4430_spi_board_info,
|
||||
ARRAY_SIZE(sdp4430_spi_board_info));
|
||||
}
|
||||
}
|
||||
|
||||
static void __init omap_4430sdp_map_io(void)
|
||||
|
|
Loading…
Reference in a new issue