1 #include <linux/module.h>
2 #include <linux/platform_device.h>
3 #include <linux/dma-mapping.h>
4 #include <linux/usb/otg.h>
5 #include <linux/usb/usb_phy_gen_xceiv.h>
6 #include <linux/slab.h>
8 #include <linux/regulator/consumer.h>
10 #include <linux/of_address.h>
12 #include "am35x-phy-control.h"
13 #include "phy-generic.h"
16 struct usb_phy_gen_xceiv usb_phy_gen
;
17 struct phy_control
*phy_ctrl
;
21 static int am335x_init(struct usb_phy
*phy
)
23 struct am335x_phy
*am_phy
= dev_get_drvdata(phy
->dev
);
25 phy_ctrl_power(am_phy
->phy_ctrl
, am_phy
->id
, true);
29 static void am335x_shutdown(struct usb_phy
*phy
)
31 struct am335x_phy
*am_phy
= dev_get_drvdata(phy
->dev
);
33 phy_ctrl_power(am_phy
->phy_ctrl
, am_phy
->id
, false);
36 static int am335x_phy_probe(struct platform_device
*pdev
)
38 struct am335x_phy
*am_phy
;
39 struct device
*dev
= &pdev
->dev
;
42 am_phy
= devm_kzalloc(dev
, sizeof(*am_phy
), GFP_KERNEL
);
46 am_phy
->phy_ctrl
= am335x_get_phy_control(dev
);
47 if (!am_phy
->phy_ctrl
)
49 am_phy
->id
= of_alias_get_id(pdev
->dev
.of_node
, "phy");
51 dev_err(&pdev
->dev
, "Missing PHY id: %d\n", am_phy
->id
);
55 ret
= usb_phy_gen_create_phy(dev
, &am_phy
->usb_phy_gen
,
56 USB_PHY_TYPE_USB2
, 0, false, false);
60 ret
= usb_add_phy_dev(&am_phy
->usb_phy_gen
.phy
);
63 am_phy
->usb_phy_gen
.phy
.init
= am335x_init
;
64 am_phy
->usb_phy_gen
.phy
.shutdown
= am335x_shutdown
;
66 platform_set_drvdata(pdev
, am_phy
);
70 usb_phy_gen_cleanup_phy(&am_phy
->usb_phy_gen
);
74 static int am335x_phy_remove(struct platform_device
*pdev
)
76 struct am335x_phy
*am_phy
= platform_get_drvdata(pdev
);
78 usb_remove_phy(&am_phy
->usb_phy_gen
.phy
);
82 static const struct of_device_id am335x_phy_ids
[] = {
83 { .compatible
= "ti,am335x-usb-phy" },
86 MODULE_DEVICE_TABLE(of
, am335x_phy_ids
);
88 static struct platform_driver am335x_phy_driver
= {
89 .probe
= am335x_phy_probe
,
90 .remove
= am335x_phy_remove
,
92 .name
= "am335x-phy-driver",
94 .of_match_table
= of_match_ptr(am335x_phy_ids
),
98 module_platform_driver(am335x_phy_driver
);
99 MODULE_LICENSE("GPL v2");