---
--- a/drivers/net/phy/ar8216.c
+++ b/drivers/net/phy/ar8216.c
-@@ -251,6 +251,7 @@ ar8xxx_mii_write32(struct ar8xxx_priv *p
+@@ -250,6 +250,7 @@ ar8xxx_mii_write32(struct ar8xxx_priv *p
u32
ar8xxx_read(struct ar8xxx_priv *priv, int reg)
{
struct mii_bus *bus = priv->mii_bus;
u16 r1, r2, page;
u32 val;
-@@ -258,11 +259,13 @@ ar8xxx_read(struct ar8xxx_priv *priv, in
+@@ -257,11 +258,13 @@ ar8xxx_read(struct ar8xxx_priv *priv, in
split_addr((u32) reg, &r1, &r2, &page);
mutex_lock(&bus->mdio_lock);
mutex_unlock(&bus->mdio_lock);
return val;
-@@ -271,17 +274,20 @@ ar8xxx_read(struct ar8xxx_priv *priv, in
+@@ -270,17 +273,20 @@ ar8xxx_read(struct ar8xxx_priv *priv, in
void
ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val)
{
#include <linux/phy.h>
#include <linux/etherdevice.h>
#include <linux/lockdep.h>
-#include <linux/ar8216_platform.h>
#include <linux/workqueue.h>
#include "ar8216.h"
#include <linux/delay.h>
#include <linux/phy.h>
#include <linux/lockdep.h>
-#include <linux/ar8216_platform.h>
#include <linux/workqueue.h>
#include <linux/of.h>
#include <linux/of_device.h>
kfree(data->leds);
}
-static int
-ar8327_hw_config_pdata(struct ar8xxx_priv *priv,
- struct ar8327_platform_data *pdata)
-{
- struct ar8327_led_cfg *led_cfg;
- struct ar8327_data *data = priv->chip_data;
- u32 pos, new_pos;
- u32 t;
-
- if (!pdata)
- return -EINVAL;
-
- priv->get_port_link = pdata->get_port_link;
-
- data->port0_status = ar8327_get_port_init_status(&pdata->port0_cfg);
- data->port6_status = ar8327_get_port_init_status(&pdata->port6_cfg);
-
- t = ar8327_get_pad_cfg(pdata->pad0_cfg);
- if (chip_is_ar8337(priv) && !pdata->pad0_cfg->mac06_exchange_dis)
- t |= AR8337_PAD_MAC06_EXCHANGE_EN;
- ar8xxx_write(priv, AR8327_REG_PAD0_MODE, t);
-
- t = ar8327_get_pad_cfg(pdata->pad5_cfg);
- ar8xxx_write(priv, AR8327_REG_PAD5_MODE, t);
- t = ar8327_get_pad_cfg(pdata->pad6_cfg);
- ar8xxx_write(priv, AR8327_REG_PAD6_MODE, t);
-
- pos = ar8xxx_read(priv, AR8327_REG_POWER_ON_STRAP);
- new_pos = pos;
-
- led_cfg = pdata->led_cfg;
- if (led_cfg) {
- if (led_cfg->open_drain)
- new_pos |= AR8327_POWER_ON_STRAP_LED_OPEN_EN;
- else
- new_pos &= ~AR8327_POWER_ON_STRAP_LED_OPEN_EN;
-
- ar8xxx_write(priv, AR8327_REG_LED_CTRL0, led_cfg->led_ctrl0);
- ar8xxx_write(priv, AR8327_REG_LED_CTRL1, led_cfg->led_ctrl1);
- ar8xxx_write(priv, AR8327_REG_LED_CTRL2, led_cfg->led_ctrl2);
- ar8xxx_write(priv, AR8327_REG_LED_CTRL3, led_cfg->led_ctrl3);
-
- if (new_pos != pos)
- new_pos |= AR8327_POWER_ON_STRAP_POWER_ON_SEL;
- }
-
- if (pdata->sgmii_cfg) {
- t = pdata->sgmii_cfg->sgmii_ctrl;
- if (priv->chip_rev == 1)
- t |= AR8327_SGMII_CTRL_EN_PLL |
- AR8327_SGMII_CTRL_EN_RX |
- AR8327_SGMII_CTRL_EN_TX;
- else
- t &= ~(AR8327_SGMII_CTRL_EN_PLL |
- AR8327_SGMII_CTRL_EN_RX |
- AR8327_SGMII_CTRL_EN_TX);
-
- ar8xxx_write(priv, AR8327_REG_SGMII_CTRL, t);
-
- if (pdata->sgmii_cfg->serdes_aen)
- new_pos &= ~AR8327_POWER_ON_STRAP_SERDES_AEN;
- else
- new_pos |= AR8327_POWER_ON_STRAP_SERDES_AEN;
- }
-
- ar8xxx_write(priv, AR8327_REG_POWER_ON_STRAP, new_pos);
-
- if (pdata->leds && pdata->num_leds) {
- int i;
-
- data->leds = kzalloc(pdata->num_leds * sizeof(void *),
- GFP_KERNEL);
- if (!data->leds)
- return -ENOMEM;
-
- for (i = 0; i < pdata->num_leds; i++)
- ar8327_led_create(priv, &pdata->leds[i]);
- }
-
- return 0;
-}
-
-#ifdef CONFIG_OF
static int
ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np)
{
of_node_put(leds);
return 0;
}
-#else
-static inline int
-ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np)
-{
- return -EINVAL;
-}
-#endif
static int
ar8327_hw_init(struct ar8xxx_priv *priv)
if (!priv->chip_data)
return -ENOMEM;
- if (priv->pdev->of_node)
- ret = ar8327_hw_config_of(priv, priv->pdev->of_node);
- else
- ret = ar8327_hw_config_pdata(priv,
- priv->phy->mdio.dev.platform_data);
-
+ ret = ar8327_hw_config_of(priv, priv->pdev->of_node);
if (ret)
return ret;
unsigned shift;
};
+enum ar8327_pad_mode {
+ AR8327_PAD_NC = 0,
+ AR8327_PAD_MAC2MAC_MII,
+ AR8327_PAD_MAC2MAC_GMII,
+ AR8327_PAD_MAC_SGMII,
+ AR8327_PAD_MAC2PHY_MII,
+ AR8327_PAD_MAC2PHY_GMII,
+ AR8327_PAD_MAC_RGMII,
+ AR8327_PAD_PHY_GMII,
+ AR8327_PAD_PHY_RGMII,
+ AR8327_PAD_PHY_MII,
+};
+
+enum ar8327_clk_delay_sel {
+ AR8327_CLK_DELAY_SEL0 = 0,
+ AR8327_CLK_DELAY_SEL1,
+ AR8327_CLK_DELAY_SEL2,
+ AR8327_CLK_DELAY_SEL3,
+};
+
+struct ar8327_pad_cfg {
+ enum ar8327_pad_mode mode;
+ bool rxclk_sel;
+ bool txclk_sel;
+ bool pipe_rxclk_sel;
+ bool txclk_delay_en;
+ bool rxclk_delay_en;
+ bool sgmii_delay_en;
+ enum ar8327_clk_delay_sel txclk_delay_sel;
+ enum ar8327_clk_delay_sel rxclk_delay_sel;
+ bool mac06_exchange_dis;
+};
+
+enum ar8327_port_speed {
+ AR8327_PORT_SPEED_10 = 0,
+ AR8327_PORT_SPEED_100,
+ AR8327_PORT_SPEED_1000,
+};
+
+struct ar8327_port_cfg {
+ int force_link:1;
+ enum ar8327_port_speed speed;
+ int txpause:1;
+ int rxpause:1;
+ int duplex:1;
+};
+
+struct ar8327_sgmii_cfg {
+ u32 sgmii_ctrl;
+ bool serdes_aen;
+};
+
+enum ar8327_led_num {
+ AR8327_LED_PHY0_0 = 0,
+ AR8327_LED_PHY0_1,
+ AR8327_LED_PHY0_2,
+ AR8327_LED_PHY1_0,
+ AR8327_LED_PHY1_1,
+ AR8327_LED_PHY1_2,
+ AR8327_LED_PHY2_0,
+ AR8327_LED_PHY2_1,
+ AR8327_LED_PHY2_2,
+ AR8327_LED_PHY3_0,
+ AR8327_LED_PHY3_1,
+ AR8327_LED_PHY3_2,
+ AR8327_LED_PHY4_0,
+ AR8327_LED_PHY4_1,
+ AR8327_LED_PHY4_2,
+};
+
+enum ar8327_led_mode {
+ AR8327_LED_MODE_HW = 0,
+ AR8327_LED_MODE_SW,
+};
+
+struct ar8327_led_info {
+ const char *name;
+ const char *default_trigger;
+ bool active_low;
+ enum ar8327_led_num led_num;
+ enum ar8327_led_mode mode;
+ struct fwnode_handle *fwnode;
+};
+
struct ar8327_led {
struct led_classdev cdev;
struct ar8xxx_priv *sw_priv;
+++ /dev/null
-/*
- * AR8216 switch driver platform data
- *
- * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#ifndef AR8216_PLATFORM_H
-#define AR8216_PLATFORM_H
-
-enum ar8327_pad_mode {
- AR8327_PAD_NC = 0,
- AR8327_PAD_MAC2MAC_MII,
- AR8327_PAD_MAC2MAC_GMII,
- AR8327_PAD_MAC_SGMII,
- AR8327_PAD_MAC2PHY_MII,
- AR8327_PAD_MAC2PHY_GMII,
- AR8327_PAD_MAC_RGMII,
- AR8327_PAD_PHY_GMII,
- AR8327_PAD_PHY_RGMII,
- AR8327_PAD_PHY_MII,
-};
-
-enum ar8327_clk_delay_sel {
- AR8327_CLK_DELAY_SEL0 = 0,
- AR8327_CLK_DELAY_SEL1,
- AR8327_CLK_DELAY_SEL2,
- AR8327_CLK_DELAY_SEL3,
-};
-
-struct ar8327_pad_cfg {
- enum ar8327_pad_mode mode;
- bool rxclk_sel;
- bool txclk_sel;
- bool pipe_rxclk_sel;
- bool txclk_delay_en;
- bool rxclk_delay_en;
- bool sgmii_delay_en;
- enum ar8327_clk_delay_sel txclk_delay_sel;
- enum ar8327_clk_delay_sel rxclk_delay_sel;
- bool mac06_exchange_dis;
-};
-
-enum ar8327_port_speed {
- AR8327_PORT_SPEED_10 = 0,
- AR8327_PORT_SPEED_100,
- AR8327_PORT_SPEED_1000,
-};
-
-struct ar8327_port_cfg {
- int force_link:1;
- enum ar8327_port_speed speed;
- int txpause:1;
- int rxpause:1;
- int duplex:1;
-};
-
-struct ar8327_sgmii_cfg {
- u32 sgmii_ctrl;
- bool serdes_aen;
-};
-
-struct ar8327_led_cfg {
- u32 led_ctrl0;
- u32 led_ctrl1;
- u32 led_ctrl2;
- u32 led_ctrl3;
- bool open_drain;
-};
-
-enum ar8327_led_num {
- AR8327_LED_PHY0_0 = 0,
- AR8327_LED_PHY0_1,
- AR8327_LED_PHY0_2,
- AR8327_LED_PHY1_0,
- AR8327_LED_PHY1_1,
- AR8327_LED_PHY1_2,
- AR8327_LED_PHY2_0,
- AR8327_LED_PHY2_1,
- AR8327_LED_PHY2_2,
- AR8327_LED_PHY3_0,
- AR8327_LED_PHY3_1,
- AR8327_LED_PHY3_2,
- AR8327_LED_PHY4_0,
- AR8327_LED_PHY4_1,
- AR8327_LED_PHY4_2,
-};
-
-enum ar8327_led_mode {
- AR8327_LED_MODE_HW = 0,
- AR8327_LED_MODE_SW,
-};
-
-struct ar8327_led_info {
- const char *name;
- const char *default_trigger;
- bool active_low;
- enum ar8327_led_num led_num;
- enum ar8327_led_mode mode;
- struct fwnode_handle *fwnode;
-};
-
-#define AR8327_LED_INFO(_led, _mode, _name) { \
- .name = (_name), \
- .led_num = AR8327_LED_ ## _led, \
- .mode = AR8327_LED_MODE_ ## _mode \
-}
-
-struct ar8327_platform_data {
- struct ar8327_pad_cfg *pad0_cfg;
- struct ar8327_pad_cfg *pad5_cfg;
- struct ar8327_pad_cfg *pad6_cfg;
- struct ar8327_sgmii_cfg *sgmii_cfg;
- struct ar8327_port_cfg port0_cfg;
- struct ar8327_port_cfg port6_cfg;
- struct ar8327_led_cfg *led_cfg;
-
- int (*get_port_link)(unsigned port);
-
- unsigned num_leds;
- const struct ar8327_led_info *leds;
-};
-
-#endif /* AR8216_PLATFORM_H */
-