--- /dev/null
+diff -Naurp include/avr/power.h include/avr/power.h
+--- include/avr/power.h 2011-12-29 14:21:50.000000000 +0530
++++ include/avr/power.h 2012-02-06 11:09:16.000000000 +0530
+@@ -1393,10 +1393,6 @@ do{ \
+ || defined(__AVR_ATmega3290__) \
+ || defined(__AVR_ATmega3290A__) \
+ || defined(__AVR_ATmega32C1__) \
+-|| defined(__AVR_ATmega32HVB__) \
+-|| defined(__AVR_ATmega32HVBREVB__) \
+-|| defined(__AVR_ATmega16HVB__) \
+-|| defined(__AVR_ATmega16HVBREVB__) \
+ || defined(__AVR_ATmega32M1__) \
+ || defined(__AVR_ATmega32U2__) \
+ || defined(__AVR_ATmega32U4__) \
+@@ -1512,6 +1508,38 @@ Gets and returns the clock prescaler reg
+ */
+ #define clock_prescale_get() (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)|(1<<CLKPS2)|(1<<CLKPS3)))
+
++#elif defined(__AVR_ATmega16HVB__) \
++|| defined(__AVR_ATmega16HVBREVB__) \
++|| defined(__AVR_ATmega32HVB__) \
++|| defined(__AVR_ATmega32HVBREVB__)
++
++typedef enum
++{
++ clock_div_1 = 0,
++ clock_div_2 = 1,
++ clock_div_4 = 2,
++ clock_div_8 = 3
++} clock_div_t;
++
++static __inline__ void clock_prescale_set(clock_div_t) __attribute__((__always_inline__));
++
++void clock_prescale_set(clock_div_t __x)
++{
++ uint8_t __tmp = _BV(CLKPCE);
++ __asm__ __volatile__ (
++ "in __tmp_reg__,__SREG__" "\n\t"
++ "cli" "\n\t"
++ "sts %1, %0" "\n\t"
++ "sts %1, %2" "\n\t"
++ "out __SREG__, __tmp_reg__"
++ : /* no outputs */
++ : "d" (__tmp),
++ "M" (_SFR_MEM_ADDR(CLKPR)),
++ "d" (__x)
++ : "r0");
++}
++
++#define clock_prescale_get() (clock_div_t)(CLKPR & (uint8_t)((1<<CLKPS0)|(1<<CLKPS1)))
+
+ #elif defined(__AVR_ATtiny24__) \
+ || defined(__AVR_ATtiny24A__) \