* Limitations:
  * - When PWM is stopped, timer counter gets stopped immediately. This
  *   doesn't allow the current PWM period to complete and stops abruptly.
+ * - When PWM is running and changing both duty cycle and period,
+ *   we cannot prevent in software that the output might produce
+ *   a period with mixed settings. Especially when period/duty_cyle
+ *   is updated while the pwm pin is high, current pwm period/duty_cycle
+ *   can get updated as below based on the current timer counter:
+ *     - period for current cycle =  current_period + new period
+ *     - duty_cycle for current period = current period + new duty_cycle.
  */
 
 #include <linux/clk.h>
        u32 load_value, match_value;
        struct clk *fclk;
        unsigned long clk_rate;
-       bool timer_active;
 
        dev_dbg(chip->dev, "requested duty cycle: %d ns, period: %d ns\n",
                duty_ns, period_ns);
        load_value = (DM_TIMER_MAX - period_cycles) + 1;
        match_value = load_value + duty_cycles - 1;
 
-       /*
-        * We MUST stop the associated dual-mode timer before attempting to
-        * write its registers, but calls to omap_dm_timer_start/stop must
-        * be balanced so check if timer is active before calling timer_stop.
-        */
-       timer_active = pm_runtime_active(&omap->dm_timer_pdev->dev);
-       if (timer_active)
-               omap->pdata->stop(omap->dm_timer);
-
        omap->pdata->set_load(omap->dm_timer, load_value);
        omap->pdata->set_match(omap->dm_timer, true, match_value);
 
        dev_dbg(chip->dev, "load value: %#08x (%d), match value: %#08x (%d)\n",
                load_value, load_value, match_value, match_value);
 
-       /* If config was called while timer was running it must be reenabled. */
-       if (timer_active)
-               pwm_omap_dmtimer_start(omap);
-
        mutex_unlock(&omap->mutex);
 
        return 0;