diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-07-11 14:59:31 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-07-11 14:59:31 +0000 |
commit | 3f82f4f4f292d053206a4fd25719e15aa3518f49 (patch) | |
tree | df715c6b55a6ec14a2d778a62b2deacba7ef653b /target | |
parent | 23e2296edecc252583a5bb2d7fbc6a5107fe2767 (diff) |
[ar71xx] use platform data to setup the MAC_CFG register in the spi_vsc7385 driver
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@16780 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target')
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/mach-ap83.c | 5 | ||||
-rw-r--r-- | target/linux/ar71xx/files/drivers/spi/spi_vsc7385.c | 21 | ||||
-rw-r--r-- | target/linux/ar71xx/files/include/linux/spi/vsc7385.h | 5 |
3 files changed, 24 insertions, 7 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ap83.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ap83.c index 111ea4a3dd..80dd3c64aa 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ap83.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-ap83.c @@ -169,6 +169,11 @@ static void ap83_vsc7385_reset(void) static struct vsc7385_platform_data ap83_vsc7385_data = { .reset = ap83_vsc7385_reset, .ucode_name = "vsc7385_ucode_ap83.bin", + .mac_cfg = { + .tx_ipg = 6, + .bit2 = 0, + .clk_sel = 3, + }, }; static struct spi_board_info ap83_spi_info[] = { diff --git a/target/linux/ar71xx/files/drivers/spi/spi_vsc7385.c b/target/linux/ar71xx/files/drivers/spi/spi_vsc7385.c index 14952c663b..c16707ed8c 100644 --- a/target/linux/ar71xx/files/drivers/spi/spi_vsc7385.c +++ b/target/linux/ar71xx/files/drivers/spi/spi_vsc7385.c @@ -63,10 +63,11 @@ #define VSC73XX_MAC_CFG_VLAN_DBLAWR (1 << 15) #define VSC73XX_MAC_CFG_VLAN_AWR (1 << 14) #define VSC73XX_MAC_CFG_100_BASE_T (1 << 13) -#define VSC73XX_MAC_CFG_TX_IPG(x) ((x & 0x1f) << 6) +#define VSC73XX_MAC_CFG_TX_IPG(x) (((x) & 0x1f) << 6) #define VSC73XX_MAC_CFG_MAC_RX_RST (1 << 5) #define VSC73XX_MAC_CFG_MAC_TX_RST (1 << 4) -#define VSC73XX_MAC_CFG_CLK_SEL(x) ((x & 0x3) << 0) +#define VSC73XX_MAC_CFG_BIT2 (1 << 2) +#define VSC73XX_MAC_CFG_CLK_SEL(x) ((x) & 0x3) /* ADVPORTM register bits */ #define VSC73XX_ADVPORTM_IFG_PPM (1 << 7) @@ -145,12 +146,10 @@ VSC73XX_MAC_CFG_MAC_RX_RST | \ VSC73XX_MAC_CFG_MAC_TX_RST) -#define VSC7385_MAC_CFG_INIT (VSC73XX_MAC_CFG_TX_EN | \ +#define VSC73XX_MAC_CFG_INIT (VSC73XX_MAC_CFG_TX_EN | \ VSC73XX_MAC_CFG_FDX | \ VSC73XX_MAC_CFG_GIGE | \ - VSC73XX_MAC_CFG_RX_EN | \ - VSC73XX_MAC_CFG_TX_IPG(6) | \ - 4) + VSC73XX_MAC_CFG_RX_EN) #define VSC73XX_RESET_DELAY 100 @@ -438,6 +437,8 @@ static int vsc7385_upload_ucode(struct vsc7385 *vsc) static int vsc7385_setup(struct vsc7385 *vsc) { + struct vsc7385_platform_data *pdata = vsc->pdata; + u32 t; int err; err = vsc7385_write_verify(vsc, VSC73XX_BLOCK_SYSTEM, 0, @@ -461,8 +462,14 @@ static int vsc7385_setup(struct vsc7385 *vsc) if (err) goto err; + t = VSC73XX_MAC_CFG_INIT; + t |= VSC73XX_MAC_CFG_TX_IPG(pdata->mac_cfg.tx_ipg); + t |= VSC73XX_MAC_CFG_CLK_SEL(pdata->mac_cfg.clk_sel); + if (pdata->mac_cfg.bit2) + t |= VSC73XX_MAC_CFG_BIT2; + err = vsc7385_write(vsc, VSC73XX_BLOCK_MAC, VSC73XX_SUBBLOCK_PORT_MAC, - VSC73XX_MAC_CFG, VSC7385_MAC_CFG_INIT); + VSC73XX_MAC_CFG, t); if (err) goto err; diff --git a/target/linux/ar71xx/files/include/linux/spi/vsc7385.h b/target/linux/ar71xx/files/include/linux/spi/vsc7385.h index 6d1bb132fa..90e05c83d2 100644 --- a/target/linux/ar71xx/files/include/linux/spi/vsc7385.h +++ b/target/linux/ar71xx/files/include/linux/spi/vsc7385.h @@ -11,4 +11,9 @@ struct vsc7385_platform_data { void (* reset)(void); char *ucode_name; + struct { + u32 tx_ipg:5; + u32 bit2:1; + u32 clk_sel:3; + } mac_cfg; }; |