generic: rtl8366: preparing for RTL8367 support
* make clock delay configurable * make read,write commands configurable * use u16 for member and untag fields SVN-Revision: 29677
This commit is contained in:
		@@ -24,11 +24,10 @@
 | 
				
			|||||||
#include "rtl8366_smi.h"
 | 
					#include "rtl8366_smi.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define RTL8366_SMI_ACK_RETRY_COUNT         5
 | 
					#define RTL8366_SMI_ACK_RETRY_COUNT         5
 | 
				
			||||||
#define RTL8366_SMI_CLK_DELAY               10 /* nsec */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void rtl8366_smi_clk_delay(struct rtl8366_smi *smi)
 | 
					static inline void rtl8366_smi_clk_delay(struct rtl8366_smi *smi)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ndelay(RTL8366_SMI_CLK_DELAY);
 | 
						ndelay(smi->clk_delay);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void rtl8366_smi_start(struct rtl8366_smi *smi)
 | 
					static void rtl8366_smi_start(struct rtl8366_smi *smi)
 | 
				
			||||||
@@ -198,7 +197,7 @@ int rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data)
 | 
				
			|||||||
	rtl8366_smi_start(smi);
 | 
						rtl8366_smi_start(smi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* send READ command */
 | 
						/* send READ command */
 | 
				
			||||||
	ret = rtl8366_smi_write_byte(smi, 0x0a << 4 | 0x04 << 1 | 0x01);
 | 
						ret = rtl8366_smi_write_byte(smi, smi->cmd_read);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -239,7 +238,7 @@ int rtl8366_smi_write_reg(struct rtl8366_smi *smi, u32 addr, u32 data)
 | 
				
			|||||||
	rtl8366_smi_start(smi);
 | 
						rtl8366_smi_start(smi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* send WRITE command */
 | 
						/* send WRITE command */
 | 
				
			||||||
	ret = rtl8366_smi_write_byte(smi, 0x0a << 4 | 0x04 << 1 | 0x00);
 | 
						ret = rtl8366_smi_write_byte(smi, smi->cmd_write);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,9 @@ struct rtl8366_smi {
 | 
				
			|||||||
	struct device		*parent;
 | 
						struct device		*parent;
 | 
				
			||||||
	unsigned int		gpio_sda;
 | 
						unsigned int		gpio_sda;
 | 
				
			||||||
	unsigned int		gpio_sck;
 | 
						unsigned int		gpio_sck;
 | 
				
			||||||
 | 
						unsigned int		clk_delay;	/* ns */
 | 
				
			||||||
 | 
						u8			cmd_read;
 | 
				
			||||||
 | 
						u8			cmd_write;
 | 
				
			||||||
	spinlock_t		lock;
 | 
						spinlock_t		lock;
 | 
				
			||||||
	struct mii_bus		*mii_bus;
 | 
						struct mii_bus		*mii_bus;
 | 
				
			||||||
	int			mii_irq[PHY_MAX_ADDR];
 | 
						int			mii_irq[PHY_MAX_ADDR];
 | 
				
			||||||
@@ -58,16 +61,16 @@ struct rtl8366_smi {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct rtl8366_vlan_mc {
 | 
					struct rtl8366_vlan_mc {
 | 
				
			||||||
	u16	vid;
 | 
						u16	vid;
 | 
				
			||||||
	u8	priority;
 | 
						u16	untag;
 | 
				
			||||||
	u8	untag;
 | 
						u16	member;
 | 
				
			||||||
	u8	member;
 | 
					 | 
				
			||||||
	u8	fid;
 | 
						u8	fid;
 | 
				
			||||||
 | 
						u8	priority;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct rtl8366_vlan_4k {
 | 
					struct rtl8366_vlan_4k {
 | 
				
			||||||
	u16	vid;
 | 
						u16	vid;
 | 
				
			||||||
	u8	untag;
 | 
						u16	untag;
 | 
				
			||||||
	u8	member;
 | 
						u16	member;
 | 
				
			||||||
	u8	fid;
 | 
						u8	fid;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1247,6 +1247,9 @@ static int __devinit rtl8366rb_probe(struct platform_device *pdev)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	smi->gpio_sda = pdata->gpio_sda;
 | 
						smi->gpio_sda = pdata->gpio_sda;
 | 
				
			||||||
	smi->gpio_sck = pdata->gpio_sck;
 | 
						smi->gpio_sck = pdata->gpio_sck;
 | 
				
			||||||
 | 
						smi->clk_delay = 10;
 | 
				
			||||||
 | 
						smi->cmd_read = 0xa9;
 | 
				
			||||||
 | 
						smi->cmd_write = 0xa8;
 | 
				
			||||||
	smi->ops = &rtl8366rb_smi_ops;
 | 
						smi->ops = &rtl8366rb_smi_ops;
 | 
				
			||||||
	smi->cpu_port = RTL8366RB_PORT_NUM_CPU;
 | 
						smi->cpu_port = RTL8366RB_PORT_NUM_CPU;
 | 
				
			||||||
	smi->num_ports = RTL8366RB_NUM_PORTS;
 | 
						smi->num_ports = RTL8366RB_NUM_PORTS;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1127,6 +1127,9 @@ static int __devinit rtl8366s_probe(struct platform_device *pdev)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	smi->gpio_sda = pdata->gpio_sda;
 | 
						smi->gpio_sda = pdata->gpio_sda;
 | 
				
			||||||
	smi->gpio_sck = pdata->gpio_sck;
 | 
						smi->gpio_sck = pdata->gpio_sck;
 | 
				
			||||||
 | 
						smi->clk_delay = 10;
 | 
				
			||||||
 | 
						smi->cmd_read = 0xa9;
 | 
				
			||||||
 | 
						smi->cmd_write = 0xa8;
 | 
				
			||||||
	smi->ops = &rtl8366s_smi_ops;
 | 
						smi->ops = &rtl8366s_smi_ops;
 | 
				
			||||||
	smi->cpu_port = RTL8366S_PORT_NUM_CPU;
 | 
						smi->cpu_port = RTL8366S_PORT_NUM_CPU;
 | 
				
			||||||
	smi->num_ports = RTL8366S_NUM_PORTS;
 | 
						smi->num_ports = RTL8366S_NUM_PORTS;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user