return radix_tree_lookup(&pwm_tree, pwm);
 }
 
-static int alloc_pwms(int pwm, unsigned int count)
+static int alloc_pwms(unsigned int count)
 {
-       unsigned int from = 0;
        unsigned int start;
 
-       if (pwm >= MAX_PWMS)
-               return -EINVAL;
-
-       if (pwm >= 0)
-               from = pwm;
-
-       start = bitmap_find_next_zero_area(allocated_pwms, MAX_PWMS, from,
+       start = bitmap_find_next_zero_area(allocated_pwms, MAX_PWMS, 0,
                                           count, 0);
 
-       if (pwm >= 0 && start != pwm)
-               return -EEXIST;
-
        if (start + count > MAX_PWMS)
                return -ENOSPC;
 
  * @chip: the PWM chip to add
  * @polarity: initial polarity of PWM channels
  *
- * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base
- * will be used. The initial polarity for all channels is specified by the
- * @polarity parameter.
+ * Register a new PWM chip. The initial polarity for all channels is specified
+ * by the @polarity parameter.
  *
  * Returns: 0 on success or a negative error code on failure.
  */
 
        mutex_lock(&pwm_lock);
 
-       ret = alloc_pwms(chip->base, chip->npwm);
+       ret = alloc_pwms(chip->npwm);
        if (ret < 0)
                goto out;
 
+       chip->base = ret;
+
        chip->pwms = kcalloc(chip->npwm, sizeof(*pwm), GFP_KERNEL);
        if (!chip->pwms) {
                ret = -ENOMEM;
                goto out;
        }
 
-       chip->base = ret;
-
        for (i = 0; i < chip->npwm; i++) {
                pwm = &chip->pwms[i];
 
 
 
        ab8500->chip.dev = &pdev->dev;
        ab8500->chip.ops = &ab8500_pwm_ops;
-       ab8500->chip.base = -1;
        ab8500->chip.npwm = 1;
 
        err = pwmchip_add(&ab8500->chip);
 
        chip->hlcdc = hlcdc;
        chip->chip.ops = &atmel_hlcdc_pwm_ops;
        chip->chip.dev = dev;
-       chip->chip.base = -1;
        chip->chip.npwm = 1;
        chip->chip.of_xlate = of_pwm_xlate_with_flags;
        chip->chip.of_pwm_n_cells = 3;
 
        tcbpwm->chip.ops = &atmel_tcb_pwm_ops;
        tcbpwm->chip.of_xlate = of_pwm_xlate_with_flags;
        tcbpwm->chip.of_pwm_n_cells = 3;
-       tcbpwm->chip.base = -1;
        tcbpwm->chip.npwm = NPWM;
        tcbpwm->channel = channel;
        tcbpwm->regmap = regmap;
 
        atmel_pwm->chip.ops = &atmel_pwm_ops;
        atmel_pwm->chip.of_xlate = of_pwm_xlate_with_flags;
        atmel_pwm->chip.of_pwm_n_cells = 3;
-       atmel_pwm->chip.base = -1;
        atmel_pwm->chip.npwm = 4;
 
        ret = pwmchip_add(&atmel_pwm->chip);
 
 
        ip->chip.dev = &pdev->dev;
        ip->chip.ops = &iproc_pwm_ops;
-       ip->chip.base = -1;
        ip->chip.npwm = 4;
        ip->chip.of_xlate = of_pwm_xlate_with_flags;
        ip->chip.of_pwm_n_cells = 3;
 
 
        kp->chip.dev = &pdev->dev;
        kp->chip.ops = &kona_pwm_ops;
-       kp->chip.base = -1;
        kp->chip.npwm = 6;
        kp->chip.of_xlate = of_pwm_xlate_with_flags;
        kp->chip.of_pwm_n_cells = 3;
 
 
        pc->chip.dev = &pdev->dev;
        pc->chip.ops = &bcm2835_pwm_ops;
-       pc->chip.base = -1;
        pc->chip.npwm = 2;
        pc->chip.of_xlate = of_pwm_xlate_with_flags;
        pc->chip.of_pwm_n_cells = 3;
 
 
        pwm->chip.dev = &pdev->dev;
        pwm->chip.ops = &berlin_pwm_ops;
-       pwm->chip.base = -1;
        pwm->chip.npwm = 4;
        pwm->chip.of_xlate = of_pwm_xlate_with_flags;
        pwm->chip.of_pwm_n_cells = 3;
 
 
        p->chip.dev = &pdev->dev;
        p->chip.ops = &brcmstb_pwm_ops;
-       p->chip.base = -1;
        p->chip.npwm = 2;
 
        p->base = devm_platform_ioremap_resource(pdev, 0);
 
 
        priv->chip.ops = &clps711x_pwm_ops;
        priv->chip.dev = &pdev->dev;
-       priv->chip.base = -1;
        priv->chip.npwm = 2;
        priv->chip.of_xlate = clps711x_pwm_xlate;
        priv->chip.of_pwm_n_cells = 1;
 
 
        pwm->chip.dev = &pdev->dev;
        pwm->chip.ops = &crc_pwm_ops;
-       pwm->chip.base = -1;
        pwm->chip.npwm = 1;
 
        /* get the PMIC regmap */
 
        chip->ops = &cros_ec_pwm_ops;
        chip->of_xlate = cros_ec_pwm_xlate;
        chip->of_pwm_n_cells = 1;
-       chip->base = -1;
        ret = cros_ec_num_pwms(ec);
        if (ret < 0) {
                dev_err(dev, "Couldn't find PWMs: %d\n", ret);
 
        dwc->chip.dev = dev;
        dwc->chip.ops = &dwc_pwm_ops;
        dwc->chip.npwm = DWC_TIMERS_TOTAL;
-       dwc->chip.base = -1;
 
        ret = pwmchip_add(&dwc->chip);
        if (ret)
 
 
        ep93xx_pwm->chip.dev = &pdev->dev;
        ep93xx_pwm->chip.ops = &ep93xx_pwm_ops;
-       ep93xx_pwm->chip.base = -1;
        ep93xx_pwm->chip.npwm = 1;
 
        ret = pwmchip_add(&ep93xx_pwm->chip);
 
        fpc->chip.ops = &fsl_pwm_ops;
        fpc->chip.of_xlate = of_pwm_xlate_with_flags;
        fpc->chip.of_pwm_n_cells = 3;
-       fpc->chip.base = -1;
        fpc->chip.npwm = 8;
 
        ret = pwmchip_add(&fpc->chip);
 
 
        pwm_chip->chip.ops = &hibvt_pwm_ops;
        pwm_chip->chip.dev = &pdev->dev;
-       pwm_chip->chip.base = -1;
        pwm_chip->chip.npwm = soc->num_pwms;
        pwm_chip->chip.of_xlate = of_pwm_xlate_with_flags;
        pwm_chip->chip.of_pwm_n_cells = 3;
 
 
        pwm->chip.dev = &pdev->dev;
        pwm->chip.ops = &img_pwm_ops;
-       pwm->chip.base = -1;
        pwm->chip.npwm = IMG_PWM_NPWM;
 
        ret = pwmchip_add(&pwm->chip);
 
 
        tpm->chip.dev = &pdev->dev;
        tpm->chip.ops = &imx_tpm_pwm_ops;
-       tpm->chip.base = -1;
        tpm->chip.of_xlate = of_pwm_xlate_with_flags;
        tpm->chip.of_pwm_n_cells = 3;
 
 
 
        imx->chip.ops = &pwm_imx1_ops;
        imx->chip.dev = &pdev->dev;
-       imx->chip.base = -1;
        imx->chip.npwm = 1;
 
        imx->mmio_base = devm_platform_ioremap_resource(pdev, 0);
 
 
        imx->chip.ops = &pwm_imx27_ops;
        imx->chip.dev = &pdev->dev;
-       imx->chip.base = -1;
        imx->chip.npwm = 1;
 
        imx->chip.of_xlate = of_pwm_xlate_with_flags;
 
        pc->chip.dev = dev;
        pc->chip.ops = &lgm_pwm_ops;
        pc->chip.npwm = 1;
-       pc->chip.base = -1;
 
        lgm_pwm_init(pc);
 
 
 
        iqs620_pwm->chip.dev = &pdev->dev;
        iqs620_pwm->chip.ops = &iqs620_pwm_ops;
-       iqs620_pwm->chip.base = -1;
        iqs620_pwm->chip.npwm = 1;
 
        mutex_init(&iqs620_pwm->lock);
 
        jz4740->chip.dev = dev;
        jz4740->chip.ops = &jz4740_pwm_ops;
        jz4740->chip.npwm = info->num_pwms;
-       jz4740->chip.base = -1;
        jz4740->chip.of_xlate = of_pwm_xlate_with_flags;
        jz4740->chip.of_pwm_n_cells = 3;
 
 
        if (ret)
                return ret;
 
-       priv->chip.base = -1;
        priv->chip.dev = dev;
        priv->chip.ops = &keembay_pwm_ops;
        priv->chip.npwm = KMB_TOTAL_PWM_CHANNELS;
 
        lp3943_pwm->chip.dev = &pdev->dev;
        lp3943_pwm->chip.ops = &lp3943_pwm_ops;
        lp3943_pwm->chip.npwm = LP3943_NUM_PWMS;
-       lp3943_pwm->chip.base = -1;
 
        platform_set_drvdata(pdev, lp3943_pwm);
 
 
 
        lpc18xx_pwm->chip.dev = &pdev->dev;
        lpc18xx_pwm->chip.ops = &lpc18xx_pwm_ops;
-       lpc18xx_pwm->chip.base = -1;
        lpc18xx_pwm->chip.npwm = 16;
        lpc18xx_pwm->chip.of_xlate = of_pwm_xlate_with_flags;
        lpc18xx_pwm->chip.of_pwm_n_cells = 3;
 
        lpc32xx->chip.dev = &pdev->dev;
        lpc32xx->chip.ops = &lpc32xx_pwm_ops;
        lpc32xx->chip.npwm = 1;
-       lpc32xx->chip.base = -1;
 
        ret = pwmchip_add(&lpc32xx->chip);
        if (ret < 0) {
 
 
        lpwm->chip.dev = dev;
        lpwm->chip.ops = &pwm_lpss_ops;
-       lpwm->chip.base = -1;
        lpwm->chip.npwm = info->npwm;
 
        ret = pwmchip_add(&lpwm->chip);
 
 
        pc->chip.dev = &pdev->dev;
        pc->chip.ops = &pwm_mediatek_ops;
-       pc->chip.base = -1;
        pc->chip.npwm = pc->soc->num_pwms;
 
        ret = pwmchip_add(&pc->chip);
 
        spin_lock_init(&meson->lock);
        meson->chip.dev = &pdev->dev;
        meson->chip.ops = &meson_pwm_ops;
-       meson->chip.base = -1;
        meson->chip.npwm = MESON_NUM_PWMS;
        meson->chip.of_xlate = of_pwm_xlate_with_flags;
        meson->chip.of_pwm_n_cells = 3;
 
 
        mdp->chip.dev = &pdev->dev;
        mdp->chip.ops = &mtk_disp_pwm_ops;
-       mdp->chip.base = -1;
        mdp->chip.npwm = 1;
 
        ret = pwmchip_add(&mdp->chip);
 
        mxs->chip.ops = &mxs_pwm_ops;
        mxs->chip.of_xlate = of_pwm_xlate_with_flags;
        mxs->chip.of_pwm_n_cells = 3;
-       mxs->chip.base = -1;
 
        ret = of_property_read_u32(np, "fsl,pwm-number", &mxs->chip.npwm);
        if (ret < 0) {
 
 
        omap->chip.dev = &pdev->dev;
        omap->chip.ops = &pwm_omap_dmtimer_ops;
-       omap->chip.base = -1;
        omap->chip.npwm = 1;
        omap->chip.of_xlate = of_pwm_xlate_with_flags;
        omap->chip.of_pwm_n_cells = 3;
 
        pca->chip.npwm = PCA9685_MAXCHAN + 1;
 
        pca->chip.dev = &client->dev;
-       pca->chip.base = -1;
 
        ret = pwmchip_add(&pca->chip);
        if (ret < 0)
 
 
        pwm->chip.dev = &pdev->dev;
        pwm->chip.ops = &pxa_pwm_ops;
-       pwm->chip.base = -1;
        pwm->chip.npwm = (id->driver_data & HAS_SECONDARY_PWM) ? 2 : 1;
 
        if (IS_ENABLED(CONFIG_OF)) {
 
 
        rcar_pwm->chip.dev = &pdev->dev;
        rcar_pwm->chip.ops = &rcar_pwm_ops;
-       rcar_pwm->chip.base = -1;
        rcar_pwm->chip.npwm = 1;
 
        pm_runtime_enable(&pdev->dev);
 
        tpu->chip.ops = &tpu_pwm_ops;
        tpu->chip.of_xlate = of_pwm_xlate_with_flags;
        tpu->chip.of_pwm_n_cells = 3;
-       tpu->chip.base = -1;
        tpu->chip.npwm = TPU_CHANNEL_MAX;
 
        pm_runtime_enable(&pdev->dev);
 
        pc->data = id->data;
        pc->chip.dev = &pdev->dev;
        pc->chip.ops = &rockchip_pwm_ops;
-       pc->chip.base = -1;
        pc->chip.npwm = 1;
 
        if (pc->data->supports_polarity) {
 
 
        chip->chip.dev = &pdev->dev;
        chip->chip.ops = &pwm_samsung_ops;
-       chip->chip.base = -1;
        chip->chip.npwm = SAMSUNG_PWM_NUM;
        chip->inverter_mask = BIT(SAMSUNG_PWM_NUM) - 1;
 
 
        chip->ops = &pwm_sifive_ops;
        chip->of_xlate = of_pwm_xlate_with_flags;
        chip->of_pwm_n_cells = 3;
-       chip->base = -1;
        chip->npwm = 4;
 
        ddata->regs = devm_platform_ioremap_resource(pdev, 0);
 
        chip = &priv->pwm_chip;
        chip->dev = &pdev->dev;
        chip->ops = &sl28cpld_pwm_ops;
-       chip->base = -1;
        chip->npwm = 1;
 
        platform_set_drvdata(pdev, priv);
 
 
        pc->chip.dev = &pdev->dev;
        pc->chip.ops = &spear_pwm_ops;
-       pc->chip.base = -1;
        pc->chip.npwm = NUM_PWM;
 
        ret = clk_prepare(pc->clk);
 
 
        spc->chip.dev = &pdev->dev;
        spc->chip.ops = &sprd_pwm_ops;
-       spc->chip.base = -1;
        spc->chip.npwm = spc->num_pwms;
 
        ret = pwmchip_add(&spc->chip);
 
 
        pc->chip.dev = dev;
        pc->chip.ops = &sti_pwm_ops;
-       pc->chip.base = -1;
        pc->chip.npwm = pc->cdata->pwm_num_devs;
 
        ret = pwmchip_add(&pc->chip);
 
 
        priv->regmap = ddata->regmap;
        priv->clk = ddata->clk;
-       priv->chip.base = -1;
        priv->chip.dev = &pdev->dev;
        priv->chip.ops = &stm32_pwm_lp_ops;
        priv->chip.npwm = 1;
 
 
        stm32_pwm_detect_complementary(priv);
 
-       priv->chip.base = -1;
        priv->chip.dev = dev;
        priv->chip.ops = &stm32pwm_ops;
        priv->chip.npwm = stm32_pwm_detect_channels(priv);
 
 
        pwm->stmpe = stmpe;
        pwm->chip.dev = &pdev->dev;
-       pwm->chip.base = -1;
 
        if (stmpe->partnum == STMPE2401 || stmpe->partnum == STMPE2403) {
                pwm->chip.ops = &stmpe_24xx_pwm_ops;
 
 
        pwm->chip.dev = &pdev->dev;
        pwm->chip.ops = &sun4i_pwm_ops;
-       pwm->chip.base = -1;
        pwm->chip.npwm = pwm->data->npwm;
        pwm->chip.of_xlate = of_pwm_xlate_with_flags;
        pwm->chip.of_pwm_n_cells = 3;
 
 
        pwm->chip.dev = &pdev->dev;
        pwm->chip.ops = &tegra_pwm_ops;
-       pwm->chip.base = -1;
        pwm->chip.npwm = pwm->soc->num_channels;
 
        ret = pwmchip_add(&pwm->chip);
 
        pc->chip.ops = &ecap_pwm_ops;
        pc->chip.of_xlate = of_pwm_xlate_with_flags;
        pc->chip.of_pwm_n_cells = 3;
-       pc->chip.base = -1;
        pc->chip.npwm = 1;
 
        pc->mmio_base = devm_platform_ioremap_resource(pdev, 0);
 
        pc->chip.ops = &ehrpwm_pwm_ops;
        pc->chip.of_xlate = of_pwm_xlate_with_flags;
        pc->chip.of_pwm_n_cells = 3;
-       pc->chip.base = -1;
        pc->chip.npwm = NUM_PWM_CHANNEL;
 
        pc->mmio_base = devm_platform_ioremap_resource(pdev, 0);
 
        }
 
        twl->chip.dev = &pdev->dev;
-       twl->chip.base = -1;
 
        mutex_init(&twl->mutex);
 
 
                twl->chip.ops = &twl6030_pwm_ops;
 
        twl->chip.dev = &pdev->dev;
-       twl->chip.base = -1;
        twl->chip.npwm = 2;
 
        mutex_init(&twl->mutex);
 
        chip->chip.ops = &vt8500_pwm_ops;
        chip->chip.of_xlate = of_pwm_xlate_with_flags;
        chip->chip.of_pwm_n_cells = 3;
-       chip->chip.base = -1;
        chip->chip.npwm = VT8500_NR_PWMS;
 
        chip->clk = devm_clk_get(&pdev->dev, NULL);