summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2009-07-11 14:59:31 +0000
committerGabor Juhos <juhosg@openwrt.org>2009-07-11 14:59:31 +0000
commit218298becfb97225c0f10949b0730d4858a1fea2 (patch)
tree230a7f57d87ac2ebe3a1e8216736c27a10200083
parent292775eb34a0deaf84d0b9345d2f0125c8c5b36b (diff)
downloadmtk-20170518-218298becfb97225c0f10949b0730d4858a1fea2.zip
mtk-20170518-218298becfb97225c0f10949b0730d4858a1fea2.tar.gz
mtk-20170518-218298becfb97225c0f10949b0730d4858a1fea2.tar.bz2
use platform data to setup the MAC_CFG register in the spi_vsc7385 driver
SVN-Revision: 16780
-rw-r--r--target/linux/ar71xx/files/arch/mips/ar71xx/mach-ap83.c5
-rw-r--r--target/linux/ar71xx/files/drivers/spi/spi_vsc7385.c21
-rw-r--r--target/linux/ar71xx/files/include/linux/spi/vsc7385.h5
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 111ea4a..80dd3c6 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 14952c6..c16707e 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 6d1bb13..90e05c8 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;
};