aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ucc_geth.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ucc_geth.c')
-rw-r--r--drivers/net/ucc_geth.c55
1 files changed, 51 insertions, 4 deletions
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c
index 7f689907ac28..0f7626856a6b 100644
--- a/drivers/net/ucc_geth.c
+++ b/drivers/net/ucc_geth.c
@@ -3822,6 +3822,7 @@ static int ucc_geth_probe(struct of_device* ofdev, const struct of_device_id *ma
3822 int err, ucc_num, max_speed = 0; 3822 int err, ucc_num, max_speed = 0;
3823 const phandle *ph; 3823 const phandle *ph;
3824 const unsigned int *prop; 3824 const unsigned int *prop;
3825 const char *sprop;
3825 const void *mac_addr; 3826 const void *mac_addr;
3826 phy_interface_t phy_interface; 3827 phy_interface_t phy_interface;
3827 static const int enet_to_speed[] = { 3828 static const int enet_to_speed[] = {
@@ -3854,10 +3855,56 @@ static int ucc_geth_probe(struct of_device* ofdev, const struct of_device_id *ma
3854 3855
3855 ug_info->uf_info.ucc_num = ucc_num; 3856 ug_info->uf_info.ucc_num = ucc_num;
3856 3857
3857 prop = of_get_property(np, "rx-clock", NULL); 3858 sprop = of_get_property(np, "rx-clock-name", NULL);
3858 ug_info->uf_info.rx_clock = *prop; 3859 if (sprop) {
3859 prop = of_get_property(np, "tx-clock", NULL); 3860 ug_info->uf_info.rx_clock = qe_clock_source(sprop);
3860 ug_info->uf_info.tx_clock = *prop; 3861 if ((ug_info->uf_info.rx_clock < QE_CLK_NONE) ||
3862 (ug_info->uf_info.rx_clock > QE_CLK24)) {
3863 printk(KERN_ERR
3864 "ucc_geth: invalid rx-clock-name property\n");
3865 return -EINVAL;
3866 }
3867 } else {
3868 prop = of_get_property(np, "rx-clock", NULL);
3869 if (!prop) {
3870 /* If both rx-clock-name and rx-clock are missing,
3871 we want to tell people to use rx-clock-name. */
3872 printk(KERN_ERR
3873 "ucc_geth: missing rx-clock-name property\n");
3874 return -EINVAL;
3875 }
3876 if ((*prop < QE_CLK_NONE) || (*prop > QE_CLK24)) {
3877 printk(KERN_ERR
3878 "ucc_geth: invalid rx-clock propperty\n");
3879 return -EINVAL;
3880 }
3881 ug_info->uf_info.rx_clock = *prop;
3882 }
3883
3884 sprop = of_get_property(np, "tx-clock-name", NULL);
3885 if (sprop) {
3886 ug_info->uf_info.tx_clock = qe_clock_source(sprop);
3887 if ((ug_info->uf_info.tx_clock < QE_CLK_NONE) ||
3888 (ug_info->uf_info.tx_clock > QE_CLK24)) {
3889 printk(KERN_ERR
3890 "ucc_geth: invalid tx-clock-name property\n");
3891 return -EINVAL;
3892 }
3893 } else {
3894 prop = of_get_property(np, "rx-clock", NULL);
3895 if (!prop) {
3896 printk(KERN_ERR
3897 "ucc_geth: mising tx-clock-name property\n");
3898 return -EINVAL;
3899 }
3900 if ((*prop < QE_CLK_NONE) || (*prop > QE_CLK24)) {
3901 printk(KERN_ERR
3902 "ucc_geth: invalid tx-clock property\n");
3903 return -EINVAL;
3904 }
3905 ug_info->uf_info.tx_clock = *prop;
3906 }
3907
3861 err = of_address_to_resource(np, 0, &res); 3908 err = of_address_to_resource(np, 0, &res);
3862 if (err) 3909 if (err)
3863 return -EINVAL; 3910 return -EINVAL;