/** * of_usb_get_dr_mode_by_phy - Get dual role mode for the controller device * which is associated with the given phy device_node * @np: Pointer to the given phy device_node * * In dts a usb controller associates with phy devices. The function gets * the string from property 'dr_mode' of the controller associated with the * given phy device node, and returns the correspondig enum usb_dr_mode. */ enum usb_dr_mode of_usb_get_dr_mode_by_phy(struct device_node *phy_np) { struct device_node *controller = NULL; struct device_node *phy; const char *dr_mode; int index; int err; do { controller = of_find_node_with_property(controller, "phys"); index = 0; do { phy = of_parse_phandle(controller, "phys", index); of_node_put(phy); if (phy == phy_np) goto finish; index++; } while (phy); } while (controller); finish: err = of_property_read_string(controller, "dr_mode", &dr_mode); of_node_put(controller); if (err < 0) return USB_DR_MODE_UNKNOWN; return usb_get_dr_mode_from_string(dr_mode); }
static void __init ardbeg_tweak_E1767_dt(void) { struct device_node *dn = NULL; struct property *pp = NULL; /* * Update E1735 DT for E1767 prototype. To be removed when * E1767 is productized with its own DT. */ dn = of_find_node_with_property(dn, "pwm-1wire-buffer"); if (dn) { pp = of_find_property(dn, "pwm-1wire-buffer", NULL); if (pp) pp->name = "pwm-1wire-direct"; of_node_put(dn); } if (!dn || !pp) WARN(1, "Failed update DT for PMU E1767 prototype\n"); }
/** * of_usb_get_dr_mode_by_phy - Get dual role mode for the controller device * which is associated with the given phy device_node * @np: Pointer to the given phy device_node * @arg0: phandle args[0] for phy's with #phy-cells >= 1, or -1 for * phys which do not have phy-cells * * In dts a usb controller associates with phy devices. The function gets * the string from property 'dr_mode' of the controller associated with the * given phy device node, and returns the correspondig enum usb_dr_mode. */ enum usb_dr_mode of_usb_get_dr_mode_by_phy(struct device_node *np, int arg0) { struct device_node *controller = NULL; struct of_phandle_args args; const char *dr_mode; int index; int err; do { controller = of_find_node_with_property(controller, "phys"); index = 0; do { if (arg0 == -1) { args.np = of_parse_phandle(controller, "phys", index); args.args_count = 0; } else { err = of_parse_phandle_with_args(controller, "phys", "#phy-cells", index, &args); if (err) break; } of_node_put(args.np); if (args.np == np && (args.args_count == 0 || args.args[0] == arg0)) goto finish; index++; } while (args.np); } while (controller); finish: err = of_property_read_string(controller, "dr_mode", &dr_mode); of_node_put(controller); if (err < 0) return USB_DR_MODE_UNKNOWN; return usb_get_dr_mode_from_string(dr_mode); }