1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2014 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
* Author: Heinrich Toews <heinrich.toews@wago.com>
*/
#define pr_fmt(fmt) "pfc200: " fmt
#include <common.h>
#include <init.h>
#include <driver.h>
#include <gpio.h>
#include <linux/sizes.h>
#include <linux/err.h>
#include <linux/phy.h>
#include <linux/micrel_phy.h>
#include <asm/memory.h>
#include <mach/generic.h>
static int pfc200_mem_init(void)
{
if (!of_machine_is_compatible("ti,pfc200"))
return 0;
arm_add_mem_device("ram0", 0x80000000, SZ_256M);
return 0;
}
mem_initcall(pfc200_mem_init);
#define BMCR_HP_MDIX 0x20
static int pfc200_phy_fixup(struct mii_bus *mii, int phyadr)
{
struct phy_device *phydev;
int ret;
phydev = mdiobus_scan(mii, phyadr);
if (IS_ERR(phydev)) {
pr_err("Cannot find phydev %d on mii bus\n", phyadr);
return PTR_ERR(phydev);
}
ret = phy_write(phydev, MII_BMCR, BMCR_ANENABLE | BMCR_HP_MDIX);
if (ret)
pr_err("Failed to write to phy: %s\n", strerror(-ret));
return ret;
}
static int pfc200_late_init(void)
{
struct mii_bus *mii;
if (!of_machine_is_compatible("ti,pfc200"))
return 0;
mii = mdiobus_get_bus(0);
if (!mii) {
pr_err("Cannot find mii bus 0\n");
return -ENODEV;
}
pfc200_phy_fixup(mii, 1);
pfc200_phy_fixup(mii, 2);
return 0;
}
late_initcall(pfc200_late_init);
#define GPIO_KSZ886x_RESET 136
static int pfc200_devices_init(void)
{
if (!of_machine_is_compatible("ti,pfc200"))
return 0;
gpio_direction_output(GPIO_KSZ886x_RESET, 1);
omap_set_bootmmc_devname("mmc0");
return 0;
}
coredevice_initcall(pfc200_devices_init);
|