0001
0002
0003
0004
0005
0006
0007 #ifndef __PHY_TEGRA_XUSB_H
0008 #define __PHY_TEGRA_XUSB_H
0009
0010 #include <linux/io.h>
0011 #include <linux/mutex.h>
0012 #include <linux/workqueue.h>
0013
0014 #include <linux/usb/ch9.h>
0015 #include <linux/usb/otg.h>
0016 #include <linux/usb/role.h>
0017
0018
0019 int tegra_xusb_padctl_legacy_probe(struct platform_device *pdev);
0020 int tegra_xusb_padctl_legacy_remove(struct platform_device *pdev);
0021
0022 struct phy;
0023 struct phy_provider;
0024 struct platform_device;
0025 struct regulator;
0026
0027
0028
0029
0030 struct tegra_xusb_lane_soc {
0031 const char *name;
0032
0033 unsigned int offset;
0034 unsigned int shift;
0035 unsigned int mask;
0036
0037 const char * const *funcs;
0038 unsigned int num_funcs;
0039
0040 struct {
0041 unsigned int misc_ctl2;
0042 } regs;
0043 };
0044
0045 struct tegra_xusb_lane {
0046 const struct tegra_xusb_lane_soc *soc;
0047 struct tegra_xusb_pad *pad;
0048 struct device_node *np;
0049 struct list_head list;
0050 unsigned int function;
0051 unsigned int index;
0052 };
0053
0054 int tegra_xusb_lane_parse_dt(struct tegra_xusb_lane *lane,
0055 struct device_node *np);
0056
0057 struct tegra_xusb_usb3_lane {
0058 struct tegra_xusb_lane base;
0059 };
0060
0061 static inline struct tegra_xusb_usb3_lane *
0062 to_usb3_lane(struct tegra_xusb_lane *lane)
0063 {
0064 return container_of(lane, struct tegra_xusb_usb3_lane, base);
0065 }
0066
0067 struct tegra_xusb_usb2_lane {
0068 struct tegra_xusb_lane base;
0069
0070 u32 hs_curr_level_offset;
0071 bool powered_on;
0072 };
0073
0074 static inline struct tegra_xusb_usb2_lane *
0075 to_usb2_lane(struct tegra_xusb_lane *lane)
0076 {
0077 return container_of(lane, struct tegra_xusb_usb2_lane, base);
0078 }
0079
0080 struct tegra_xusb_ulpi_lane {
0081 struct tegra_xusb_lane base;
0082 };
0083
0084 static inline struct tegra_xusb_ulpi_lane *
0085 to_ulpi_lane(struct tegra_xusb_lane *lane)
0086 {
0087 return container_of(lane, struct tegra_xusb_ulpi_lane, base);
0088 }
0089
0090 struct tegra_xusb_hsic_lane {
0091 struct tegra_xusb_lane base;
0092
0093 u32 strobe_trim;
0094 u32 rx_strobe_trim;
0095 u32 rx_data_trim;
0096 u32 tx_rtune_n;
0097 u32 tx_rtune_p;
0098 u32 tx_rslew_n;
0099 u32 tx_rslew_p;
0100 bool auto_term;
0101 };
0102
0103 static inline struct tegra_xusb_hsic_lane *
0104 to_hsic_lane(struct tegra_xusb_lane *lane)
0105 {
0106 return container_of(lane, struct tegra_xusb_hsic_lane, base);
0107 }
0108
0109 struct tegra_xusb_pcie_lane {
0110 struct tegra_xusb_lane base;
0111 };
0112
0113 static inline struct tegra_xusb_pcie_lane *
0114 to_pcie_lane(struct tegra_xusb_lane *lane)
0115 {
0116 return container_of(lane, struct tegra_xusb_pcie_lane, base);
0117 }
0118
0119 struct tegra_xusb_sata_lane {
0120 struct tegra_xusb_lane base;
0121 };
0122
0123 static inline struct tegra_xusb_sata_lane *
0124 to_sata_lane(struct tegra_xusb_lane *lane)
0125 {
0126 return container_of(lane, struct tegra_xusb_sata_lane, base);
0127 }
0128
0129 struct tegra_xusb_lane_ops {
0130 struct tegra_xusb_lane *(*probe)(struct tegra_xusb_pad *pad,
0131 struct device_node *np,
0132 unsigned int index);
0133 void (*remove)(struct tegra_xusb_lane *lane);
0134 void (*iddq_enable)(struct tegra_xusb_lane *lane);
0135 void (*iddq_disable)(struct tegra_xusb_lane *lane);
0136 int (*enable_phy_sleepwalk)(struct tegra_xusb_lane *lane, enum usb_device_speed speed);
0137 int (*disable_phy_sleepwalk)(struct tegra_xusb_lane *lane);
0138 int (*enable_phy_wake)(struct tegra_xusb_lane *lane);
0139 int (*disable_phy_wake)(struct tegra_xusb_lane *lane);
0140 bool (*remote_wake_detected)(struct tegra_xusb_lane *lane);
0141 };
0142
0143 bool tegra_xusb_lane_check(struct tegra_xusb_lane *lane, const char *function);
0144
0145
0146
0147
0148 struct tegra_xusb_pad_soc;
0149 struct tegra_xusb_padctl;
0150
0151 struct tegra_xusb_pad_ops {
0152 struct tegra_xusb_pad *(*probe)(struct tegra_xusb_padctl *padctl,
0153 const struct tegra_xusb_pad_soc *soc,
0154 struct device_node *np);
0155 void (*remove)(struct tegra_xusb_pad *pad);
0156 };
0157
0158 struct tegra_xusb_pad_soc {
0159 const char *name;
0160
0161 const struct tegra_xusb_lane_soc *lanes;
0162 unsigned int num_lanes;
0163
0164 const struct tegra_xusb_pad_ops *ops;
0165 };
0166
0167 struct tegra_xusb_pad {
0168 const struct tegra_xusb_pad_soc *soc;
0169 struct tegra_xusb_padctl *padctl;
0170 struct phy_provider *provider;
0171 struct phy **lanes;
0172 struct device dev;
0173
0174 const struct tegra_xusb_lane_ops *ops;
0175
0176 struct list_head list;
0177 };
0178
0179 static inline struct tegra_xusb_pad *to_tegra_xusb_pad(struct device *dev)
0180 {
0181 return container_of(dev, struct tegra_xusb_pad, dev);
0182 }
0183
0184 int tegra_xusb_pad_init(struct tegra_xusb_pad *pad,
0185 struct tegra_xusb_padctl *padctl,
0186 struct device_node *np);
0187 int tegra_xusb_pad_register(struct tegra_xusb_pad *pad,
0188 const struct phy_ops *ops);
0189 void tegra_xusb_pad_unregister(struct tegra_xusb_pad *pad);
0190
0191 struct tegra_xusb_usb3_pad {
0192 struct tegra_xusb_pad base;
0193
0194 unsigned int enable;
0195 struct mutex lock;
0196 };
0197
0198 static inline struct tegra_xusb_usb3_pad *
0199 to_usb3_pad(struct tegra_xusb_pad *pad)
0200 {
0201 return container_of(pad, struct tegra_xusb_usb3_pad, base);
0202 }
0203
0204 struct tegra_xusb_usb2_pad {
0205 struct tegra_xusb_pad base;
0206
0207 struct clk *clk;
0208 unsigned int enable;
0209 struct mutex lock;
0210 };
0211
0212 static inline struct tegra_xusb_usb2_pad *
0213 to_usb2_pad(struct tegra_xusb_pad *pad)
0214 {
0215 return container_of(pad, struct tegra_xusb_usb2_pad, base);
0216 }
0217
0218 struct tegra_xusb_ulpi_pad {
0219 struct tegra_xusb_pad base;
0220 };
0221
0222 static inline struct tegra_xusb_ulpi_pad *
0223 to_ulpi_pad(struct tegra_xusb_pad *pad)
0224 {
0225 return container_of(pad, struct tegra_xusb_ulpi_pad, base);
0226 }
0227
0228 struct tegra_xusb_hsic_pad {
0229 struct tegra_xusb_pad base;
0230
0231 struct regulator *supply;
0232 struct clk *clk;
0233 };
0234
0235 static inline struct tegra_xusb_hsic_pad *
0236 to_hsic_pad(struct tegra_xusb_pad *pad)
0237 {
0238 return container_of(pad, struct tegra_xusb_hsic_pad, base);
0239 }
0240
0241 struct tegra_xusb_pcie_pad {
0242 struct tegra_xusb_pad base;
0243
0244 struct reset_control *rst;
0245 struct clk *pll;
0246
0247 bool enable;
0248 };
0249
0250 static inline struct tegra_xusb_pcie_pad *
0251 to_pcie_pad(struct tegra_xusb_pad *pad)
0252 {
0253 return container_of(pad, struct tegra_xusb_pcie_pad, base);
0254 }
0255
0256 struct tegra_xusb_sata_pad {
0257 struct tegra_xusb_pad base;
0258
0259 struct reset_control *rst;
0260 struct clk *pll;
0261
0262 bool enable;
0263 };
0264
0265 static inline struct tegra_xusb_sata_pad *
0266 to_sata_pad(struct tegra_xusb_pad *pad)
0267 {
0268 return container_of(pad, struct tegra_xusb_sata_pad, base);
0269 }
0270
0271
0272
0273
0274 struct tegra_xusb_port_ops;
0275
0276 struct tegra_xusb_port {
0277 struct tegra_xusb_padctl *padctl;
0278 struct tegra_xusb_lane *lane;
0279 unsigned int index;
0280
0281 struct list_head list;
0282 struct device dev;
0283
0284 struct usb_role_switch *usb_role_sw;
0285 struct work_struct usb_phy_work;
0286 struct usb_phy usb_phy;
0287
0288 const struct tegra_xusb_port_ops *ops;
0289 };
0290
0291 static inline struct tegra_xusb_port *to_tegra_xusb_port(struct device *dev)
0292 {
0293 return container_of(dev, struct tegra_xusb_port, dev);
0294 }
0295
0296 struct tegra_xusb_lane_map {
0297 unsigned int port;
0298 const char *type;
0299 unsigned int index;
0300 const char *func;
0301 };
0302
0303 struct tegra_xusb_lane *
0304 tegra_xusb_port_find_lane(struct tegra_xusb_port *port,
0305 const struct tegra_xusb_lane_map *map,
0306 const char *function);
0307
0308 struct tegra_xusb_port *
0309 tegra_xusb_find_port(struct tegra_xusb_padctl *padctl, const char *type,
0310 unsigned int index);
0311
0312 struct tegra_xusb_usb2_port {
0313 struct tegra_xusb_port base;
0314
0315 struct regulator *supply;
0316 enum usb_dr_mode mode;
0317 bool internal;
0318 int usb3_port_fake;
0319 };
0320
0321 static inline struct tegra_xusb_usb2_port *
0322 to_usb2_port(struct tegra_xusb_port *port)
0323 {
0324 return container_of(port, struct tegra_xusb_usb2_port, base);
0325 }
0326
0327 struct tegra_xusb_usb2_port *
0328 tegra_xusb_find_usb2_port(struct tegra_xusb_padctl *padctl,
0329 unsigned int index);
0330 void tegra_xusb_usb2_port_release(struct tegra_xusb_port *port);
0331 void tegra_xusb_usb2_port_remove(struct tegra_xusb_port *port);
0332
0333 struct tegra_xusb_ulpi_port {
0334 struct tegra_xusb_port base;
0335
0336 struct regulator *supply;
0337 bool internal;
0338 };
0339
0340 static inline struct tegra_xusb_ulpi_port *
0341 to_ulpi_port(struct tegra_xusb_port *port)
0342 {
0343 return container_of(port, struct tegra_xusb_ulpi_port, base);
0344 }
0345
0346 void tegra_xusb_ulpi_port_release(struct tegra_xusb_port *port);
0347
0348 struct tegra_xusb_hsic_port {
0349 struct tegra_xusb_port base;
0350 };
0351
0352 static inline struct tegra_xusb_hsic_port *
0353 to_hsic_port(struct tegra_xusb_port *port)
0354 {
0355 return container_of(port, struct tegra_xusb_hsic_port, base);
0356 }
0357
0358 void tegra_xusb_hsic_port_release(struct tegra_xusb_port *port);
0359
0360 struct tegra_xusb_usb3_port {
0361 struct tegra_xusb_port base;
0362 struct regulator *supply;
0363 bool context_saved;
0364 unsigned int port;
0365 bool internal;
0366 bool disable_gen2;
0367
0368 u32 tap1;
0369 u32 amp;
0370 u32 ctle_z;
0371 u32 ctle_g;
0372 };
0373
0374 static inline struct tegra_xusb_usb3_port *
0375 to_usb3_port(struct tegra_xusb_port *port)
0376 {
0377 return container_of(port, struct tegra_xusb_usb3_port, base);
0378 }
0379
0380 struct tegra_xusb_usb3_port *
0381 tegra_xusb_find_usb3_port(struct tegra_xusb_padctl *padctl,
0382 unsigned int index);
0383 void tegra_xusb_usb3_port_release(struct tegra_xusb_port *port);
0384 void tegra_xusb_usb3_port_remove(struct tegra_xusb_port *port);
0385
0386 struct tegra_xusb_port_ops {
0387 void (*release)(struct tegra_xusb_port *port);
0388 void (*remove)(struct tegra_xusb_port *port);
0389 int (*enable)(struct tegra_xusb_port *port);
0390 void (*disable)(struct tegra_xusb_port *port);
0391 struct tegra_xusb_lane *(*map)(struct tegra_xusb_port *port);
0392 };
0393
0394
0395
0396
0397 struct tegra_xusb_padctl_soc;
0398
0399 struct tegra_xusb_padctl_ops {
0400 struct tegra_xusb_padctl *
0401 (*probe)(struct device *dev,
0402 const struct tegra_xusb_padctl_soc *soc);
0403 void (*remove)(struct tegra_xusb_padctl *padctl);
0404
0405 int (*suspend_noirq)(struct tegra_xusb_padctl *padctl);
0406 int (*resume_noirq)(struct tegra_xusb_padctl *padctl);
0407 int (*usb3_save_context)(struct tegra_xusb_padctl *padctl,
0408 unsigned int index);
0409 int (*hsic_set_idle)(struct tegra_xusb_padctl *padctl,
0410 unsigned int index, bool idle);
0411 int (*usb3_set_lfps_detect)(struct tegra_xusb_padctl *padctl,
0412 unsigned int index, bool enable);
0413 int (*vbus_override)(struct tegra_xusb_padctl *padctl, bool set);
0414 int (*utmi_port_reset)(struct phy *phy);
0415 };
0416
0417 struct tegra_xusb_padctl_soc {
0418 const struct tegra_xusb_pad_soc * const *pads;
0419 unsigned int num_pads;
0420
0421 struct {
0422 struct {
0423 const struct tegra_xusb_port_ops *ops;
0424 unsigned int count;
0425 } usb2, ulpi, hsic, usb3;
0426 } ports;
0427
0428 const struct tegra_xusb_padctl_ops *ops;
0429
0430 const char * const *supply_names;
0431 unsigned int num_supplies;
0432 bool supports_gen2;
0433 bool need_fake_usb3_port;
0434 };
0435
0436 struct tegra_xusb_padctl {
0437 struct device *dev;
0438 void __iomem *regs;
0439 struct mutex lock;
0440 struct reset_control *rst;
0441
0442 const struct tegra_xusb_padctl_soc *soc;
0443
0444 struct tegra_xusb_pad *pcie;
0445 struct tegra_xusb_pad *sata;
0446 struct tegra_xusb_pad *ulpi;
0447 struct tegra_xusb_pad *usb2;
0448 struct tegra_xusb_pad *hsic;
0449
0450 struct list_head ports;
0451 struct list_head lanes;
0452 struct list_head pads;
0453
0454 unsigned int enable;
0455
0456 struct clk *clk;
0457
0458 struct regulator_bulk_data *supplies;
0459 };
0460
0461 static inline void padctl_writel(struct tegra_xusb_padctl *padctl, u32 value,
0462 unsigned long offset)
0463 {
0464 dev_dbg(padctl->dev, "%08lx < %08x\n", offset, value);
0465 writel(value, padctl->regs + offset);
0466 }
0467
0468 static inline u32 padctl_readl(struct tegra_xusb_padctl *padctl,
0469 unsigned long offset)
0470 {
0471 u32 value = readl(padctl->regs + offset);
0472 dev_dbg(padctl->dev, "%08lx > %08x\n", offset, value);
0473 return value;
0474 }
0475
0476 struct tegra_xusb_lane *tegra_xusb_find_lane(struct tegra_xusb_padctl *padctl,
0477 const char *name,
0478 unsigned int index);
0479
0480 #if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC)
0481 extern const struct tegra_xusb_padctl_soc tegra124_xusb_padctl_soc;
0482 #endif
0483 #if defined(CONFIG_ARCH_TEGRA_210_SOC)
0484 extern const struct tegra_xusb_padctl_soc tegra210_xusb_padctl_soc;
0485 #endif
0486 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
0487 extern const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc;
0488 #endif
0489 #if defined(CONFIG_ARCH_TEGRA_194_SOC)
0490 extern const struct tegra_xusb_padctl_soc tegra194_xusb_padctl_soc;
0491 #endif
0492
0493 #endif