diff options
Diffstat (limited to 'drivers/net/ucc_geth.c')
| -rw-r--r-- | drivers/net/ucc_geth.c | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c index abac7db381..8d456e379a 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; |
