static int da8xx_usb_phy_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct device_node *node = dev->of_node; struct da8xx_usb_phy *d_phy; d_phy = devm_kzalloc(dev, sizeof(*d_phy), GFP_KERNEL); if (!d_phy) return -ENOMEM; if (node) d_phy->regmap = syscon_regmap_lookup_by_compatible( "ti,da830-cfgchip"); else d_phy->regmap = syscon_regmap_lookup_by_pdevname("syscon.0"); if (IS_ERR(d_phy->regmap)) { dev_err(dev, "Failed to get syscon\n"); return PTR_ERR(d_phy->regmap); } d_phy->usb11_clk = devm_clk_get(dev, "usb11_phy"); if (IS_ERR(d_phy->usb11_clk)) { dev_err(dev, "Failed to get usb11_phy clock\n"); return PTR_ERR(d_phy->usb11_clk); } d_phy->usb20_clk = devm_clk_get(dev, "usb20_phy"); if (IS_ERR(d_phy->usb20_clk)) { dev_err(dev, "Failed to get usb20_phy clock\n"); return PTR_ERR(d_phy->usb20_clk); } d_phy->usb11_phy = devm_phy_create(dev, node, &da8xx_usb11_phy_ops); if (IS_ERR(d_phy->usb11_phy)) { dev_err(dev, "Failed to create usb11 phy\n"); return PTR_ERR(d_phy->usb11_phy); } d_phy->usb20_phy = devm_phy_create(dev, node, &da8xx_usb20_phy_ops); if (IS_ERR(d_phy->usb20_phy)) { dev_err(dev, "Failed to create usb20 phy\n"); return PTR_ERR(d_phy->usb20_phy); } platform_set_drvdata(pdev, d_phy); phy_set_drvdata(d_phy->usb11_phy, d_phy); phy_set_drvdata(d_phy->usb20_phy, d_phy); if (node) { d_phy->phy_provider = devm_of_phy_provider_register(dev, da8xx_usb_phy_of_xlate); if (IS_ERR(d_phy->phy_provider)) { dev_err(dev, "Failed to create phy provider\n"); return PTR_ERR(d_phy->phy_provider); } } else { int ret; ret = phy_create_lookup(d_phy->usb11_phy, "usb-phy", "ohci.0"); if (ret) dev_warn(dev, "Failed to create usb11 phy lookup\n"); ret = phy_create_lookup(d_phy->usb20_phy, "usb-phy", "musb-da8xx"); if (ret) dev_warn(dev, "Failed to create usb20 phy lookup\n"); } return 0; }
static int spi_clps711x_probe(struct platform_device *pdev) { struct spi_clps711x_data *hw; struct spi_clps711x_pdata *pdata = dev_get_platdata(&pdev->dev); struct spi_master *master; struct resource *res; int i, irq, ret; if (!pdata) { dev_err(&pdev->dev, "No platform data supplied\n"); return -EINVAL; } if (pdata->num_chipselect < 1) { dev_err(&pdev->dev, "At least one CS must be defined\n"); return -EINVAL; } irq = platform_get_irq(pdev, 0); if (irq < 0) return irq; master = spi_alloc_master(&pdev->dev, sizeof(*hw)); if (!master) return -ENOMEM; master->cs_gpios = devm_kzalloc(&pdev->dev, sizeof(int) * pdata->num_chipselect, GFP_KERNEL); if (!master->cs_gpios) { ret = -ENOMEM; goto err_out; } master->bus_num = pdev->id; master->mode_bits = SPI_CPHA | SPI_CS_HIGH; master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 8); master->num_chipselect = pdata->num_chipselect; master->setup = spi_clps711x_setup; master->prepare_message = spi_clps711x_prepare_message; master->transfer_one = spi_clps711x_transfer_one; hw = spi_master_get_devdata(master); for (i = 0; i < master->num_chipselect; i++) { master->cs_gpios[i] = pdata->chipselect[i]; ret = devm_gpio_request(&pdev->dev, master->cs_gpios[i], DRIVER_NAME); if (ret) { dev_err(&pdev->dev, "Can't get CS GPIO %i\n", i); goto err_out; } } hw->spi_clk = devm_clk_get(&pdev->dev, "spi"); if (IS_ERR(hw->spi_clk)) { dev_err(&pdev->dev, "Can't get clocks\n"); ret = PTR_ERR(hw->spi_clk); goto err_out; } master->max_speed_hz = clk_get_rate(hw->spi_clk); platform_set_drvdata(pdev, master); hw->syscon = syscon_regmap_lookup_by_pdevname("syscon.3"); if (IS_ERR(hw->syscon)) { ret = PTR_ERR(hw->syscon); goto err_out; } hw->syscon1 = syscon_regmap_lookup_by_pdevname("syscon.1"); if (IS_ERR(hw->syscon1)) { ret = PTR_ERR(hw->syscon1); goto err_out; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); hw->syncio = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(hw->syncio)) { ret = PTR_ERR(hw->syncio); goto err_out; } /* Disable extended mode due hardware problems */ regmap_update_bits(hw->syscon, SYSCON_OFFSET, SYSCON3_ADCCON, 0); /* Clear possible pending interrupt */ readl(hw->syncio); ret = devm_request_irq(&pdev->dev, irq, spi_clps711x_isr, 0, dev_name(&pdev->dev), master); if (ret) goto err_out; ret = devm_spi_register_master(&pdev->dev, master); if (!ret) { dev_info(&pdev->dev, "SPI bus driver initialized. Master clock %u Hz\n", master->max_speed_hz); return 0; } dev_err(&pdev->dev, "Failed to register master\n"); err_out: spi_master_put(master); return ret; }