diff --git a/drivers/include/periph/pwm.h b/drivers/include/periph/pwm.h
new file mode 100644
index 0000000000000000000000000000000000000000..1a3dee8108fdb1504a489107e7591c2b097fde08
--- /dev/null
+++ b/drivers/include/periph/pwm.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2014 Freie Universität Berlin
+ *
+ * This file is subject to the terms and conditions of the LGPLv2 License.
+ * See the file LICENSE in the top level directory for more details.
+ */
+
+/**
+ * @ingroup     driver_periph
+ * @brief       Low-level PWM peripheral driver
+ * @{
+ *
+ * @file        pwm.h
+ * @brief       Low-level PWM peripheral driver interface definitions
+ *
+ * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
+ */
+
+#ifndef __PWM_H
+#define __PWM_H
+
+#include "periph_conf.h"
+
+
+/**
+ * @brief Definition of available PWM devices
+ * 
+ * To this point a maximum of four PWM device is available.
+ */
+typedef enum {
+#if PWM_0_EN
+    PWM_0,              /*< 1st PWM device */
+#endif
+#if PWM_1_EN
+    PWM_1,              /*< 2nd PWM device */
+#endif
+#if PWM_2_EN
+    PWM_2,              /*< 3rd PWM device */
+#endif
+#if PWM_3_EN
+    PWM_3,              /*< 4th PWM device */
+#endif
+    PWM_UNDEFINED
+} pwm_t;
+
+/**
+ * @brief Definition of available PWM modes
+ */
+typedef enum {
+    PWM_LEFT,           /*< use left aligned PWM */
+    PWM_RIGHT,          /*< use right aligned PWM */
+    PWM_CENTER          /*< use center aligned PWM */
+} pwm_mode_t;
+
+
+/**
+ * @brief Initialize a PWM device
+ * 
+ * The PWM module is based on virtual PWM devices, which can have one or more channels.
+ * The PWM devices can be configured to run with a given frequency and resolution, which
+ * are always identical for the complete device, hence for every channel on a device.
+ * 
+ * The desired frequency and resolution may not be possible on a given device when chosen
+ * too large. In this case the PWM driver will always keep the resolution and decrease the
+ * frequency if needed. To verify the correct settings compare the returned value which
+ * is the actually set frequency.
+ * 
+ * @param dev           PWM channel to initialize
+ * @param mode          PWM mode, left, right or center aligned
+ * @param frequency     the PWM frequency in Hz
+ * @param resolution    the PWM resolution
+ * @return              0 on success, -1 if requested mode and/or frequency and resolution
+ *                      not applicable
+ */
+int pwm_init(pwm_t dev, pwm_mode_t mode, unsigned int frequency, unsigned int resolution);
+
+/**
+ * @brief Set the duty-cycle for a given channel of the given PWM device
+ * 
+ * The duty-cycle is set in relation to the chosen resolution of the given device. If
+ * value > resolution, value is set to resolution.
+ * 
+ * @param dev           the PWM device to set
+ * @param channel       the channel of the given device to set
+ * @param value         the desired duty-cycle to set
+ * @return              0 on success, -1 on invalid device or channel
+ */
+int pwm_set(pwm_t dev, int channel, unsigned int value);
+
+/**
+ * @brief Start PWM generation on the given device
+ * 
+ * @param dev           device to start
+ */
+void pwm_start(pwm_t dev);
+
+/**
+ * @brief Stop PWM generation on the given device
+ * 
+ * @param dev           device to stop
+ */
+void pwm_stop(pwm_t dev);
+
+
+#endif /* __PWM_H */
+/** @} */