thc63 47 drivers/gpu/drm/bridge/thc63lvd1024.c struct thc63_dev *thc63 = to_thc63(bridge); thc63 49 drivers/gpu/drm/bridge/thc63lvd1024.c return drm_bridge_attach(bridge->encoder, thc63->next, bridge); thc63 55 drivers/gpu/drm/bridge/thc63lvd1024.c struct thc63_dev *thc63 = to_thc63(bridge); thc63 65 drivers/gpu/drm/bridge/thc63lvd1024.c if (thc63->timings.dual_link) { thc63 84 drivers/gpu/drm/bridge/thc63lvd1024.c struct thc63_dev *thc63 = to_thc63(bridge); thc63 87 drivers/gpu/drm/bridge/thc63lvd1024.c ret = regulator_enable(thc63->vcc); thc63 89 drivers/gpu/drm/bridge/thc63lvd1024.c dev_err(thc63->dev, thc63 94 drivers/gpu/drm/bridge/thc63lvd1024.c gpiod_set_value(thc63->pdwn, 0); thc63 95 drivers/gpu/drm/bridge/thc63lvd1024.c gpiod_set_value(thc63->oe, 1); thc63 100 drivers/gpu/drm/bridge/thc63lvd1024.c struct thc63_dev *thc63 = to_thc63(bridge); thc63 103 drivers/gpu/drm/bridge/thc63lvd1024.c gpiod_set_value(thc63->oe, 0); thc63 104 drivers/gpu/drm/bridge/thc63lvd1024.c gpiod_set_value(thc63->pdwn, 1); thc63 106 drivers/gpu/drm/bridge/thc63lvd1024.c ret = regulator_disable(thc63->vcc); thc63 108 drivers/gpu/drm/bridge/thc63lvd1024.c dev_err(thc63->dev, thc63 119 drivers/gpu/drm/bridge/thc63lvd1024.c static int thc63_parse_dt(struct thc63_dev *thc63) thc63 124 drivers/gpu/drm/bridge/thc63lvd1024.c endpoint = of_graph_get_endpoint_by_regs(thc63->dev->of_node, thc63 127 drivers/gpu/drm/bridge/thc63lvd1024.c dev_err(thc63->dev, "Missing endpoint in port@%u\n", thc63 135 drivers/gpu/drm/bridge/thc63lvd1024.c dev_err(thc63->dev, "Endpoint in port@%u unconnected\n", thc63 141 drivers/gpu/drm/bridge/thc63lvd1024.c dev_err(thc63->dev, "port@%u remote endpoint is disabled\n", thc63 147 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->next = of_drm_find_bridge(remote); thc63 149 drivers/gpu/drm/bridge/thc63lvd1024.c if (!thc63->next) thc63 152 drivers/gpu/drm/bridge/thc63lvd1024.c endpoint = of_graph_get_endpoint_by_regs(thc63->dev->of_node, thc63 160 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->timings.dual_link = true; thc63 165 drivers/gpu/drm/bridge/thc63lvd1024.c dev_dbg(thc63->dev, "operating in %s-link mode\n", thc63 166 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->timings.dual_link ? "dual" : "single"); thc63 171 drivers/gpu/drm/bridge/thc63lvd1024.c static int thc63_gpio_init(struct thc63_dev *thc63) thc63 173 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->oe = devm_gpiod_get_optional(thc63->dev, "oe", GPIOD_OUT_LOW); thc63 174 drivers/gpu/drm/bridge/thc63lvd1024.c if (IS_ERR(thc63->oe)) { thc63 175 drivers/gpu/drm/bridge/thc63lvd1024.c dev_err(thc63->dev, "Unable to get \"oe-gpios\": %ld\n", thc63 176 drivers/gpu/drm/bridge/thc63lvd1024.c PTR_ERR(thc63->oe)); thc63 177 drivers/gpu/drm/bridge/thc63lvd1024.c return PTR_ERR(thc63->oe); thc63 180 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->pdwn = devm_gpiod_get_optional(thc63->dev, "powerdown", thc63 182 drivers/gpu/drm/bridge/thc63lvd1024.c if (IS_ERR(thc63->pdwn)) { thc63 183 drivers/gpu/drm/bridge/thc63lvd1024.c dev_err(thc63->dev, "Unable to get \"powerdown-gpios\": %ld\n", thc63 184 drivers/gpu/drm/bridge/thc63lvd1024.c PTR_ERR(thc63->pdwn)); thc63 185 drivers/gpu/drm/bridge/thc63lvd1024.c return PTR_ERR(thc63->pdwn); thc63 193 drivers/gpu/drm/bridge/thc63lvd1024.c struct thc63_dev *thc63; thc63 196 drivers/gpu/drm/bridge/thc63lvd1024.c thc63 = devm_kzalloc(&pdev->dev, sizeof(*thc63), GFP_KERNEL); thc63 197 drivers/gpu/drm/bridge/thc63lvd1024.c if (!thc63) thc63 200 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->dev = &pdev->dev; thc63 201 drivers/gpu/drm/bridge/thc63lvd1024.c platform_set_drvdata(pdev, thc63); thc63 203 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->vcc = devm_regulator_get_optional(thc63->dev, "vcc"); thc63 204 drivers/gpu/drm/bridge/thc63lvd1024.c if (IS_ERR(thc63->vcc)) { thc63 205 drivers/gpu/drm/bridge/thc63lvd1024.c if (PTR_ERR(thc63->vcc) == -EPROBE_DEFER) thc63 208 drivers/gpu/drm/bridge/thc63lvd1024.c dev_err(thc63->dev, "Unable to get \"vcc\" supply: %ld\n", thc63 209 drivers/gpu/drm/bridge/thc63lvd1024.c PTR_ERR(thc63->vcc)); thc63 210 drivers/gpu/drm/bridge/thc63lvd1024.c return PTR_ERR(thc63->vcc); thc63 213 drivers/gpu/drm/bridge/thc63lvd1024.c ret = thc63_gpio_init(thc63); thc63 217 drivers/gpu/drm/bridge/thc63lvd1024.c ret = thc63_parse_dt(thc63); thc63 221 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->bridge.driver_private = thc63; thc63 222 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->bridge.of_node = pdev->dev.of_node; thc63 223 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->bridge.funcs = &thc63_bridge_func; thc63 224 drivers/gpu/drm/bridge/thc63lvd1024.c thc63->bridge.timings = &thc63->timings; thc63 226 drivers/gpu/drm/bridge/thc63lvd1024.c drm_bridge_add(&thc63->bridge); thc63 233 drivers/gpu/drm/bridge/thc63lvd1024.c struct thc63_dev *thc63 = platform_get_drvdata(pdev); thc63 235 drivers/gpu/drm/bridge/thc63lvd1024.c drm_bridge_remove(&thc63->bridge);