# File list
1. winzet.tar - linux kernel 3.5.7
2. W5500_linux_dirver - W5500 Driver for Linux v3.0.x
3. w5500_v2.4.X_dirver - W5500 Driver for Linux v2.4.x 

#Tinkerforge W5200 / W5500 Linux driver
https://github.com/borg42/w5x00


# 이하
W5500_linux_dirver 코드전달 드립니다. README와 같이 V3.0.x로 작성한 드라이버 입니다. 
Target Board는 OMAP Pandaboard입니다. 
또한 MCU와 W5500의 SPI interface부분은 Kernel SPI API를 사용하였습니다. 
W5500_linux_dirver.zip파일 첨부하였습니다. 

이하 README.txt내용입니다. 
========================================
WIZnet W5500 Driver for Linux v3.0.x
========================================

This driver is made by WIZnet. 
This driver is used by using the kernel SPI API for W5500 SPI interface.
The testing is completed at the Linux kernel V3.0.x which is ported to Pandaboard.
In order to use this driver, the Linux kernel source should be ported on your system.
Some architecture dependent routine can be modified.

The compile process is as below.

STEP 1: 
  - Acquire Linux kernel source of your system.
  * The official site of Linux kernel is http://kernel.org

STEP 2:
  - Port the Linux kernel source to your system.

STEP 3:
  - Compile the Linux kernel source 

STEP 4:
  - Open Makefile of the driver by using editor program.
  - Modify "KDIR :=/usr.src/linux' into the routine where Linux kernel source is installed.

STEP 5:
  - run 'make'
  - If 'wiznet.ko'is created, driver compile is completed.
  - Modify archtecture dependant part, re-compile and use it.
  
========================================
File List
========================================
dev.c         : Chip interface & register netdevice
module.c      : Initial module for kernel (Entry point)
netdrv.c      : Linux Socket Interface
queue.c       : Queue buffer for SKB
regs.h        : W5500 Register / Memory Maps
w5500.h       : W5500 Common header
app/netloop.c : socket loopback test program; Refer to usage() in netloop.c for more detail.

Port guide는 아래와 같이 Interrupt와 SPI를 설정하는 부분이 있습니다. 
이부분은 보드마다 상이하기 때문에 예로 아래와 같이 정리하였습니다. 
참고 부탁드립니다. 
	Port guide
커널 소스에서 OMAP Pandaboard의 BSP에서 사용한 부분들은 Pin 설정(SPI/RESETn/Interrupt)관련 부분들입니다. 
이분들은 사용하시는 Board 특성에 따라 변경하여 사용하면 됩니다. 

dev.c 에서 Reset Pin과 Interrupt Pin을 설정하는데 아래와 같은 함수 들을 사용하였습니다. 
1.	Reset Pin: void iinchip_hwreset(void)
-gpio_request(W5500_NREST, "w5500_reset");  // Reset Pin Request
-gpio_direction_output(W5500_NREST, 1);      // Reset pin을 output으로 설정
-gpio_set_value(W5500_NREST, X);               // Reset pin 을 해당 value로 assert
=> 사용하는 Board의 GPIO함수를 하용하여 해당 기능을 구현하시면 됩니다. 
2.	Interrupt Pin : 
-enable_irq(OMAP_GPIO_IRQ(W5500_NINT));           //Interrupt enable
-disable_irq_nosync(OMAP_GPIO_IRQ(W5500_NINT)) //Interrupt disable
=> OMAP_GPIO_IRQ(W5500_NINT)함수는 해당 보드에 맞게 변경하여 Interrupt enable과 disable를 설정하시면 됩니다.
3.	SPI pin
	SPI를 사용하기 위해 Kernel내부에서 설정이 필요합니다. 이부분을 보드마다 다른 부분이라 아래와 같이 간단하게 설명 드립니다. 
	SPI Pin 설정이 필요합니다. 
	SPI 관련 설정이 필요합니다. (SPI모드 / SPI Clock속도 / SPI mode)
	OMAP SPI 설정을 참고 하시기 바랍니다. 
static struct omap2_mcspi_device_config w5500_mcspi_config = {
    .turbo_mode = 0,
    .single_channel = 1,    /* 0: slave, 1: master */
};

static struct spi_board_info omap4panda_spi_board_info[] __initdata = {
    [0] = {
        .modalias       = "w5500",
        .bus_num        = 1,
        .chip_select        = 0,                                // TODO
        .max_speed_hz       = 6000000,                          // 20 MHz
        .controller_data    = &w5500_mcspi_config,
        .mode = (SPI_MODE_0),
    },
};
	Kernel SPI API적용 : Kernel 에서 제공하는 SPI API를 사용합니다. 
	~/kernel/include/spi/spi.h (참고 하시면 됩니다. )

