Power saving mess with PWM Output

Processor: ATtiny85
Clock: Internall 1 MHz or 8 MHz depending on performance results

Description:
Button1 - Switch effect mode (STATIC, FADE_SLOW, FADE_MEDIUM, FADE_FAST)
Slider Pot - Read analog value to set brightness
LED1 - Light Source

Problem:
When PWM is 255 it work well (no flickering) but when starts to fadein/fadeout LED keeps flickering (ON/OFF at PWM value).
If i disable power save methods it works well, so i guess the power saving is cutting off PWM when on sleep.
Theres anyway to keep PWM working when on deep sleep?

Project:

#include <avr/sleep.h> //Needed for sleep_mode
#include <avr/wdt.h> //Needed to enable/disable watch dog timer

// Utility macros
#define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off)
#define adc_enable()  (ADCSRA |=  (1<<ADEN)) // re-enable ADC

#define BUTTON_EFFECT_PORT DD3
#define POT_ANALOG_PORT A2
#define MOSTFET_PWM_PORT DD0

enum EFFECT_MODE {
  EFFECT_MODE_STATIC = 0,
  EFFECT_MODE_FADE_SLOW,
  EFFECT_MODE_FADE_MEDIUM,
  EFFECT_MODE_FADE_FAST,
  EFFECT_MODE_MAX
};

byte effectMode = EFFECT_MODE_STATIC;
unsigned short brightnessOld = 0;
byte watchdogSleepScale = 5;
byte fadeCycle = 0;
bool fadeIn = false;

ISR(WDT_vect) {
}

//Sets the watchdog timer to wake us up, but not reset
//0=16ms, 1=32ms, 2=64ms, 3=128ms, 4=250ms, 5=500ms
//6=1sec, 7=2sec, 8=4sec, 9=8sec
//From: http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/
void setup_watchdog(int timerPrescaler) {

  if (timerPrescaler > 9) timerPrescaler = 9; //Limit incoming amount to legal settings

  byte bb = timerPrescaler & 7;
  if (timerPrescaler > 7) bb |= (1 << 5); //Set the special 5th bit if necessary

  //This order of commands is important and cannot be combined
  MCUSR &= ~(1 << WDRF); //Clear the watch dog reset
  WDTCR |= (1 << WDCE) | (1 << WDE); //Set WD_change enable, set WD enable
  WDTCR = bb; //Set new watchdog timeout value
  WDTCR |= _BV(WDIE); //Set the interrupt enable, this will keep unit from resetting after each int
}

unsigned short readBrightness(bool to255 = false)
{
  return to255 ? map(constrain(1023 - analogRead(POT_ANALOG_PORT), 0, 1023), 0, 1023, 0, 255) : constrain(1023 - analogRead(POT_ANALOG_PORT), 0, 1023);
}

void readEffectMode()
{
  bool pressed = false;
  while(digitalRead(BUTTON_EFFECT_PORT) == HIGH)
  {
    analogWrite(MOSTFET_PWM_PORT, LOW); // Disable LEDs to user know something is happening
    pressed = true;
    delay(50); // Wait for LOW
  }
  if(!pressed) return;

  if(++effectMode >= EFFECT_MODE_MAX)
  {
    effectMode = EFFECT_MODE_STATIC;
    analogWrite(MOSTFET_PWM_PORT, brightnessOld); // Restore brightness
  }
  fadeIn = false;
  fadeCycle = 0;
}

void setup()
{
  adc_disable(); // ADC uses ~320uA
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();

  pinMode(BUTTON_EFFECT_PORT, INPUT);
  pinMode(MOSTFET_PWM_PORT, OUTPUT);
}

void loop()
{
  adc_disable(); // ADC uses ~320uA
  setup_watchdog(watchdogSleepScale); //Setup watchdog to go off after 1sec
  sleep_mode(); //Go to sleep!

  // Check Here
  adc_enable();

  // Select the effect mode
  readEffectMode();

  // Read brightness from slider pot
  unsigned short brightness = readBrightness(true);

  if(effectMode == EFFECT_MODE_FADE_SLOW || effectMode == EFFECT_MODE_FADE_MEDIUM || effectMode == EFFECT_MODE_FADE_FAST)
  {
    // Set sleep time
    watchdogSleepScale = effectMode;

    if(fadeIn) // 255 to 0
    {
      if(fadeCycle > 0)
      {
        fadeCycle--;
      }
      else
      {
        fadeIn = !fadeIn;
        fadeCycle = 1;
      }
    }
    else      // 0 to 225
    {
      if(fadeCycle < 255)
      {
        fadeCycle++;
      }
      else
      {
        fadeIn = !fadeIn;
        fadeCycle = 254;
      }
    }
   
    analogWrite(MOSTFET_PWM_PORT, map(fadeCycle, 0, 255, 0, brightness));
    
  }
  else // EFFECT_MODE_FADE_STATIC
  {
      watchdogSleepScale = 5;
      if(abs(brightness-brightnessOld) >= 5) // Only change if increment justify
      {
        analogWrite(MOSTFET_PWM_PORT, brightness);
        brightnessOld = brightness;
      }
  }
}

Theres anyway to keep PWM working when on deep sleep?

No.

Sleep turns the clock off, that's what saves power... CMOS power dissipation is proportional
to clock speed and voltage squared, basically.

Use IDLE.

Jiggy-Ninja:
Use IDLE.

Using IDLE option solved my problem.
There's any table i can see comparing power modes?

sn4k3:
Using IDLE option solved my problem.
There's any table i can see comparing power modes?

Section 7 in the datasheet.