diff --git a/packages/mediacenter/platform/package.mk b/packages/mediacenter/platform/package.mk
new file mode 100644
index 0000000000..2f10fb6be1
--- /dev/null
+++ b/packages/mediacenter/platform/package.mk
@@ -0,0 +1,48 @@
+################################################################################
+# This file is part of OpenELEC - http://www.openelec.tv
+# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv)
+#
+# OpenELEC is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# OpenELEC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with OpenELEC. If not, see .
+################################################################################
+
+PKG_NAME="platform"
+PKG_VERSION="1.0.6"
+PKG_REV="1"
+PKG_ARCH="any"
+PKG_LICENSE="GPL"
+PKG_SITE="http://www.kodi.tv"
+PKG_URL="http://mirrors.xbmc.org/build-deps/sources/$PKG_NAME-$PKG_VERSION.tar.gz"
+PKG_DEPENDS_TARGET="toolchain"
+PKG_PRIORITY="optional"
+PKG_SECTION="multimedia"
+PKG_SHORTDESC="platform:"
+PKG_LONGDESC="platform:"
+
+PKG_IS_ADDON="no"
+PKG_AUTORECONF="no"
+
+configure_target() {
+ cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LIBDIR_NOARCH=/usr/lib \
+ -DCMAKE_INSTALL_PREFIX_TOOLCHAIN=$SYSROOT_PREFIX/usr \
+ -DCMAKE_PREFIX_PATH=$SYSROOT_PREFIX/usr \
+ -DBUILD_SHARED_LIBS=0 \
+ ..
+}
+
+post_makeinstall_target() {
+ rm -rf $INSTALL/usr
+}
diff --git a/packages/mediacenter/platform/patches/platform-01-revert-cc-badness.patch b/packages/mediacenter/platform/patches/platform-01-revert-cc-badness.patch
new file mode 100644
index 0000000000..3e7e5ebcc7
--- /dev/null
+++ b/packages/mediacenter/platform/patches/platform-01-revert-cc-badness.patch
@@ -0,0 +1,30 @@
+From f91594676d1f75530addd87363ccbc6510efb84e Mon Sep 17 00:00:00 2001
+From: Stefan Saraev
+Date: Fri, 8 May 2015 11:19:42 +0300
+Subject: [PATCH] revert cc badness
+
+this reverts upstream commit 68f8418
+---
+ CMakeLists.txt | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 73fae2e..dc3e1b5 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -22,12 +22,6 @@ if(WIN32)
+ src/windows/os-threads.cpp)
+ endif()
+
+-set(platform_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include/platform")
+-IF(WIN32)
+- LIST(APPEND platform_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include/platform/windows")
+-ENDIF(WIN32)
+-set(platform_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+-
+ if(NOT ${CORE_SYSTEM_NAME} STREQUAL "")
+ if(${CORE_SYSTEM_NAME} STREQUAL "darwin" OR ${CORE_SYSTEM_NAME} STREQUAL "ios")
+ list(APPEND platform_LIBRARIES "-framework CoreVideo -framework IOKit")
+--
+1.7.10.4
+
diff --git a/packages/mediacenter/platform/patches/platform-02-add-PR6.patch b/packages/mediacenter/platform/patches/platform-02-add-PR6.patch
new file mode 100644
index 0000000000..9a09e3931c
--- /dev/null
+++ b/packages/mediacenter/platform/patches/platform-02-add-PR6.patch
@@ -0,0 +1,199 @@
+From 8ff719d94b664378f3ebb61166454eef7cb20c25 Mon Sep 17 00:00:00 2001
+From: Stephan Raue
+Date: Sat, 9 May 2015 17:13:25 +0200
+Subject: [PATCH] readd sockets/cdevsocket.h, needed by IMX6 and TDA995x
+
+---
+ CMakeLists.txt | 3 +-
+ src/posix/os-socket.h | 16 +++++++
+ src/posix/os-types.h | 2 +
+ src/sockets/cdevsocket.h | 117 +++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 137 insertions(+), 1 deletion(-)
+ create mode 100644 src/sockets/cdevsocket.h
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8164286..9f577b3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -56,7 +56,8 @@ ELSE(WIN32)
+ src/posix/os-types.h
+ DESTINATION include/platform/posix)
+ ENDIF(WIN32)
+-install(FILES src/sockets/socket.h
++install(FILES src/sockets/cdevsocket.h
++ src/sockets/socket.h
+ src/sockets/tcp.h
+ DESTINATION include/platform/sockets)
+ install(FILES src/threads/atomics.h
+diff --git a/src/posix/os-socket.h b/src/posix/os-socket.h
+index 60c8507..05888c2 100644
+--- a/src/posix/os-socket.h
++++ b/src/posix/os-socket.h
+@@ -36,6 +36,7 @@
+ #include "../util/timeutils.h"
+ #include
+ #include
++#include
+ #include
+ #include
+ #include
+@@ -164,8 +165,23 @@ namespace PLATFORM
+
+ return iBytesRead;
+ }
++
++ inline int SocketIoctl(socket_t socket, int *iError, int request, void* data)
++ {
++ if (socket == INVALID_SOCKET_VALUE)
++ {
++ *iError = EINVAL;
++ return -1;
++ }
++
++ int iReturn = ioctl(socket, request, data);
++ if (iReturn < 0)
++ *iError = errno;
++ return iReturn;
++ }
+ //@}
+
++
+ // TCP
+ //@{
+ inline void TcpSocketClose(tcp_socket_t socket)
+diff --git a/src/posix/os-types.h b/src/posix/os-types.h
+index 6134080..b48f330 100644
+--- a/src/posix/os-types.h
++++ b/src/posix/os-types.h
+@@ -61,6 +61,8 @@ typedef socket_t tcp_socket_t;
+ #define INVALID_SOCKET_VALUE (-1)
+ typedef socket_t serial_socket_t;
+ #define INVALID_SERIAL_SOCKET_VALUE (-1)
++typedef socket_t chardev_socket_t;
++#define INVALID_CHARDEV_SOCKET_VALUE (-1)
+
+ typedef long LONG;
+ #if !defined(__APPLE__)
+diff --git a/src/sockets/cdevsocket.h b/src/sockets/cdevsocket.h
+new file mode 100644
+index 0000000..a5ac338
+--- /dev/null
++++ b/src/sockets/cdevsocket.h
+@@ -0,0 +1,117 @@
++#pragma once
++/*
++ * This file is part of the libCEC(R) library.
++ *
++ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved.
++ * libCEC(R) is an original work, containing original code.
++ *
++ * libCEC(R) is a trademark of Pulse-Eight Limited.
++ *
++ * This program is dual-licensed; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ *
++ * Alternatively, you can license this library under a commercial license,
++ * please contact Pulse-Eight Licensing for more information.
++ *
++ * For more information contact:
++ * Pulse-Eight Licensing
++ * http://www.pulse-eight.com/
++ * http://www.pulse-eight.net/
++ */
++
++#include "../os.h"
++#include "../util/buffer.h"
++
++#include
++#include
++
++#if !defined(__WINDOWS__)
++#include
++#endif
++
++#include "socket.h"
++
++namespace PLATFORM
++{
++ class CCDevSocket : public CCommonSocket
++ {
++ public:
++ CCDevSocket(const std::string &strName ) :
++ CCommonSocket(INVALID_CHARDEV_SOCKET_VALUE, strName)
++ #ifdef __WINDOWS__
++ ,m_iCurrentReadTimeout(MAXDWORD)
++ #endif
++ {}
++
++ virtual ~CCDevSocket(void)
++ {
++ Close();
++ }
++
++ virtual bool Open(uint64_t iTimeoutMs = 0)
++ {
++ (void)iTimeoutMs;
++
++ if (IsOpen())
++ return false;
++
++ m_socket = open(m_strName.c_str(), O_RDWR );
++
++ if (m_socket == INVALID_CHARDEV_SOCKET_VALUE)
++ {
++ m_strError = strerror(errno);
++ return false;
++ }
++
++ return true;
++ }
++
++ virtual void Close(void)
++ {
++ if (IsOpen())
++ {
++ SocketClose(m_socket);
++ m_socket = INVALID_CHARDEV_SOCKET_VALUE;
++ }
++ }
++
++ virtual void Shutdown(void)
++ {
++ SocketClose(m_socket);
++ }
++
++ virtual int Ioctl(int request, void* data)
++ {
++ return IsOpen() ? SocketIoctl(m_socket, &m_iError, request, data) : -1;
++ }
++
++ virtual ssize_t Write(void* data, size_t len)
++ {
++ return IsOpen() ? SocketWrite(m_socket, &m_iError, data, len) : -1;
++ }
++
++ virtual ssize_t Read(void* data, size_t len, uint64_t iTimeoutMs = 0)
++ {
++ return IsOpen() ? SocketRead(m_socket, &m_iError, data, len, iTimeoutMs) : -1;
++ }
++
++ virtual bool IsOpen(void)
++ {
++ return m_socket != INVALID_CHARDEV_SOCKET_VALUE;
++ }
++ };
++
++};
++