diff --git a/debian/changelog b/debian/changelog
index 24715bd..2439bf3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+weston-mtk (5.0.0-3+mtk) mendel-day; urgency=medium
+
+  * Update to 5.0.0-3 for Day release
+  * Apply MTK patches
+
+ -- Coral Team <coral-support@google.com>  Fri, 07 Feb 2020 11:14:58 -0800
+
 weston-mtk (2.0.0-1) mendel-chef; urgency=medium
 
   * Initial release
diff --git a/debian/control b/debian/control
index d2a22cf..75c4778 100644
--- a/debian/control
+++ b/debian/control
@@ -1,17 +1,21 @@
 Source: weston-mtk
 Section: x11
 Priority: optional
-Maintainer: Coral <coral-support@google.com>
+Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
+Uploaders:
+ Mike Gabriel <sunweaver@debian.org>,
+ Héctor Orón Martínez <zumbi@debian.org>,
+ Emilio Pozuelo Monfort <pochu@debian.org>,
 Build-Depends:
  debhelper (>= 10),
  quilt,
  pkg-config,
+ libdbus-1-dev,
  libpixman-1-dev (>= 0.25.2),
  libpng-dev,
  libjpeg-dev,
- libdrm2,
- libdrm-dev,
  libcolord-dev (>= 0.1.27),
+ liblcms2-dev,
  mesa-common-dev,
  libglu1-mesa-dev,
  libegl1-mesa-dev (>= 9.0~),
@@ -19,30 +23,38 @@
  libwayland-dev (>= 1.11.91),
  libxcb1-dev,
  libxcb-composite0-dev,
+ libxcb-shape0-dev,
  libxcb-xfixes0-dev,
  libxcb-xkb-dev,
  libx11-xcb-dev,
  libx11-dev,
  libudev-dev (>= 136),
- libgbm-dev (>= 10.2),
+ libdrm-dev (>= 2.4.83),
+ libgbm-dev (>= 17.2),
  libxkbcommon-dev (>= 0.3.0),
  libcairo2-dev (>= 1.10.0),
  libpango1.0-dev,
  libgdk-pixbuf2.0-dev,
  libxcursor-dev,
- libmtdev-dev,
  libpam0g-dev,
  libvpx-dev,
  libsystemd-dev,
  libinput-dev (>= 0.8.0),
- wayland-protocols (>= 1.7),
-Standards-Version: 4.1.1
+ wayland-protocols (>= 1.13),
+Standards-Version: 3.9.8
+Homepage: http://wayland.freedesktop.org/
+Vcs-Git: https://salsa.debian.org/xorg-team/wayland/weston.git
+Vcs-Browser: https://salsa.debian.org/xorg-team/wayland/weston
 
 Package: weston-mtk
 Section: libdevel
 Architecture: any
-Priority: extra
+Priority: optional
 Depends:
+ adduser,
+ libegl1-mesa (>= 8.0-2) | libegl1-x11,
+ libwayland-egl1-mesa (>= 10.1.0-2) | libwayland-egl1,
+ libgles2-mesa (>= 8.0-2) | libgles2,
  libinput10,
  libxcb-shape0,
  libxcb-composite0,
diff --git a/debian/copyright b/debian/copyright
index ff62785..6f9276e 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,43 +1,466 @@
-Upstream-Name: weston-mtk
-Upstream-Contact: wayland-devel@lists.freedesktop.org
-Source: https://wayland.freedesktop.org/releases/
-
-Files: debian/*
-Copyright: © 2016 Héctor Orón Martínez <zumbi@debian.org>
-License: Expat
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Source: http://wayland.freedesktop.org/
 
 Files: *
-Copyright: © 2008-2013 Kristian Høgsberg
-		   © 2010-2013 Intel Corporation
-		   © 2013      Rafael Antognolli
-		   © 2013      Jasper St. Pierre
-		   © 2014      Jonas Ådahl
-		   © 2014      Jason Ekstrand
-		   © 2014-2015 Collabora, Ltd.
-		   © 2015      Red Hat Inc.
-License: Expat
+Copyright: © 2016 Armin Krezović
+           © 2010-2012 Benjamin Franzke
+           © 2016 Benoit Gschwind
+           © 2013 BMW Car IT GmbH
+           © 2009 Chris Wilson
+           © 2011-2018 Collabora, Ltd.
+           © 2013 David Herrmann
+           © 2013-2016 DENSO CORPORATION
+           © 2015-2018 General Electric Company
+           © 2015-2016 Giulio Camuffo
+           © 2013 Hardening
+           © 2009-2013 Intel Corporation
+           © 2013-2014 Jason Ekstrand
+           © 2015 Jasper St. Pierre
+           © 2012 John Kåre Alsaker
+           © 2012-2013 Jonas Ådahl
+           © 1988-2004 Keith Packard and Bart Massey.
+           © 2008-2012 Kristian Høgsberg
+           © 2012 Martin Minarik
+           © 2016 NVIDIA Corporation
+           © 2012 Openismus GmbH
+           © 2014 Pekka Paalanen
+           © 2012 Philipp Brüschweiler
+           © 2013 Philip Withnall
+           © 2016 Quentin "Sardem FF7" Glidic
+           © 2012-2013 Raspberry Pi Foundation
+           © 2010-2015 Red Hat, Inc.
+           © 2013 Richard Hughes
+           © 2012 Rob Clark
+           © 2013 Sam Spilsbury
+           © 2015-2016 Samsung Electronics Co., Ltd
+           © 2012 Scott Moreau
+           © 2011 Tim Wiederhake
+           © 2008 Tungsten Graphics, Inc
+           © 2013 Vasily Khoruzhick
+License: X11
+ Permission to use, copy, modify, distribute, and sell this software and
+ its documentation for any purpose is hereby granted without fee, provided
+ that the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the name of the copyright holders not be used in
+ advertising or publicity pertaining to distribution of the software
+ without specific, written prior permission.  The copyright holders make
+ no representations about the suitability of this software for any
+ purpose.  It is provided "as is" without express or implied warranty.
+ .
+ THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
+Files: data/*
+Copyright: © 2007-2010 Novell, Inc.
+License: CC-BY-SA-3.0
 
-The above copyright notice and this permission notice (including the next
-paragraph) shall be included in all copies or substantial portions of the
-Software.
+Files: data/terminal.png
+Copyright: @ 2002-2008 GNOME Project
+License: CC-BY-SA-3.0
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
+Files: src/hash.*
+Copyright: © 2009 Intel Corporation
+           © 1988-2004 Keith Packard and Bart Massey.
+License: MIT
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice (including the next
+ paragraph) shall be included in all copies or substantial portions of the
+ Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ IN THE SOFTWARE.
+ .
+ Except as contained in this notice, the names of the authors
+ or their institutions shall not be used in advertising or
+ otherwise to promote the sale, use or other dealings in this
+ Software without prior written authorization from the
+ authors.
+ .
+ Authors:
+    Eric Anholt <eric@anholt.net>
+    Keith Packard <keithp@keithp.com>
 
----
 
-The above is the version of the MIT "Expat" License used by X.org:
-
-    http://cgit.freedesktop.org/xorg/xserver/tree/COPYING
+License: CC-BY-SA-3.0
+ THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
+ CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS
+ PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE
+ WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS
+ PROHIBITED.
+ .
+ BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
+ AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS
+ LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU
+ THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH
+ TERMS AND CONDITIONS.
+ .
+ .
+ 1. Definitions
+ .
+ "Adaptation" means a work based upon the Work, or upon the Work and
+ other pre-existing works, such as a translation, adaptation,
+ derivative work, arrangement of music or other alterations of a
+ literary or artistic work, or phonogram or performance and includes
+ cinematographic adaptations or any other form in which the Work may be
+ recast, transformed, or adapted including in any form recognizably
+ derived from the original, except that a work that constitutes a
+ Collection will not be considered an Adaptation for the purpose of
+ this License. For the avoidance of doubt, where the Work is a musical
+ work, performance or phonogram, the synchronization of the Work in
+ timed-relation with a moving image ("synching") will be considered an
+ Adaptation for the purpose of this License.
+ .
+ "Collection" means a collection of literary or artistic works, such as
+ encyclopedias and anthologies, or performances, phonograms or
+ broadcasts, or other works or subject matter other than works listed
+ in Section 1(f) below, which, by reason of the selection and
+ arrangement of their contents, constitute intellectual creations, in
+ which the Work is included in its entirety in unmodified form along
+ with one or more other contributions, each constituting separate and
+ independent works in themselves, which together are assembled into a
+ collective whole. A work that constitutes a Collection will not be
+ considered an Adaptation (as defined below) for the purposes of this
+ License.
+ .
+ "Creative Commons Compatible License" means a license that is listed
+ at http://creativecommons.org/compatiblelicenses that has been
+ approved by Creative Commons as being essentially equivalent to this
+ License, including, at a minimum, because that license: (i) contains
+ terms that have the same purpose, meaning and effect as the License
+ Elements of this License; and, (ii) explicitly permits the relicensing
+ of adaptations of works made available under that license under this
+ License or a Creative Commons jurisdiction license with the same
+ License Elements as this License.
+ .
+ "Distribute" means to make available to the public the original and
+ copies of the Work or Adaptation, as appropriate, through sale or
+ other transfer of ownership.
+ .
+ "License Elements" means the following high-level license attributes
+ as selected by Licensor and indicated in the title of this License:
+ Attribution, ShareAlike.
+ .
+ "Licensor" means the individual, individuals, entity or entities that
+ offer(s) the Work under the terms of this License.
+ .
+ "Original Author" means, in the case of a literary or artistic work,
+ the individual, individuals, entity or entities who created the Work
+ or if no individual or entity can be identified, the publisher; and in
+ addition (i) in the case of a performance the actors, singers,
+ musicians, dancers, and other persons who act, sing, deliver, declaim,
+ play in, interpret or otherwise perform literary or artistic works or
+ expressions of folklore; (ii) in the case of a phonogram the producer
+ being the person or legal entity who first fixes the sounds of a
+ performance or other sounds; and, (iii) in the case of broadcasts, the
+ organization that transmits the broadcast.
+ .
+ "Work" means the literary and/or artistic work offered under the terms
+ of this License including without limitation any production in the
+ literary, scientific and artistic domain, whatever may be the mode or
+ form of its expression including digital form, such as a book,
+ pamphlet and other writing; a lecture, address, sermon or other work
+ of the same nature; a dramatic or dramatico-musical work; a
+ choreographic work or entertainment in dumb show; a musical
+ composition with or without words; a cinematographic work to which are
+ assimilated works expressed by a process analogous to cinematography;
+ a work of drawing, painting, architecture, sculpture, engraving or
+ lithography; a photographic work to which are assimilated works
+ expressed by a process analogous to photography; a work of applied
+ art; an illustration, map, plan, sketch or three-dimensional work
+ relative to geography, topography, architecture or science; a
+ performance; a broadcast; a phonogram; a compilation of data to the
+ extent it is protected as a copyrightable work; or a work performed by
+ a variety or circus performer to the extent it is not otherwise
+ considered a literary or artistic work.
+ .
+ "You" means an individual or entity exercising rights under this
+ License who has not previously violated the terms of this License with
+ respect to the Work, or who has received express permission from the
+ Licensor to exercise rights under this License despite a previous
+ violation.
+ .
+ "Publicly Perform" means to perform public recitations of the Work and
+ to communicate to the public those public recitations, by any means or
+ process, including by wire or wireless means or public digital
+ performances; to make available to the public Works in such a way that
+ members of the public may access these Works from a place and at a
+ place individually chosen by them; to perform the Work to the public
+ by any means or process and the communication to the public of the
+ performances of the Work, including by public digital performance; to
+ broadcast and rebroadcast the Work by any means including signs,
+ sounds or images.
+ .
+ "Reproduce" means to make copies of the Work by any means including
+ without limitation by sound or visual recordings and the right of
+ fixation and reproducing fixations of the Work, including storage of a
+ protected performance or phonogram in digital form or other electronic
+ medium.
+ .
+ .
+ 2. Fair Dealing Rights. Nothing in this License is intended to reduce,
+ limit, or restrict any uses free from copyright or rights arising from
+ limitations or exceptions that are provided for in connection with the
+ copyright protection under copyright law or other applicable laws.
+ .
+ .
+ 3. License Grant. Subject to the terms and conditions of this License,
+ Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+ perpetual (for the duration of the applicable copyright) license to
+ exercise the rights in the Work as stated below:
+ .
+  - to Reproduce the Work, to incorporate the Work into one or more
+    Collections, and to Reproduce the Work as incorporated in the
+    Collections;
+ .
+  - to create and Reproduce Adaptations provided that any such
+    Adaptation, including any translation in any medium, takes
+    reasonable steps to clearly label, demarcate or otherwise identify
+    that changes were made to the original Work. For example, a
+    translation could be marked "The original work was translated from
+    English to Spanish," or a modification could indicate "The original
+    work has been modified.";
+ .
+  - to Distribute and Publicly Perform the Work including as
+    incorporated in Collections; and,
+ .
+  - to Distribute and Publicly Perform Adaptations.
+ .
+  - For the avoidance of doubt:
+     - Non-waivable Compulsory License Schemes. In those jurisdictions
+       in which the right to collect royalties through any statutory or
+       compulsory licensing scheme cannot be waived, the Licensor
+       reserves the exclusive right to collect such royalties for any
+       exercise by You of the rights granted under this License;
+     - Waivable Compulsory License Schemes. In those jurisdictions in
+       which the right to collect royalties through any statutory or
+       compulsory licensing scheme can be waived, the Licensor waives
+       the exclusive right to collect such royalties for any exercise
+       by You of the rights granted under this License; and,
+     - Voluntary License Schemes. The Licensor waives the right to
+       collect royalties, whether individually or, in the event that
+       the Licensor is a member of a collecting society that
+       administers voluntary licensing schemes, via that society, from
+       any exercise by You of the rights granted under this License.
+ .
+ The above rights may be exercised in all media and formats whether now
+ known or hereafter devised. The above rights include the right to make
+ such modifications as are technically necessary to exercise the rights
+ in other media and formats. Subject to Section 8(f), all rights not
+ expressly granted by Licensor are hereby reserved.
+ .
+ .
+ 4. Restrictions. The license granted in Section 3 above is expressly
+ made subject to and limited by the following restrictions:
+ .
+  - You may Distribute or Publicly Perform the Work only under the
+    terms of this License. You must include a copy of, or the Uniform
+    Resource Identifier (URI) for, this License with every copy of the
+    Work You Distribute or Publicly Perform. You may not offer or
+    impose any terms on the Work that restrict the terms of this
+    License or the ability of the recipient of the Work to exercise the
+    rights granted to that recipient under the terms of the
+    License. You may not sublicense the Work. You must keep intact all
+    notices that refer to this License and to the disclaimer of
+    warranties with every copy of the Work You Distribute or Publicly
+    Perform. When You Distribute or Publicly Perform the Work, You may
+    not impose any effective technological measures on the Work that
+    restrict the ability of a recipient of the Work from You to
+    exercise the rights granted to that recipient under the terms of
+    the License. This Section 4(a) applies to the Work as incorporated
+    in a Collection, but this does not require the Collection apart
+    from the Work itself to be made subject to the terms of this
+    License. If You create a Collection, upon notice from any Licensor
+    You must, to the extent practicable, remove from the Collection any
+    credit as required by Section 4(c), as requested. If You create an
+    Adaptation, upon notice from any Licensor You must, to the extent
+    practicable, remove from the Adaptation any credit as required by
+    Section 4(c), as requested.
+ .
+  - You may Distribute or Publicly Perform an Adaptation only under the
+    terms of: (i) this License; (ii) a later version of this License
+    with the same License Elements as this License; (iii) a Creative
+    Commons jurisdiction license (either this or a later license
+    version) that contains the same License Elements as this License
+    (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons
+    Compatible License. If you license the Adaptation under one of the
+    licenses mentioned in (iv), you must comply with the terms of that
+    license. If you license the Adaptation under the terms of any of
+    the licenses mentioned in (i), (ii) or (iii) (the "Applicable
+    License"), you must comply with the terms of the Applicable License
+    generally and the following provisions: (I) You must include a copy
+    of, or the URI for, the Applicable License with every copy of each
+    Adaptation You Distribute or Publicly Perform; (II) You may not
+    offer or impose any terms on the Adaptation that restrict the terms
+    of the Applicable License or the ability of the recipient of the
+    Adaptation to exercise the rights granted to that recipient under
+    the terms of the Applicable License; (III) You must keep intact all
+    notices that refer to the Applicable License and to the disclaimer
+    of warranties with every copy of the Work as included in the
+    Adaptation You Distribute or Publicly Perform; (IV) when You
+    Distribute or Publicly Perform the Adaptation, You may not impose
+    any effective technological measures on the Adaptation that
+    restrict the ability of a recipient of the Adaptation from You to
+    exercise the rights granted to that recipient under the terms of
+    the Applicable License. This Section 4(b) applies to the Adaptation
+    as incorporated in a Collection, but this does not require the
+    Collection apart from the Adaptation itself to be made subject to
+    the terms of the Applicable License.
+ .
+  - If You Distribute, or Publicly Perform the Work or any Adaptations
+    or Collections, You must, unless a request has been made pursuant
+    to Section 4(a), keep intact all copyright notices for the Work and
+    provide, reasonable to the medium or means You are utilizing: (i)
+    the name of the Original Author (or pseudonym, if applicable) if
+    supplied, and/or if the Original Author and/or Licensor designate
+    another party or parties (e.g., a sponsor institute, publishing
+    entity, journal) for attribution ("Attribution Parties") in
+    Licensor's copyright notice, terms of service or by other
+    reasonable means, the name of such party or parties; (ii) the title
+    of the Work if supplied; (iii) to the extent reasonably
+    practicable, the URI, if any, that Licensor specifies to be
+    associated with the Work, unless such URI does not refer to the
+    copyright notice or licensing information for the Work; and (iv) ,
+    consistent with Ssection 3(b), in the case of an Adaptation, a
+    credit identifying the use of the Work in the Adaptation (e.g.,
+    "French translation of the Work by Original Author," or "Screenplay
+    based on original Work by Original Author"). The credit required by
+    this Section 4(c) may be implemented in any reasonable manner;
+    provided, however, that in the case of a Adaptation or Collection,
+    at a minimum such credit will appear, if a credit for all
+    contributing authors of the Adaptation or Collection appears, then
+    as part of these credits and in a manner at least as prominent as
+    the credits for the other contributing authors. For the avoidance
+    of doubt, You may only use the credit required by this Section for
+    the purpose of attribution in the manner set out above and, by
+    exercising Your rights under this License, You may not implicitly
+    or explicitly assert or imply any connection with, sponsorship or
+    endorsement by the Original Author, Licensor and/or Attribution
+    Parties, as appropriate, of You or Your use of the Work, without
+    the separate, express prior written permission of the Original
+    Author, Licensor and/or Attribution Parties.
+ .
+  - Except as otherwise agreed in writing by the Licensor or as may be
+    otherwise permitted by applicable law, if You Reproduce, Distribute
+    or Publicly Perform the Work either by itself or as part of any
+    Adaptations or Collections, You must not distort, mutilate, modify
+    or take other derogatory action in relation to the Work which would
+    be prejudicial to the Original Author's honor or
+    reputation. Licensor agrees that in those jurisdictions
+    (e.g. Japan), in which any exercise of the right granted in Section
+    3(b) of this License (the right to make Adaptations) would be
+    deemed to be a distortion, mutilation, modification or other
+    derogatory action prejudicial to the Original Author's honor and
+    reputation, the Licensor will waive or not assert, as appropriate,
+    this Section, to the fullest extent permitted by the applicable
+    national law, to enable You to reasonably exercise Your right under
+    Section 3(b) of this License (right to make Adaptations) but not
+    otherwise.
+ .
+ .
+ 5. Representations, Warranties and Disclaimer
+ .
+ UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
+ LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR
+ WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED,
+ STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF
+ TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE,
+ NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY,
+ OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
+ DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED
+ WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+ .
+ .
+ 6. Limitation on Liability.
+ .
+ EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL
+ LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT
+ OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ .
+ .
+ 7. Termination
+ .
+  - This License and the rights granted hereunder will terminate
+    automatically upon any breach by You of the terms of this
+    License. Individuals or entities who have received Adaptations or
+    Collections from You under this License, however, will not have
+    their licenses terminated provided such individuals or entities
+    remain in full compliance with those licenses. Sections 1, 2, 5, 6,
+    7, and 8 will survive any termination of this License.
+ .
+  - Subject to the above terms and conditions, the license granted here
+    is perpetual (for the duration of the applicable copyright in the
+    Work). Notwithstanding the above, Licensor reserves the right to
+    release the Work under different license terms or to stop
+    distributing the Work at any time; provided, however that any such
+    election will not serve to withdraw this License (or any other
+    license that has been, or is required to be, granted under the
+    terms of this License), and this License will continue in full
+    force and effect unless terminated as stated above.
+ .
+ .
+ 8. Miscellaneous
+ .
+  - Each time You Distribute or Publicly Perform the Work or a
+    Collection, the Licensor offers to the recipient a license to the
+    Work on the same terms and conditions as the license granted to You
+    under this License.
+ .
+  - Each time You Distribute or Publicly Perform an Adaptation,
+    Licensor offers to the recipient a license to the original Work on
+    the same terms and conditions as the license granted to You under
+    this License.
+ .
+  - If any provision of this License is invalid or unenforceable under
+    applicable law, it shall not affect the validity or enforceability
+    of the remainder of the terms of this License, and without further
+    action by the parties to this agreement, such provision shall be
+    reformed to the minimum extent necessary to make such provision
+    valid and enforceable.
+ .
+  - No term or provision of this License shall be deemed waived and no
+    breach consented to unless such waiver or consent shall be in
+    writing and signed by the party to be charged with such waiver or
+    consent.
+ .
+  - This License constitutes the entire agreement between the parties
+    with respect to the Work licensed here. There are no
+    understandings, agreements or representations with respect to the
+    Work not specified here. Licensor shall not be bound by any
+    additional provisions that may appear in any communication from
+    You. This License may not be modified without the mutual written
+    agreement of the Licensor and You.
+ .
+  - The rights granted under, and the subject matter referenced, in
+    this License were drafted utilizing the terminology of the Berne
+    Convention for the Protection of Literary and Artistic Works (as
+    amended on September 28, 1979), the Rome Convention of 1961, the
+    WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms
+    Treaty of 1996 and the Universal Copyright Convention (as revised
+    on July 24, 1971). These rights and subject matter take effect in
+    the relevant jurisdiction in which the License terms are sought to
+    be enforced according to the corresponding provisions of the
+    implementation of those treaty provisions in the applicable
+    national law. If the standard suite of rights granted under
+    applicable copyright law includes additional rights not granted
+    under this License, such additional rights are deemed to be
+    included in the License; this License is not intended to restrict
+    the license of any rights under applicable law.
diff --git a/debian/lintian-overrides b/debian/lintian-overrides
index 39364ff..d838026 100644
--- a/debian/lintian-overrides
+++ b/debian/lintian-overrides
@@ -1,5 +1,6 @@
-weston-mtk: package-name-doesnt-match-sonames libweston-2-0 libweston-desktop-2-0
+weston-mtk: package-name-doesnt-match-sonames libweston-5-0 libweston-desktop-5-0
 weston-mtk: non-empty-dependency_libs-in-la-file *
 weston-mtk: non-dev-pkg-with-shlib-symlink *
 weston-mtk: shlib-in-multi-arch-foreign-package *
+weston-mtk: multiarch-foreign-pkgconfig *
 
diff --git a/debian/patches/0001-PATCH-1-9-hmi-controller-use-output_w-h-instead-of-c.patch b/debian/patches/0001-PATCH-1-9-hmi-controller-use-output_w-h-instead-of-c.patch
new file mode 100644
index 0000000..1a241ee
--- /dev/null
+++ b/debian/patches/0001-PATCH-1-9-hmi-controller-use-output_w-h-instead-of-c.patch
@@ -0,0 +1,55 @@
+From c9120f0c15f901f507c0c626b7225f4e93fca700 Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Tue, 24 Sep 2019 11:21:23 +0800
+Subject: [PATCH 1/8] [[PATCH 1/9] hmi-controller: use output_w/h instead of
+ current_mode_w/h
+
+make use of output->w/h instead of output->current_mode->w/h,
+	 output->w/h have involve factor of transform and scale
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ ivi-shell/hmi-controller.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c
+index a0e49ba..c4f106d 100644
+--- a/ivi-shell/hmi-controller.c
++++ b/ivi-shell/hmi-controller.c
+@@ -804,8 +804,8 @@ hmi_controller_create(struct weston_compositor *ec)
+ 		base_layer = MEM_ALLOC(1 * sizeof(struct hmi_controller_layer));
+ 		base_layer->x = 0;
+ 		base_layer->y = 0;
+-		base_layer->width = output->current_mode->width;
+-		base_layer->height = output->current_mode->height;
++		base_layer->width = output->width;
++		base_layer->height = output->height;
+ 		base_layer->id_layer =
+ 			hmi_ctrl->hmi_setting->base_layer_id +
+ 						(i * hmi_ctrl->hmi_setting->base_layer_id_offset);
+@@ -824,8 +824,8 @@ hmi_controller_create(struct weston_compositor *ec)
+ 		application_layer = MEM_ALLOC(1 * sizeof(struct hmi_controller_layer));
+ 		application_layer->x = 0;
+ 		application_layer->y = 0;
+-		application_layer->width = output->current_mode->width;
+-		application_layer->height = output->current_mode->height - panel_height;
++		application_layer->width = output->width;
++		application_layer->height = output->height - panel_height;
+ 		application_layer->id_layer =
+ 			hmi_ctrl->hmi_setting->application_layer_id +
+ 						(i * hmi_ctrl->hmi_setting->base_layer_id_offset);
+@@ -841,9 +841,9 @@ hmi_controller_create(struct weston_compositor *ec)
+ 	hmi_ctrl->workspace_background_layer.x = 0;
+ 	hmi_ctrl->workspace_background_layer.y = 0;
+ 	hmi_ctrl->workspace_background_layer.width =
+-		output->current_mode->width;
++		output->width;
+ 	hmi_ctrl->workspace_background_layer.height =
+-		output->current_mode->height - panel_height;
++		output->height - panel_height;
+ 
+ 	hmi_ctrl->workspace_background_layer.id_layer =
+ 		hmi_ctrl->hmi_setting->workspace_background_layer_id;
+-- 
+2.6.4
+
diff --git a/debian/patches/0001-add-switch_config.patch b/debian/patches/0001-add-switch_config.patch
new file mode 100644
index 0000000..3d011d6
--- /dev/null
+++ b/debian/patches/0001-add-switch_config.patch
@@ -0,0 +1,31 @@
+From 08f1aa62f0a5faa0dc8aaf082264b77d37f0610d Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Wed, 25 Sep 2019 19:14:50 +0800
+Subject: [PATCH] add switch_config
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ compositor/main.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/compositor/main.c b/compositor/main.c
+index 21c501c..64e4e30 100644
+--- a/compositor/main.c
++++ b/compositor/main.c
+@@ -2499,6 +2499,13 @@ int main(int argc, char *argv[])
+ 		goto out;
+ 	}
+ 
++
++	if (config_switch_global_create(wet.compositor) < 0) {
++	    weston_log("fatal: failed to config_switch_global_create\n");
++	    goto out;
++	}
++
++	
+ 	weston_compositor_flush_heads_changed(wet.compositor);
+ 	if (wet.init_failed)
+ 		goto out;
+-- 
+2.6.4
+
diff --git a/debian/patches/0001-mtk-make-error-portable.patch b/debian/patches/0001-mtk-make-error-portable.patch
new file mode 100644
index 0000000..a9ddd47
--- /dev/null
+++ b/debian/patches/0001-mtk-make-error-portable.patch
@@ -0,0 +1,58 @@
+diff --git a/configure.ac b/configure.ac
+index 50f8e013..d61ca8f4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -109,6 +109,8 @@ AC_CHECK_DECL(CLOCK_MONOTONIC,[],
+ 	      [[#include <time.h>]])
+ AC_CHECK_HEADERS([execinfo.h])
+ 
++AC_CHECK_HEADERS([error.h])
++
+ AC_CHECK_FUNCS([mkostemp strchrnul initgroups posix_fallocate])
+ 
+ # check for libdrm as a build-time dependency only
+diff --git a/libweston/weston-error.h b/libweston/weston-error.h
+new file mode 100644
+index 0000000..2089d02
+--- /dev/null
++++ b/libweston/weston-error.h
+@@ -0,0 +1,19 @@
++#ifndef _WESTON_ERROR_H
++#define _WESTON_ERROR_H
++
++#if defined(HAVE_ERROR_H)
++#include <error.h>
++#else
++#include <err.h>
++#include <string.h>
++#define _weston_error(S, E, F, ...) do { \
++	if (E) \
++		err(S, F ": %s", ##__VA_ARGS__, strerror(E)); \
++	else \
++		err(S, F, ##__VA_ARGS__); \
++} while(0)
++
++#define error _weston_error
++#endif
++
++#endif
+diff --git a/libweston/weston-launch.c b/libweston/weston-launch.c
+index bf73e0d6..90644394 100644
+--- a/libweston/weston-launch.c
++++ b/libweston/weston-launch.c
+@@ -33,7 +33,6 @@
+ #include <poll.h>
+ #include <errno.h>
+ 
+-#include <error.h>
+ #include <getopt.h>
+ 
+ #include <sys/types.h>
+@@ -59,6 +58,7 @@
+ #endif
+ 
+ #include "weston-launch.h"
++#include "weston-error.h"
+ 
+ #define DRM_MAJOR 226
+ 
diff --git a/debian/patches/0002-PATCH-2-9-libinput-fix-issue-for-touch_event-cause-w.patch b/debian/patches/0002-PATCH-2-9-libinput-fix-issue-for-touch_event-cause-w.patch
new file mode 100644
index 0000000..cf86044
--- /dev/null
+++ b/debian/patches/0002-PATCH-2-9-libinput-fix-issue-for-touch_event-cause-w.patch
@@ -0,0 +1,40 @@
+From 4ba125216b900fc57c63a915fb194c48f4b516c4 Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Tue, 24 Sep 2019 11:26:20 +0800
+Subject: [PATCH 2/8] [PATCH 2/9] libinput: fix issue for touch_event cause
+ weston crash
+
+1.fix touch_event cause weston crash
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ libweston/libinput-device.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/libweston/libinput-device.c b/libweston/libinput-device.c
+index e25df14..18a3032 100644
+--- a/libweston/libinput-device.c
++++ b/libweston/libinput-device.c
+@@ -436,6 +436,19 @@ handle_touch_with_coords(struct libinput_device *libinput_device,
+ 	x =  libinput_event_touch_get_x_transformed(touch_event, width);
+ 	y =  libinput_event_touch_get_y_transformed(touch_event, height);
+ 
++	if (x == 0)
++		x = x + 1;
++
++	if (y == 0)
++		y = y + 1;
++
++	if (x == wl_fixed_from_int(width))
++		x = x - 1;
++
++	if (y == wl_fixed_from_int(height))
++		y = y - 1;
++
++
+ 	weston_output_transform_coordinate(device->output,
+ 					   x, y, &x, &y);
+ 
+-- 
+2.6.4
+
diff --git a/debian/patches/0003-PATCH-3-9-compose-engine-turn-to-pixman-if-gl-init-f.patch b/debian/patches/0003-PATCH-3-9-compose-engine-turn-to-pixman-if-gl-init-f.patch
new file mode 100644
index 0000000..13d3edb
--- /dev/null
+++ b/debian/patches/0003-PATCH-3-9-compose-engine-turn-to-pixman-if-gl-init-f.patch
@@ -0,0 +1,43 @@
+From 621569253b34788e096adda8132010d0a17d0844 Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Tue, 24 Sep 2019 11:31:09 +0800
+Subject: [PATCH 3/8] [PATCH 3/9] compose-engine: turn to pixman if gl init
+ fail
+
+if init_gl fail then turn to pixman to compose buffer
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ libweston/compositor-drm.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
+index 3891176..ef38a64 100644
+--- a/libweston/compositor-drm.c
++++ b/libweston/compositor-drm.c
+@@ -3921,6 +3921,7 @@ init_egl(struct drm_backend *b)
+ 
+ 	if (drm_backend_create_gl_renderer(b) < 0) {
+ 		gbm_device_destroy(b->gbm);
++		b->gbm = NULL;
+ 		return -1;
+ 	}
+ 
+@@ -6766,8 +6767,12 @@ drm_backend_create(struct weston_compositor *compositor,
+ 		}
+ 	} else {
+ 		if (init_egl(b) < 0) {
+-			weston_log("failed to initialize egl\n");
+-			goto err_udev_dev;
++			weston_log("failed to initialize egl, use pixman\n");
++			if (init_pixman(b) < 0) {
++				weston_log("failed to initialize pixman renderer\n");
++				goto err_udev_dev;
++			}
++			b->use_pixman = 1;
+ 		}
+ 	}
+ 
+-- 
+2.6.4
+
diff --git a/debian/patches/0004-PATCH-4-9-weston-do-not-check-master-fd-for-DRM-driv.patch b/debian/patches/0004-PATCH-4-9-weston-do-not-check-master-fd-for-DRM-driv.patch
new file mode 100644
index 0000000..22093bb
--- /dev/null
+++ b/debian/patches/0004-PATCH-4-9-weston-do-not-check-master-fd-for-DRM-driv.patch
@@ -0,0 +1,31 @@
+From 264cd761cc03e2dd85e57a1162db73c4beec0d07 Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Tue, 24 Sep 2019 11:33:56 +0800
+Subject: [PATCH 4/8] [PATCH 4/9] weston: do not check master fd for DRM driver
+
+give access to other module to use drm.
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ libweston/launcher-direct.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/libweston/launcher-direct.c b/libweston/launcher-direct.c
+index e0ce6d6..fe76f51 100644
+--- a/libweston/launcher-direct.c
++++ b/libweston/launcher-direct.c
+@@ -231,11 +231,6 @@ launcher_direct_open(struct weston_launcher *launcher_base, const char *path, in
+ 
+ 	if (major(s.st_rdev) == DRM_MAJOR) {
+ 		launcher->drm_fd = fd;
+-		if (!is_drm_master(fd)) {
+-			weston_log("drm fd not master\n");
+-			close(fd);
+-			return -1;
+-		}
+ 	}
+ 
+ 	return fd;
+-- 
+2.6.4
+
diff --git a/debian/patches/0005-PATCH-5-9-weston-install-client-protocol-to-sysroot-.patch b/debian/patches/0005-PATCH-5-9-weston-install-client-protocol-to-sysroot-.patch
new file mode 100644
index 0000000..4fd683d
--- /dev/null
+++ b/debian/patches/0005-PATCH-5-9-weston-install-client-protocol-to-sysroot-.patch
@@ -0,0 +1,31 @@
+From 21f5f1844e02a50a8b1c2f9ddb39d01b34c92b0a Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Tue, 24 Sep 2019 11:37:19 +0800
+Subject: [PATCH 5/8] [PATCH 5/9] weston: install client-protocol to sysroot
+ for other
+
+install *-protocol.c and *-client-protocol.h to sysroot.
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ Makefile.am | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 83bb253..769e103 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -292,7 +292,9 @@ libwestoninclude_HEADERS =			\
+ 	libweston/timeline-object.h		\
+ 	shared/matrix.h				\
+ 	shared/config-parser.h			\
+-	shared/zalloc.h
++	shared/zalloc.h			\
++	protocol/*-protocol.c			\
++	protocol/*-client-protocol.h
+ 
+ libwestoninclude_HEADERS +=			\
+ 	libweston-desktop/libweston-desktop.h
+-- 
+2.6.4
+
diff --git a/debian/patches/0006-PATCH-7-9-weston-screen-shot-add-screen-shot.patch b/debian/patches/0006-PATCH-7-9-weston-screen-shot-add-screen-shot.patch
new file mode 100644
index 0000000..912fb87
--- /dev/null
+++ b/debian/patches/0006-PATCH-7-9-weston-screen-shot-add-screen-shot.patch
@@ -0,0 +1,602 @@
+From 79d48c68d79e7436a045bb875e18f7e8c6829392 Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Tue, 24 Sep 2019 14:25:47 +0800
+Subject: [PATCH 6/8] [PATCH 7/9] weston-screen-shot: add screen shot
+
+add screen shot
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ Makefile.am                          |  26 +++-
+ clients/simple-screenshooter-mtk.c   | 259 +++++++++++++++++++++++++++++++++++
+ libweston/compositor.c               |   3 +
+ libweston/compositor.h               |   3 +
+ libweston/pixel-formats.c            |   2 +
+ libweston/weston-screenshooter-mtk.c | 129 +++++++++++++++++
+ protocol/weston-configure-mtk.xml    |  67 +++++++++
+ 7 files changed, 486 insertions(+), 3 deletions(-)
+ create mode 100644 clients/simple-screenshooter-mtk.c
+ create mode 100644 libweston/weston-screenshooter-mtk.c
+ create mode 100644 protocol/weston-configure-mtk.xml
+
+diff --git a/Makefile.am b/Makefile.am
+index 769e103..a9e48f8 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -96,6 +96,7 @@ libweston_@LIBWESTON_MAJOR@_la_SOURCES =			\
+ 	libweston/linux-dmabuf.h			\
+ 	libweston/pixel-formats.c			\
+ 	libweston/pixel-formats.h			\
++	libweston/weston-screenshooter-mtk.c \
+ 	shared/helpers.h				\
+ 	shared/matrix.c					\
+ 	shared/matrix.h					\
+@@ -169,7 +170,10 @@ nodist_libweston_@LIBWESTON_MAJOR@_la_SOURCES =				\
+ 	protocol/input-timestamps-unstable-v1-protocol.c		\
+ 	protocol/input-timestamps-unstable-v1-server-protocol.h		\
+ 	protocol/weston-touch-calibration-protocol.c			\
+-	protocol/weston-touch-calibration-server-protocol.h
++	protocol/weston-touch-calibration-server-protocol.h  \
++	protocol/pointer-constraints-unstable-v1-server-protocol.h	\
++	protocol/weston-configure-mtk-protocol.c	\
++	protocol/weston-configure-mtk-server-protocol.h
+ 
+ BUILT_SOURCES += $(nodist_libweston_@LIBWESTON_MAJOR@_la_SOURCES)
+ 
+@@ -652,6 +656,19 @@ weston_simple_dmabuf_v4l_CFLAGS = $(AM_CFLAGS) $(SIMPLE_DMABUF_V4L_CLIENT_CFLAGS
+ weston_simple_dmabuf_v4l_LDADD = $(SIMPLE_DMABUF_V4L_CLIENT_LIBS) libshared.la
+ endif
+ 
++demo_clients += weston-simple-screenshooter-mtk
++weston_simple_screenshooter_mtk_SOURCES = clients/simple-screenshooter-mtk.c
++nodist_weston_simple_screenshooter_mtk_SOURCES =               \
++        protocol/xdg-shell-unstable-v6-protocol.c               \
++        protocol/xdg-shell-unstable-v6-client-protocol.h        \
++        protocol/fullscreen-shell-unstable-v1-protocol.c        \
++        protocol/fullscreen-shell-unstable-v1-client-protocol.h \
++        protocol/weston-configure-mtk-protocol.c               \
++        protocol/weston-configure-mtk-client-protocol.h
++weston_simple_screenshooter_mtk_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
++weston_simple_screenshooter_mtk_LDADD =  $(EGL_LIBS) $(LIBDRM_LIBS) libtoytoolkit.la
++
++
+ noinst_LTLIBRARIES += libtoytoolkit.la
+ 
+ libtoytoolkit_la_SOURCES =				\
+@@ -911,7 +928,9 @@ BUILT_SOURCES +=					\
+ 	protocol/tablet-unstable-v2-protocol.c		\
+ 	protocol/tablet-unstable-v2-client-protocol.h			\
+ 	protocol/input-timestamps-unstable-v1-protocol.c		\
+-	protocol/input-timestamps-unstable-v1-client-protocol.h
++	protocol/input-timestamps-unstable-v1-client-protocol.h \
++	protocol/weston-configure-mtk-protocol.c		\
++	protocol/weston-configure-mtk-client-protocol.h
+ 
+ westondatadir = $(datadir)/weston
+ dist_westondata_DATA =				\
+@@ -1564,7 +1583,8 @@ EXTRA_DIST +=					\
+ 	protocol/weston-test.xml		\
+ 	protocol/weston-touch-calibration.xml	\
+ 	protocol/ivi-application.xml		\
+-	protocol/ivi-hmi-controller.xml
++	protocol/ivi-hmi-controller.xml  \
++	protocol/weston-configure-mtk.xml
+ 
+ #
+ # manual test modules in tests subdirectory
+diff --git a/clients/simple-screenshooter-mtk.c b/clients/simple-screenshooter-mtk.c
+new file mode 100644
+index 0000000..cbca18b
+--- /dev/null
++++ b/clients/simple-screenshooter-mtk.c
+@@ -0,0 +1,259 @@
++/*
++ * Copyright © 2008 Kristian Høgsberg
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ */
++
++#include "config.h"
++
++#include <stdint.h>
++#include <errno.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <string.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <limits.h>
++#include <sys/param.h>
++#include <sys/mman.h>
++#include <cairo.h>
++
++#include <wayland-client.h>
++#include "weston-configure-mtk-client-protocol.h"
++#include "shared/os-compatibility.h"
++#include "shared/xalloc.h"
++
++/* The screenshooter is a good example of a custom object exposed by
++ * the compositor and serves as a test bed for implementing client
++ * side marshalling outside libwayland.so */
++
++static struct wl_shm *shm;
++static struct weston_screenshooter_mtk *mtk_screenshooter;
++static struct wl_list output_list;
++int min_x, min_y, max_x, max_y;
++int buffer_copy_done;
++
++struct screenshooter_output {
++	struct wl_output *output;
++	struct wl_buffer *buffer;
++	int width, height, offset_x, offset_y;
++	void *data;
++	struct wl_list link;
++};
++
++static void
++display_handle_geometry(void *data,
++			struct wl_output *wl_output,
++			int x,
++			int y,
++			int physical_width,
++			int physical_height,
++			int subpixel,
++			const char *make,
++			const char *model,
++			int transform)
++{
++	struct screenshooter_output *output;
++
++	output = wl_output_get_user_data(wl_output);
++
++	if (wl_output == output->output) {
++		output->offset_x = x;
++		output->offset_y = y;
++	}
++}
++
++static void
++display_handle_mode(void *data,
++		    struct wl_output *wl_output,
++		    uint32_t flags,
++		    int width,
++		    int height,
++		    int refresh)
++{
++	struct screenshooter_output *output;
++
++	output = wl_output_get_user_data(wl_output);
++
++	if (wl_output == output->output && (flags & WL_OUTPUT_MODE_CURRENT)) {
++		output->width = width;
++		output->height = height;
++	}
++}
++
++static const struct wl_output_listener output_listener = {
++	display_handle_geometry,
++	display_handle_mode
++};
++
++static void
++screenshooter_done(void *data, struct weston_screenshooter_mtk *mtk_screenshooter)
++{
++	fprintf(stderr, "screenshooter_done\n");
++	buffer_copy_done = 1;
++}
++
++static const struct weston_screenshooter_mtk_listener screenshooter_mtk_listener =
++{
++	screenshooter_done
++};
++
++static void
++handle_global(void *data, struct wl_registry *registry,
++	      uint32_t name, const char *interface, uint32_t version)
++{
++	static struct screenshooter_output *output;
++
++	if (strcmp(interface, "wl_output") == 0) {
++		output = xmalloc(sizeof *output);
++		output->output = wl_registry_bind(registry, name,
++						  &wl_output_interface, 1);
++		wl_list_insert(&output_list, &output->link);
++		wl_output_add_listener(output->output, &output_listener, output);
++	} else if (strcmp(interface, "wl_shm") == 0) {
++		shm = wl_registry_bind(registry, name, &wl_shm_interface, 1);
++	} else if (strcmp(interface, "weston_screenshooter_mtk") == 0) {
++		mtk_screenshooter = wl_registry_bind(registry, name,
++						 &weston_screenshooter_mtk_interface,
++						 1);
++	}
++}
++
++static void
++handle_global_remove(void *data, struct wl_registry *registry, uint32_t name)
++{
++	/* XXX: unimplemented */
++}
++
++static const struct wl_registry_listener registry_listener = {
++	handle_global,
++	handle_global_remove
++};
++
++static struct wl_buffer *
++create_shm_buffer(int width, int height, void **data_out)
++{
++	struct wl_shm_pool *pool;
++	struct wl_buffer *buffer;
++	int fd, size, stride;
++	void *data;
++
++	stride = width * 4;
++	size = stride * height;
++
++	fd = os_create_anonymous_file(size);
++	if (fd < 0) {
++		fprintf(stderr, "creating a buffer file for %d B failed: %m\n",
++			size);
++		return NULL;
++	}
++
++	data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
++	if (data == MAP_FAILED) {
++		fprintf(stderr, "mmap failed: %m\n");
++		close(fd);
++		return NULL;
++	}
++
++	pool = wl_shm_create_pool(shm, fd, size);
++	close(fd);
++	buffer = wl_shm_pool_create_buffer(pool, 0, width, height, stride,
++					   WL_SHM_FORMAT_XRGB8888);
++	wl_shm_pool_destroy(pool);
++
++	*data_out = data;
++	fprintf(stderr,"create_shm_buffer\n");
++	return buffer;
++}
++
++static void
++usage(int error_code)
++{
++	fprintf(stderr, "Usage: simple-screenshooter-mtk [OPTIONS]\n\n"
++		"  -m        dump mainscreen\n"
++		"  -s        dump subscreen\n"
++		"  -h        This help text! default dump all screens\n\n");
++
++	exit(error_code);
++}
++
++int main(int argc, char *argv[])
++{
++	struct wl_display *display;
++	struct wl_registry *registry;
++	struct screenshooter_output *output;
++	int i, width, height;
++	int mainscreen=0;
++	int subscreen=0;
++	for (i = 1; i < argc; i++) {
++		if (strcmp("-m", argv[i]) == 0)
++			mainscreen = 1;
++		else if (strcmp("-s", argv[i]) == 0)
++			subscreen = 1;
++		else if (strcmp("-h", argv[i]) == 0)
++			usage(EXIT_SUCCESS);
++		else
++			usage(EXIT_SUCCESS);
++	}
++
++	display = wl_display_connect(NULL);
++	if (display == NULL) {
++		fprintf(stderr, "failed to create display: %m\n");
++		return -1;
++	}
++
++	wl_list_init(&output_list);
++	registry = wl_display_get_registry(display);
++	wl_registry_add_listener(registry, &registry_listener, NULL);
++	wl_display_dispatch(display);
++	wl_display_roundtrip(display);
++	if (mtk_screenshooter == NULL) {
++		fprintf(stderr, "display doesn't support screenshooter\n");
++		return -1;
++	}
++
++	weston_screenshooter_mtk_add_listener(mtk_screenshooter,
++					  &screenshooter_mtk_listener,
++					  NULL);
++
++	wl_list_for_each_reverse(output, &output_list, link) {
++		if(mainscreen == 1) {
++			output->buffer = create_shm_buffer(1920, 1080, &output->data);
++			weston_screenshooter_mtk_shoot(mtk_screenshooter,output->output,output->buffer);
++			buffer_copy_done = 0;
++			while (!buffer_copy_done)
++				wl_display_roundtrip(display);
++
++			break;
++		}
++		else if(subscreen == 1) {
++			subscreen = 0;
++		}
++		else {
++			output->buffer = create_shm_buffer(1920, 1080, &output->data);
++			weston_screenshooter_mtk_shoot(mtk_screenshooter,output->output,output->buffer);
++			buffer_copy_done = 0;
++			while (!buffer_copy_done)
++				wl_display_roundtrip(display);
++		}
++	}
++	fprintf(stderr,"end!!!!!\n");
++	return 0;
++}
+diff --git a/libweston/compositor.c b/libweston/compositor.c
+index 9deb781..fdf5d25 100644
+--- a/libweston/compositor.c
++++ b/libweston/compositor.c
+@@ -2756,6 +2756,9 @@ weston_output_schedule_repaint(struct weston_output *output)
+ 	    compositor->state == WESTON_COMPOSITOR_OFFSCREEN)
+ 		return;
+ 
++	if(output->screenshoot_needed)
++		output->screenshoot_dump = 1;
++
+ 	if (!output->repaint_needed)
+ 		TL_POINT("core_repaint_req", TLP_OUTPUT(output), TLP_END);
+ 
+diff --git a/libweston/compositor.h b/libweston/compositor.h
+index 8b7a102..8736691 100644
+--- a/libweston/compositor.h
++++ b/libweston/compositor.h
+@@ -238,6 +238,9 @@ struct weston_output {
+ 		REPAINT_AWAITING_COMPLETION, /**< last repaint not yet finished */
+ 	} repaint_status;
+ 
++	int screenshoot_needed;
++	int screenshoot_dump;
++
+ 	/** If repaint_status is REPAINT_SCHEDULED, contains the time the
+ 	 *  next repaint should be run */
+ 	struct timespec next_repaint;
+diff --git a/libweston/pixel-formats.c b/libweston/pixel-formats.c
+index df84a9f..b45db93 100644
+--- a/libweston/pixel-formats.c
++++ b/libweston/pixel-formats.c
+@@ -145,6 +145,8 @@ static const struct pixel_format_info pixel_format_table[] = {
+ 	},
+ 	{
+ 		.format = DRM_FORMAT_RGB888,
++		.depth = 24,
++		.bpp = 24,
+ 	},
+ 	{
+ 		.format = DRM_FORMAT_BGR888,
+diff --git a/libweston/weston-screenshooter-mtk.c b/libweston/weston-screenshooter-mtk.c
+new file mode 100644
+index 0000000..7ad8f97
+--- /dev/null
++++ b/libweston/weston-screenshooter-mtk.c
+@@ -0,0 +1,129 @@
++/*
++ * Copyright © 2008-2011 Kristian Høgsberg
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * "Software"), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial
++ * portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
++ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
++ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
++ * SOFTWARE.
++ */
++
++#include "config.h"
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <string.h>
++#include <linux/input.h>
++#include <fcntl.h>
++#include <unistd.h>
++#include <sys/uio.h>
++
++#include "compositor.h"
++#include "weston-configure-mtk-server-protocol.h"
++#include "shared/helpers.h"
++
++#include "wcap/wcap-decode.h"
++
++struct screenshooter {
++	struct weston_compositor *ec;
++	struct wl_global *global;
++	struct wl_client *client;
++	//struct weston_process process;
++	struct wl_listener destroy_listener;
++};
++
++struct screenshooter_frame_listener {
++	struct wl_listener listener;
++	struct weston_buffer *buffer;
++	weston_screenshooter_done_func_t done;
++	void *data;
++};
++
++static void
++weston_screenshooter_mtk_shoot(struct wl_client *client,
++		    struct wl_resource *resource,
++		    struct wl_resource *output_resource,
++		    struct wl_resource *buffer_resource)
++{
++	struct weston_output *output =
++		wl_resource_get_user_data(output_resource);
++	struct weston_buffer *buffer =
++		weston_buffer_from_resource(buffer_resource);
++	weston_log("weston_screenshooter_mtk_shoot.\n");
++	output->screenshoot_needed = 1;
++	weston_output_schedule_repaint(output);
++	if (buffer == NULL) {
++		wl_resource_post_no_memory(resource);
++		return;
++	}
++
++	weston_screenshooter_mtk_send_done(resource);
++}
++
++static const struct weston_screenshooter_mtk_interface screenshooter_mtk_implementation = {
++	weston_screenshooter_mtk_shoot
++};
++
++static void
++bind_screenshooter_mtk(struct wl_client *client,
++	     void *data, uint32_t version, uint32_t id)
++{
++	struct screenshooter *shooter = data;
++	struct wl_resource *resource;
++
++	resource = wl_resource_create(client,
++				      &weston_screenshooter_mtk_interface, 1, id);
++
++	if (resource == NULL) {
++		wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT,
++			       "screenshooter failed: permission denied");
++		wl_client_post_no_memory(client);
++		return;
++	}
++
++	wl_resource_set_implementation(resource, &screenshooter_mtk_implementation,
++				       data, NULL);
++}
++
++static void
++screenshooter_destroy(struct wl_listener *listener, void *data)
++{
++	struct screenshooter *shooter =
++		container_of(listener, struct screenshooter, destroy_listener);
++
++	wl_global_destroy(shooter->global);
++	free(shooter);
++}
++
++WL_EXPORT void
++screenshooter_mtk_create(struct weston_compositor *ec)
++{
++	struct screenshooter *shooter;
++
++	shooter = malloc(sizeof *shooter);
++	if (shooter == NULL)
++		return;
++
++	shooter->ec = ec;
++	shooter->global = wl_global_create(ec->wl_display,
++					   &weston_screenshooter_mtk_interface, 1,
++					   shooter, bind_screenshooter_mtk);
++
++	shooter->destroy_listener.notify = screenshooter_destroy;
++	wl_signal_add(&ec->destroy_signal, &shooter->destroy_listener);
++}
+diff --git a/protocol/weston-configure-mtk.xml b/protocol/weston-configure-mtk.xml
+new file mode 100644
+index 0000000..120e904
+--- /dev/null
++++ b/protocol/weston-configure-mtk.xml
+@@ -0,0 +1,66 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<protocol name="weston_configure_mtk">
++
++  <copyright>
++    Copyright (C) 2016 MediaTek
++
++    Permission is hereby granted, free of charge, to any person obtaining a
++    copy of this software and associated documentation files (the "Software"),
++    to deal in the Software without restriction, including without limitation
++    the rights to use, copy, modify, merge, publish, distribute, sublicense,
++    and/or sell copies of the Software, and to permit persons to whom the
++    Software is furnished to do so, subject to the following conditions:
++
++    The above copyright notice and this permission notice (including the next
++    paragraph) shall be included in all copies or substantial portions of the
++    Software.
++
++    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
++    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++    DEALINGS IN THE SOFTWARE.
++  </copyright>
++
++  <interface name="weston_screenshooter_mtk" version="1">
++    <request name="shoot">
++      <arg name="output" type="object" interface="wl_output"/>
++      <arg name="buffer" type="object" interface="wl_buffer"/>
++    </request>
++    <event name="done">
++    </event>
++  </interface>
++
++  <interface name="config_switch_set" version="1">
++    <description summary="app interface for setting configure for the surface"/>
++
++    <request name="sprite_switch">
++      <description summary="setting the surface configure">
++       This set view matched with the surface to show in overlay plane if
++       overlay planes are available.Otherwise, it walk primary plane to
++       render, and then send to drm to show.
++      </description>
++	  <arg name="sprite_switch" type="int"/>
++    </request>
++  </interface>
++
++  <interface name="config_switch" version="1">
++    <description summary="create app configure path for setting parameter">
++      This interface is exposed as a global singleton.
++      This interface is implemented by server, it mainly provide channel to allow
++      client to control some properties.
++    </description>
++
++    <request name="connect">
++      <description summary="connect to server for setting parameter">
++        This request gives client way to connect server.In fact, parameters set by
++        app all through wl_surface because this is only way can be transmit by app.
++      </description>
++      <arg name="surface" type="object" interface="wl_surface" allow-null="true"/>
++      <arg name="id" type="new_id" interface="config_switch_set"/>
++    </request>
++  </interface>
++
++</protocol>
+-- 
+2.6.4
+
diff --git a/debian/patches/0007-PATCH-weston-add-mtk-test-client.patch b/debian/patches/0007-PATCH-weston-add-mtk-test-client.patch
new file mode 100644
index 0000000..35ec67a
--- /dev/null
+++ b/debian/patches/0007-PATCH-weston-add-mtk-test-client.patch
@@ -0,0 +1,1306 @@
+From 62628502047672c190fadc3f98caf427df25dfe6 Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Tue, 24 Sep 2019 14:31:26 +0800
+Subject: [PATCH 7/8] [PATCH] weston: add mtk test client
+
+add mtk test client
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ Makefile.am                    |   14 +
+ clients/simple-configure-mtk.c | 1247 ++++++++++++++++++++++++++++++++++++++++
+ configure.ac                   |    1 +
+ 3 files changed, 1262 insertions(+)
+ create mode 100644 clients/simple-configure-mtk.c
+
+diff --git a/Makefile.am b/Makefile.am
+index a9e48f8..7efa5a0 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -668,6 +668,20 @@ nodist_weston_simple_screenshooter_mtk_SOURCES =               \
+ weston_simple_screenshooter_mtk_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
+ weston_simple_screenshooter_mtk_LDADD =  $(EGL_LIBS) $(LIBDRM_LIBS) libtoytoolkit.la
+ 
++if BUILD_SIMPLE_CONFIGURE_MTK_CLIENT
++demo_clients += weston-simple-configure-mtk
++weston_simple_configure_mtk_SOURCES = clients/simple-configure-mtk.c
++nodist_weston_simple_configure_mtk_SOURCES =               \
++        protocol/xdg-shell-unstable-v6-protocol.c               \
++        protocol/xdg-shell-unstable-v6-client-protocol.h        \
++        protocol/fullscreen-shell-unstable-v1-protocol.c        \
++        protocol/fullscreen-shell-unstable-v1-client-protocol.h \
++        protocol/linux-dmabuf-unstable-v1-protocol.c		\
++        protocol/linux-dmabuf-unstable-v1-client-protocol.h
++weston_simple_configure_mtk_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
++weston_simple_configure_mtk_LDADD =  $(EGL_LIBS) $(LIBDRM_LIBS) libtoytoolkit.la
++BUILT_SOURCES += protocol/linux-dmabuf-unstable-v1-client-protocol.h
++endif
+ 
+ noinst_LTLIBRARIES += libtoytoolkit.la
+ 
+diff --git a/clients/simple-configure-mtk.c b/clients/simple-configure-mtk.c
+new file mode 100644
+index 0000000..8b146ff
+--- /dev/null
++++ b/clients/simple-configure-mtk.c
+@@ -0,0 +1,1245 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <stdbool.h>
++#include <math.h>
++#include <assert.h>
++#include <sys/mman.h>
++#include <signal.h>
++#include <fcntl.h>
++#include <errno.h>
++#include <linux/input.h>
++
++#include <wayland-client.h>
++#include <wayland-cursor.h>
++
++#include <drm_fourcc.h>
++#include <xf86drm.h>
++#include <xf86drmMode.h>
++
++#include <sys/types.h>
++#include <unistd.h>
++
++//#include "ivi-application-client-protocol.h"
++#include "xdg-shell-unstable-v6-client-protocol.h"
++#include "linux-dmabuf-unstable-v1-client-protocol.h"
++#include "fullscreen-shell-unstable-v1-client-protocol.h"
++#include "weston-configure-mtk-client-protocol.h"
++
++#include <shared/platform.h>
++
++//#define IVI_SURFACE_ID 9000
++#define MAX_IMAGE 16
++#define ALIGN(X,bit) ((X + bit-1) & (~(bit-1)))
++#define MAX_DMABUF_PLANES 4
++#define RES_NUM 4
++#define MAX_LEN 60
++
++struct window;
++struct seat;
++
++struct display {
++	struct wl_display *display;
++	struct wl_registry *registry;
++	struct wl_compositor *compositor;
++	struct zxdg_shell_v6 *shell;
++	struct zwp_fullscreen_shell_v1 *fshell;
++	//struct ivi_application *ivi_application;
++	struct wl_seat *seat;
++	struct wl_pointer *pointer;
++	struct wl_touch *touch;
++	struct wl_keyboard *keyboard;
++	struct wl_shm *shm;
++	struct zwp_linux_dmabuf_v1 *dmabuf;
++	struct wl_list output_list; /* struct output_unit::link */
++	struct wl_cursor_theme *cursor_theme;
++	struct wl_cursor *default_cursor;
++	struct wl_surface *cursor_surface;
++	struct window *window;
++	struct config_switch *config_switch;
++};
++
++struct geometry {
++	int width, height;
++};
++
++struct buffer {
++	struct wl_buffer *buffer;
++	void *dma_map;
++	int busy;
++};
++
++struct file_arg{
++	char filename[MAX_LEN];
++	int width;
++	int height;
++	int format;
++};
++
++struct window {
++	struct display *display;
++	struct geometry geometry, window_size;
++   bool wait_for_configure;
++	struct {
++		struct file_arg fProp;
++		struct buffer out_bufs[RES_NUM];
++	} image;
++	struct img_texture *tex;
++	uint32_t benchmark_time, frames;
++	struct wl_surface *surface;
++	struct zxdg_surface_v6 *xdg_surface;
++	struct zxdg_toplevel_v6 *xdg_toplevel;
++	//struct ivi_surface *ivi_surface;
++	struct wl_callback *callback;
++	int fullscreen, opaque, buffer_size, overlay, format;
++	enum wl_output_transform transform;
++	int drm_card_fd;
++	struct config_switch_set *switch_set;
++};
++
++struct img_texture {
++	struct context *ctx;
++
++	/* input */
++	int width;
++	int height;
++	int drm_format;
++	int bpp;
++	int plane_nums;
++
++	int pitch[MAX_DMABUF_PLANES];
++	int offset[MAX_DMABUF_PLANES];
++	int fds[MAX_DMABUF_PLANES];
++	int handle[MAX_DMABUF_PLANES];
++
++	void *texbuf;
++	int size;
++};
++
++typedef enum _IMG_FORMAT_E {
++	IMG_FORMAT_RGB565 = 0,
++	IMG_FORMAT_XRGB8888,
++	IMG_FORMAT_ARGB8888,
++	IMG_FORMAT_YUYV,
++	IMG_FORMAT_NV12,
++	IMG_FORMAT_NV16,
++	IMG_FORMAT_YUV420,
++	IMG_FORMAT_YVU420,
++	IMG_FORMAT_LAST,
++} IMG_FORMAT_T;
++
++struct drm_fourcc_info {
++	unsigned int drm_format;
++	int plane_cnt;
++	int bpp;
++};
++
++static struct drm_fourcc_info fourcc_tbl[] = {
++	{DRM_FORMAT_RGB565, 1, 16},
++	{DRM_FORMAT_RGBA5551, 1, 16},
++	{DRM_FORMAT_RGBA4444, 1, 16},
++	{DRM_FORMAT_XRGB8888, 1, 32},
++	{DRM_FORMAT_XBGR8888, 1, 32},
++	{DRM_FORMAT_RGBX8888, 1, 32},
++	{DRM_FORMAT_BGRX8888, 1, 32},
++	{DRM_FORMAT_ARGB8888, 1, 32},
++	{DRM_FORMAT_ABGR8888, 1, 32},
++	{DRM_FORMAT_RGBA8888, 1, 32},
++	{DRM_FORMAT_BGRA8888, 1, 32},
++	{DRM_FORMAT_YUYV, 1, 16},
++	{DRM_FORMAT_VYUY, 1, 16},
++	{DRM_FORMAT_NV12, 2, 12},
++	{DRM_FORMAT_NV21, 2, 12},
++	{DRM_FORMAT_NV16, 2, 16},
++	{DRM_FORMAT_NV61, 2, 16},
++	{DRM_FORMAT_YUV420, 3, 12},
++	{DRM_FORMAT_YVU420, 3, 12},
++	{0, 0, 0},
++};
++
++static int running = 1;
++static int debug = 0;
++
++static void
++redraw(void *data, struct wl_callback *callback, uint32_t time);
++
++static int _format_transfer(int format, int *drm_format)
++{
++	int new_format;
++
++	if (!drm_format)
++		return -1;
++
++	switch (format) {
++		case IMG_FORMAT_RGB565:
++			new_format = DRM_FORMAT_RGB565;
++			break;
++		case IMG_FORMAT_XRGB8888:
++			new_format = DRM_FORMAT_XRGB8888;
++			break;
++		case IMG_FORMAT_ARGB8888:
++			new_format = DRM_FORMAT_ARGB8888;
++			break;
++		case IMG_FORMAT_YUYV:
++			new_format = DRM_FORMAT_YUYV;
++			break;
++		case IMG_FORMAT_NV12:
++			new_format = DRM_FORMAT_NV12;
++			break;
++		case IMG_FORMAT_NV16:
++			new_format = DRM_FORMAT_NV16;
++			break;
++		case IMG_FORMAT_YUV420:
++			new_format = DRM_FORMAT_YUV420;
++			break;
++		case IMG_FORMAT_YVU420:
++			new_format = DRM_FORMAT_YVU420;
++			break;
++		default:
++			return -2;
++	}
++	*drm_format = new_format;
++
++	return 0;
++}
++
++static struct drm_fourcc_info *
++get_drm_format_info(unsigned int format)
++{
++	int i;
++
++	for (i = 0; ; i++) {
++		if ( format == fourcc_tbl[i].drm_format){
++			return &fourcc_tbl[i];
++		}
++		if ( fourcc_tbl[i].drm_format == 0)
++			break;
++	}
++	return NULL;
++}
++
++static char *
++_get_tex_resource(int drifd, struct img_texture *tex)
++{
++    void *map = NULL;
++    struct drm_mode_create_dumb create_arg;
++    struct drm_mode_map_dumb map_arg;
++    struct drm_prime_handle prime_arg;
++    struct drm_fourcc_info *format_info;
++    int i, ret;
++    unsigned int alloc_size;
++
++    memset(&create_arg, 0, sizeof(create_arg));
++    memset(&map_arg, 0, sizeof(map_arg));
++    memset(&prime_arg, 0, sizeof(prime_arg));
++
++	for(i = 0; i < MAX_DMABUF_PLANES; i ++ )
++	    tex->fds[i] = -1;
++
++	format_info = get_drm_format_info(tex->drm_format);
++	if (format_info == NULL)
++		return NULL;
++
++	tex->bpp = format_info->bpp;
++	if (format_info->plane_cnt == 3) {
++		if (format_info->bpp == 12) {
++			tex->pitch[0] = ALIGN(tex->width, 16);
++			tex->pitch[1] = tex->pitch[0] / 2;
++			tex->pitch[2] = tex->pitch[0] / 2;
++			tex->offset[0] = 0;
++			tex->offset[1] = tex->pitch[0] * tex->height;
++			tex->offset[2] = tex->offset[1] + tex->pitch[1] * tex->height / 2;
++			alloc_size = tex->offset[2] + tex->pitch[2] * tex->height / 2;
++		} else {
++			fprintf(stderr,"debug: please add new format 0x%x\n", tex->drm_format);
++			return NULL;
++		}
++	} else if (format_info->plane_cnt == 2) {
++		tex->pitch[0] = ALIGN(tex->width, 16);
++		tex->offset[0] = 0;
++		if (format_info->bpp == 16) {
++			tex->pitch[1] = tex->pitch[0];
++			tex->offset[1] = tex->pitch[0] * tex->height;
++			alloc_size = tex->offset[1] + tex->pitch[1] * tex->height;
++			fprintf(stderr,"debug:  %s %d alloc_size = %d o/p [%d %d]\n",
++				__FUNCTION__, __LINE__, alloc_size, tex->offset[1], tex->pitch[1]);
++		}
++		else if (format_info->bpp == 12) {
++			tex->pitch[1] = tex->pitch[0] / 2;
++			tex->offset[1] = tex->pitch[0] * tex->height;
++			alloc_size = tex->offset[1] + tex->pitch[1] * tex->height;
++		} else {
++			fprintf(stderr,"debug: please add new format 0x%x\n", tex->drm_format);
++			return NULL;
++		}
++	} else {
++		tex->pitch[0] = ALIGN(tex->width * tex->bpp / 8, 16);
++		tex->offset[0] = 0;
++		alloc_size = tex->pitch[0] * tex->height;
++	}
++
++	create_arg.bpp = 8;
++	create_arg.width = alloc_size;
++	create_arg.height = 1;
++
++    ret = drmIoctl(drifd, DRM_IOCTL_MODE_CREATE_DUMB, &create_arg);
++    if (ret) {
++            fprintf(stderr,"error: drmIoctl %d DRM_IOCTL_MODE_CREATE_DUMB fail %d\n", drifd, ret);
++            return NULL;
++    }
++
++    map_arg.handle = create_arg.handle;
++
++    ret = drmIoctl(drifd, DRM_IOCTL_MODE_MAP_DUMB, &map_arg);
++    if (ret) {
++            fprintf(stderr,"error: drmIoctl DRM_IOCTL_MODE_MAP_DUMB fail %d\n", ret);
++            return NULL;
++    }
++
++    map = mmap(0, create_arg.size, PROT_WRITE|PROT_READ , MAP_SHARED, drifd, map_arg.offset);
++    if (map == MAP_FAILED) {
++            fprintf(stderr,"error: mmap fail : %p\n", map);
++            return NULL;
++    }
++
++    prime_arg.handle = create_arg.handle;
++    prime_arg.flags = DRM_CLOEXEC;
++    ret = drmIoctl(drifd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &prime_arg);
++    if (ret || prime_arg.fd == -1) {
++            fprintf(stderr,"error: drmIoctl DRM_IOCTL_PRIME_HANDLE_TO_FD fail %d fd=%d\n",ret,prime_arg.fd);
++            return NULL;
++    }
++
++	for (i = 0; i < format_info->plane_cnt; i++) {
++		tex->fds[i] = prime_arg.fd;
++		tex->handle[i] = create_arg.handle;
++	}
++	tex->plane_nums = format_info->plane_cnt;
++	tex->texbuf = map;
++	tex->size = create_arg.size;
++
++	return map;
++}
++
++static int
++init_img_texture(struct window *window)
++{
++	int ret;
++	struct img_texture *tex;
++	tex = malloc(sizeof *tex);
++	if (tex == NULL)
++		return -1;
++
++	ret = _format_transfer(window->image.fProp.format, &(tex->drm_format));
++	if (ret < 0)
++		return -1;
++
++	tex->width = window->image.fProp.width;
++	tex->height= window->image.fProp.height;
++
++	window->tex = tex;
++	return 0;
++}
++
++static void
++buffer_release(void *data, struct wl_buffer *buffer)
++{
++	struct buffer *mybuf = data;
++
++	mybuf->busy = 0;
++}
++
++static const struct wl_buffer_listener buffer_listener = {
++	buffer_release
++};
++
++static void
++create_succeeded(void *data,
++		 struct zwp_linux_buffer_params_v1 *params,
++		 struct wl_buffer *new_buffer)
++{
++	struct buffer *buffer = data;
++
++	buffer->buffer = new_buffer;
++	wl_buffer_add_listener(buffer->buffer, &buffer_listener, buffer);
++
++	zwp_linux_buffer_params_v1_destroy(params);
++}
++
++static void
++create_failed(void *data, struct zwp_linux_buffer_params_v1 *params)
++{
++	struct buffer *buffer = data;
++
++	buffer->buffer = NULL;
++
++	zwp_linux_buffer_params_v1_destroy(params);
++
++	running = false;
++
++	fprintf(stderr, "Error: zwp_linux_buffer_params.create failed.\n");
++}
++
++static const struct zwp_linux_buffer_params_v1_listener params_listener = {
++	create_succeeded,
++	create_failed
++};
++
++static int
++create_dmabuf_buffer(struct display *display, struct buffer *buffer)
++{
++	struct zwp_linux_buffer_params_v1 *params;
++	struct img_texture *cbtex = display->window->tex;
++	uint64_t modifier;
++	uint32_t flags;
++	int i;
++	/* output */
++	buffer->dma_map = _get_tex_resource(display->window->drm_card_fd, cbtex);
++
++	if (buffer->dma_map == NULL) {
++		fprintf(stderr, "error: _get_tex_resource failed\n");
++		return -1;
++	}
++
++	modifier = 0;
++	params = zwp_linux_dmabuf_v1_create_params(display->dmabuf);
++
++	for(i = 0; i < cbtex->plane_nums; i ++)
++	{
++		zwp_linux_buffer_params_v1_add(params,
++				cbtex->fds[i],
++				i, /* plane_idx */
++				cbtex->offset[i],/* offset */
++				cbtex->pitch[i],
++				modifier >> 32,
++				modifier & 0xffffffff);
++	}
++	zwp_linux_buffer_params_v1_add_listener(params, &params_listener, buffer);
++	zwp_linux_buffer_params_v1_create(params,
++				    cbtex->width,
++				    cbtex->height,
++				    cbtex->drm_format,
++				    flags);
++
++	/* params is destroyed by the event handlers */
++	wl_display_roundtrip(display->display);
++	if (buffer->buffer == NULL) {
++		return -1;
++	}
++
++	return 0;
++}
++
++static int
++_load_file(void *buf, int len, const char *file_name)
++{
++    int ret, nread = 0;
++
++    FILE *fp = fopen(file_name, "rb");
++    if (!fp)
++    {
++        fprintf(stderr,"debug: file %s open failed\n", file_name);
++        return -1;
++    }
++
++    while (nread < len) {
++        ret = fread(buf + nread, 1, len - nread, fp);
++        if (!ret)
++                break;
++        nread += ret;
++    }
++
++    fclose(fp);
++    return 0;
++}
++
++static int
++_kms_device_fd(void)
++{
++    int i;
++    bool has_conn = false;
++    for (i = 0; i < 8; ++i) {
++        char path[99];
++        sprintf(path, "/dev/dri/card%d", i);
++        fprintf(stderr, "debug: trying %s\n", path);
++        int fd = open(path, O_RDWR | O_CLOEXEC);
++        if (fd >= 0) {
++            drmModeResPtr mr = drmModeGetResources(fd);
++            if (mr) {
++                has_conn = mr->count_connectors > 0;
++                drmModeFreeResources(mr);
++            }
++            if (has_conn) {
++                fprintf(stderr, "debug: using %s\n", path);
++                return fd;
++            }
++            close(fd);
++        }
++    }
++    return -1;
++}
++
++static void
++handle_xdg_surface_configure(void *data, struct zxdg_surface_v6 *surface,
++			     uint32_t serial)
++{
++	struct window *window = data;
++	fprintf(stderr, "handle_xdg_surface_configure\n");
++
++	zxdg_surface_v6_ack_configure(surface, serial);
++
++	if (window->wait_for_configure) {
++		redraw(window, NULL, 0);
++		window->wait_for_configure = false;
++	}
++}
++
++static const struct zxdg_surface_v6_listener xdg_surface_listener = {
++	handle_xdg_surface_configure,
++};
++
++
++static void
++handle_toplevel_configure(void *data, struct zxdg_toplevel_v6 *toplevel,
++			  int32_t width, int32_t height,
++			  struct wl_array *states)
++{
++	struct window *window = data;
++	uint32_t *p;
++
++	window->fullscreen = 0;
++	wl_array_for_each(p, states) {
++		uint32_t state = *p;
++		switch (state) {
++		case ZXDG_TOPLEVEL_V6_STATE_FULLSCREEN:
++			window->fullscreen = 1;
++			break;
++		}
++	}
++
++	if (width > 0 && height > 0) {
++		if (!window->fullscreen) {
++			window->window_size.width = width;
++			window->window_size.height = height;
++		}
++		window->geometry.width = width;
++		window->geometry.height = height;
++	} else if (!window->fullscreen) {
++		window->geometry = window->window_size;
++	}
++
++	/*if (window->native)
++		wl_egl_window_resize(window->native,
++				     window->geometry.width,
++				     window->geometry.height, 0, 0);*/
++}
++
++static void
++handle_toplevel_close(void *data, struct zxdg_toplevel_v6 *xdg_toplevel)
++{
++	running = 0;
++}
++
++static const struct zxdg_toplevel_v6_listener xdg_toplevel_listener = {
++	handle_toplevel_configure,
++	handle_toplevel_close,
++};
++/*
++static void
++handle_ivi_surface_configure(void *data, struct ivi_surface *ivi_surface,
++                             int32_t width, int32_t height)
++{
++
++}
++
++static const struct ivi_surface_listener ivi_surface_listener = {
++	handle_ivi_surface_configure,
++};
++*/
++static struct buffer *
++window_next_buffer(struct window *window)
++{
++	struct buffer *buffer = NULL;
++	int i, ret = 0;
++
++	for(i = 0; i < RES_NUM; i++) {
++		if (!window->image.out_bufs[i].busy) {
++			buffer = &window->image.out_bufs[i];
++			break;
++		}
++	}
++
++	if (!buffer)
++		return NULL;
++
++	if (!buffer->buffer) {
++		ret = create_dmabuf_buffer(window->display, buffer);
++		if (ret < 0)
++			return NULL;
++		if(i%2)
++			_load_file(buffer->dma_map, window->tex->size, window->image.fProp.filename);
++		else
++			memset(buffer->dma_map, 0, window->tex->size);
++	}
++
++	return buffer;
++}
++
++static void
++create_surface(struct window *window)
++{
++	struct display *display = window->display;
++
++	window->surface = wl_compositor_create_surface(display->compositor);
++	display->cursor_surface =
++		wl_compositor_create_surface(display->compositor);
++
++	window->switch_set = config_switch_connect(display->config_switch, window->surface);
++
++	if (display->shell) {
++		window->xdg_surface =
++			zxdg_shell_v6_get_xdg_surface(display->shell,
++			                          window->surface);
++
++		assert(window->xdg_surface);
++
++		zxdg_surface_v6_add_listener(window->xdg_surface,
++		                         &xdg_surface_listener, window);
++
++		window->xdg_toplevel =
++			zxdg_surface_v6_get_toplevel(window->xdg_surface);
++			zxdg_toplevel_v6_add_listener(window->xdg_toplevel,
++				      &xdg_toplevel_listener, window);
++
++		zxdg_toplevel_v6_set_title(window->xdg_toplevel, "simple-configure-mtk");
++		window->wait_for_configure = true;
++		wl_surface_commit(window->surface);
++	} else if (display->fshell) {
++		zwp_fullscreen_shell_v1_present_surface(display->fshell,
++		                                        window->surface,
++		                                        ZWP_FULLSCREEN_SHELL_V1_PRESENT_METHOD_DEFAULT,
++		                                        NULL);
++	//} else if (display->ivi_application ) {
++	//	uint32_t id_ivisurf = IVI_SURFACE_ID + (uint32_t)getpid();
++	//	window->ivi_surface =
++	//		ivi_application_surface_create(display->ivi_application,
++	//					       id_ivisurf, window->surface);
++	//	if (window->ivi_surface == NULL) {
++	//		fprintf(stderr, "Failed to create ivi_client_surface\n");
++	//		abort();
++	//	}
++//
++	//	ivi_surface_add_listener(window->ivi_surface,
++	//				 &ivi_surface_listener, window);
++
++	} else {
++		assert(0);
++	}
++
++}
++
++static void
++destroy_surface(struct window *window)
++{
++	if (window->xdg_toplevel)
++		zxdg_toplevel_v6_destroy(window->xdg_toplevel);
++	if (window->xdg_surface)
++		zxdg_surface_v6_destroy(window->xdg_surface);
++	//if (window->display->ivi_application)
++	//	ivi_surface_destroy(window->ivi_surface);
++	if (window->display->fshell)
++		zwp_fullscreen_shell_v1_release(window->display->fshell);
++	wl_surface_destroy(window->surface);
++
++	if (window->callback)
++		wl_callback_destroy(window->callback);
++
++	if (window->image.out_bufs[0].buffer)
++		wl_buffer_destroy(window->image.out_bufs[0].buffer);
++	if (window->image.out_bufs[1].buffer)
++		wl_buffer_destroy(window->image.out_bufs[1].buffer);
++	if (window->image.out_bufs[2].buffer)
++		wl_buffer_destroy(window->image.out_bufs[2].buffer);
++}
++
++static const struct wl_callback_listener frame_listener;
++
++static void
++redraw(void *data, struct wl_callback *callback, uint32_t time)
++{
++	struct window *window = data;
++	struct buffer *buffer;
++	char filename[MAX_LEN] = {0};
++	static const uint32_t benchmark_interval = 5;
++	struct wl_region *region;
++	struct timeval tv;
++	int tmp;
++
++	buffer = window_next_buffer(window);
++	if (!buffer) {
++		fprintf(stderr,
++			!callback ? "error: Failed to create the first buffer.\n" :
++			"error: Both buffers busy at redraw(). Server bug?\n");
++		abort();
++	}
++
++	gettimeofday(&tv, NULL);
++	time = tv.tv_sec * 1000 + tv.tv_usec / 1000;
++	if (window->frames == 0)
++		window->benchmark_time = time;
++	if (time - window->benchmark_time > (benchmark_interval * 1000)) {
++		printf("debug: %d frames in %d seconds: %f fps\n",
++		       window->frames,
++		       benchmark_interval,
++		       (float) window->frames / benchmark_interval);
++		window->benchmark_time = time;
++		window->frames = 0;
++	}
++
++	if (window->opaque || window->fullscreen) {
++		region = wl_compositor_create_region(window->display->compositor);
++		wl_region_add(region, 0, 0,
++			      window->geometry.width,
++			      window->geometry.height);
++		wl_surface_set_opaque_region(window->surface, region);
++		wl_region_destroy(region);
++	} else {
++		wl_surface_set_opaque_region(window->surface, NULL);
++	}
++
++	wl_surface_attach(window->surface, buffer->buffer, 0, 0);
++	wl_surface_set_buffer_transform(window->surface,
++					window->transform);
++	wl_surface_damage(window->surface,
++			  0, 0, window->geometry.width, window->geometry.height);
++
++	if (callback)
++		wl_callback_destroy(callback);
++
++	window->callback = wl_surface_frame(window->surface);
++	wl_callback_add_listener(window->callback, &frame_listener, window);
++	wl_surface_commit(window->surface);
++	buffer->busy = 1;
++
++	window->frames++;
++}
++
++static const struct wl_callback_listener frame_listener = {
++	redraw
++};
++
++static void
++pointer_handle_enter(void *data, struct wl_pointer *pointer,
++		     uint32_t serial, struct wl_surface *surface,
++		     wl_fixed_t sx, wl_fixed_t sy)
++{
++	struct display *display = data;
++	struct wl_buffer *buffer;
++	struct wl_cursor *cursor = display->default_cursor;
++	struct wl_cursor_image *image;
++
++	if (display->window->fullscreen)
++		wl_pointer_set_cursor(pointer, serial, NULL, 0, 0);
++	else if (cursor) {
++		image = display->default_cursor->images[0];
++		buffer = wl_cursor_image_get_buffer(image);
++		if (!buffer)
++			return;
++		wl_pointer_set_cursor(pointer, serial,
++				      display->cursor_surface,
++				      image->hotspot_x,
++				      image->hotspot_y);
++		wl_surface_attach(display->cursor_surface, buffer, 0, 0);
++		wl_surface_damage(display->cursor_surface, 0, 0,
++				  image->width, image->height);
++		wl_surface_commit(display->cursor_surface);
++	}
++
++}
++
++static void
++pointer_handle_leave(void *data, struct wl_pointer *pointer,
++		     uint32_t serial, struct wl_surface *surface)
++{
++}
++
++static void
++pointer_handle_motion(void *data, struct wl_pointer *pointer,
++		      uint32_t time, wl_fixed_t sx, wl_fixed_t sy)
++{
++
++}
++
++static void
++pointer_handle_button(void *data, struct wl_pointer *wl_pointer,
++		      uint32_t serial, uint32_t time, uint32_t button,
++		      uint32_t state)
++{
++	struct display *display = data;
++
++	if (!display->window->xdg_surface)
++		return;
++
++	if (button == BTN_LEFT && state == WL_POINTER_BUTTON_STATE_PRESSED)
++		zxdg_toplevel_v6_move(display->window->xdg_toplevel,
++						 display->seat, serial);
++}
++
++static void
++pointer_handle_axis(void *data, struct wl_pointer *wl_pointer,
++		    uint32_t time, uint32_t axis, wl_fixed_t value)
++{
++}
++
++static const struct wl_pointer_listener pointer_listener = {
++	pointer_handle_enter,
++	pointer_handle_leave,
++	pointer_handle_motion,
++	pointer_handle_button,
++	pointer_handle_axis,
++};
++
++static void
++touch_handle_down(void *data, struct wl_touch *wl_touch,
++		  uint32_t serial, uint32_t time, struct wl_surface *surface,
++		  int32_t id, wl_fixed_t x_w, wl_fixed_t y_w)
++{
++	struct display *d = (struct display *)data;
++
++	if (!d->shell)
++		return;
++
++	zxdg_toplevel_v6_move(d->window->xdg_toplevel, d->seat, serial);
++}
++
++static void
++touch_handle_up(void *data, struct wl_touch *wl_touch,
++		uint32_t serial, uint32_t time, int32_t id)
++{
++}
++
++static void
++touch_handle_motion(void *data, struct wl_touch *wl_touch,
++		    uint32_t time, int32_t id, wl_fixed_t x_w, wl_fixed_t y_w)
++{
++}
++
++static void
++touch_handle_frame(void *data, struct wl_touch *wl_touch)
++{
++}
++
++static void
++touch_handle_cancel(void *data, struct wl_touch *wl_touch)
++{
++}
++
++static const struct wl_touch_listener touch_listener = {
++	touch_handle_down,
++	touch_handle_up,
++	touch_handle_motion,
++	touch_handle_frame,
++	touch_handle_cancel,
++};
++
++static void
++keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
++		       uint32_t format, int fd, uint32_t size)
++{
++}
++
++static void
++keyboard_handle_enter(void *data, struct wl_keyboard *keyboard,
++		      uint32_t serial, struct wl_surface *surface,
++		      struct wl_array *keys)
++{
++}
++
++static void
++keyboard_handle_leave(void *data, struct wl_keyboard *keyboard,
++		      uint32_t serial, struct wl_surface *surface)
++{
++}
++
++static void
++keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
++		    uint32_t serial, uint32_t time, uint32_t key,
++		    uint32_t state)
++{
++	struct display *d = data;
++
++	if (!d->shell)
++		return;
++
++	if (key == KEY_F11 && state) {
++		if (d->window->fullscreen)
++			zxdg_toplevel_v6_unset_fullscreen(d->window->xdg_toplevel);
++		else
++			zxdg_toplevel_v6_set_fullscreen(d->window->xdg_toplevel, NULL);
++	} else if (key == KEY_ESC && state)
++		running = 0;
++}
++
++static void
++keyboard_handle_modifiers(void *data, struct wl_keyboard *keyboard,
++			  uint32_t serial, uint32_t mods_depressed,
++			  uint32_t mods_latched, uint32_t mods_locked,
++			  uint32_t group)
++{
++}
++
++static const struct wl_keyboard_listener keyboard_listener = {
++	keyboard_handle_keymap,
++	keyboard_handle_enter,
++	keyboard_handle_leave,
++	keyboard_handle_key,
++	keyboard_handle_modifiers,
++};
++
++static void
++seat_handle_capabilities(void *data, struct wl_seat *seat,
++			 enum wl_seat_capability caps)
++{
++	struct display *d = data;
++
++	if ((caps & WL_SEAT_CAPABILITY_POINTER) && !d->pointer) {
++		d->pointer = wl_seat_get_pointer(seat);
++		wl_pointer_add_listener(d->pointer, &pointer_listener, d);
++	} else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && d->pointer) {
++		wl_pointer_destroy(d->pointer);
++		d->pointer = NULL;
++	}
++
++	if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !d->keyboard) {
++		d->keyboard = wl_seat_get_keyboard(seat);
++		wl_keyboard_add_listener(d->keyboard, &keyboard_listener, d);
++	} else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && d->keyboard) {
++		wl_keyboard_destroy(d->keyboard);
++		d->keyboard = NULL;
++	}
++
++	if ((caps & WL_SEAT_CAPABILITY_TOUCH) && !d->touch) {
++		d->touch = wl_seat_get_touch(seat);
++		wl_touch_set_user_data(d->touch, d);
++		wl_touch_add_listener(d->touch, &touch_listener, d);
++	} else if (!(caps & WL_SEAT_CAPABILITY_TOUCH) && d->touch) {
++		wl_touch_destroy(d->touch);
++		d->touch = NULL;
++	}
++}
++
++static const struct wl_seat_listener seat_listener = {
++	seat_handle_capabilities,
++};
++
++
++static void
++xdg_shell_ping(void *data, struct zxdg_shell_v6 *shell, uint32_t serial)
++{
++	zxdg_shell_v6_pong(shell, serial);
++}
++
++static const struct zxdg_shell_v6_listener xdg_shell_listener = {
++	xdg_shell_ping,
++};
++
++static void
++dmabuf_format(void *data, struct zwp_linux_dmabuf_v1 *zwp_linux_dmabuf, uint32_t format)
++{
++	fprintf(stderr, "debug: Support drm_format 0x%x \n", format);
++}
++
++static const struct zwp_linux_dmabuf_v1_listener dmabuf_listener = {
++	dmabuf_format
++};
++
++static void
++registry_handle_global(void *data, struct wl_registry *registry,
++		       uint32_t name, const char *interface, uint32_t version)
++{
++	struct display *d = data;
++
++	if (strcmp(interface, "wl_compositor") == 0) {
++		d->compositor =
++			wl_registry_bind(registry, name,
++					 &wl_compositor_interface, 2);
++	} else if (strcmp(interface, "zxdg_shell_v6") == 0) {
++		d->shell = wl_registry_bind(registry, name,
++					    &zxdg_shell_v6_interface, 1);
++		zxdg_shell_v6_add_listener(d->shell, &xdg_shell_listener, d);
++	} else if (strcmp(interface, "wl_seat") == 0) {
++		d->seat = wl_registry_bind(registry, name,
++					   &wl_seat_interface, 1);
++		wl_seat_add_listener(d->seat, &seat_listener, d);
++	} else if (strcmp(interface, "zwp_fullscreen_shell_v1") == 0) {
++		d->fshell = wl_registry_bind(registry, name,
++					   &zwp_fullscreen_shell_v1_interface, 1);
++	} else if (strcmp(interface, "wl_shm") == 0) {
++		d->shm = wl_registry_bind(registry, name,
++					  &wl_shm_interface, 1);
++		d->cursor_theme = wl_cursor_theme_load(NULL, 32, d->shm);
++		if (!d->cursor_theme) {
++			fprintf(stderr, "unable to load default theme\n");
++			return;
++		}
++		d->default_cursor =
++			wl_cursor_theme_get_cursor(d->cursor_theme, "grabbing");
++		if (!d->default_cursor) {
++			fprintf(stderr, "unable to load default grabbing pointer\n");
++			// TODO: abort ?
++		}
++	//} else if (strcmp(interface, "ivi_application") == 0) {
++	//	d->ivi_application =
++	//		wl_registry_bind(registry, name,
++	//				 &ivi_application_interface, 1);
++	} else if (strcmp(interface, "zwp_linux_dmabuf_v1") == 0) {
++		d->dmabuf = wl_registry_bind(registry, name,
++						&zwp_linux_dmabuf_v1_interface, 1);
++		zwp_linux_dmabuf_v1_add_listener(d->dmabuf, &dmabuf_listener, d);
++	} else if (strcmp(interface, "config_switch") == 0) {
++		d->config_switch =
++			wl_registry_bind(registry, name,
++					 &config_switch_interface, 1);
++	}
++}
++
++static void
++registry_handle_global_remove(void *data, struct wl_registry *registry,
++			      uint32_t name)
++{
++}
++
++static const struct wl_registry_listener registry_listener = {
++	registry_handle_global,
++	registry_handle_global_remove
++};
++
++static void
++destroy_display(struct display *display)
++{
++	if (display->dmabuf)
++		zwp_linux_dmabuf_v1_destroy(display->dmabuf);
++
++	if (display->shell)
++		zxdg_shell_v6_destroy(display->shell);
++
++	if (display->fshell)
++		zwp_fullscreen_shell_v1_release(display->fshell);
++
++	if (display->compositor)
++		wl_compositor_destroy(display->compositor);
++
++	wl_surface_destroy(display->cursor_surface);
++	if (display->cursor_theme)
++		wl_cursor_theme_destroy(display->cursor_theme);
++
++	//if (display->ivi_application)
++	//	ivi_application_destroy(display->ivi_application);
++
++	wl_registry_destroy(display->registry);
++	wl_display_flush(display->display);
++	wl_display_disconnect(display->display);
++	free(display);
++}
++
++static struct display *
++create_display(struct window *window)
++{
++	struct display *display;
++
++	display = malloc(sizeof *display);
++	if (display == NULL) {
++		fprintf(stderr, "out of memory\n");
++		exit(1);
++	}
++	display->display = wl_display_connect(NULL);
++	assert(display->display);
++	display->window = window;
++
++	display->registry = wl_display_get_registry(display->display);
++	wl_registry_add_listener(display->registry,
++				 &registry_listener, display);
++	wl_display_roundtrip(display->display);
++	if (display->dmabuf == NULL) {
++		fprintf(stderr, "No zwp_linux_dmabuf_v1 global found\n");
++		exit(1);
++	}
++	wl_display_roundtrip(display->display);
++
++	return display;
++}
++
++static void
++signal_int(int signum)
++{
++	running = 0;
++}
++
++/*
++ * parse the message inputed for rawdata
++ * egg: -F /usr/share/weston/rawdata.nv16:720x480@5
++ * filename:widthxheight@format
++*/
++static int parse_file(struct file_arg *file, char *p)
++{
++	char *end;
++	char *pPos = p;
++	int len, i;
++
++	len = strlen(pPos) + 1;
++	for (i = 0; i < len; i++)
++		if(pPos[i] == ':')
++			pPos[i] = '\0';
++
++	memcpy(file->filename, pPos, strlen(pPos) + 1);
++	pPos = pPos + strlen(pPos) + 1;
++	file->width = strtoul(pPos, &end, 10);
++	if (*end != 'x')
++		return -EINVAL;
++	pPos = end + 1;
++	file->height = strtoul(pPos, &end, 10);
++	if (*end != '@')
++		return -EINVAL;
++	pPos = end + 1;
++	file->format = strtoul(pPos, &end, 10);
++	if (*end != '\0')
++		return -EINVAL;
++	return 0;
++}
++
++static void init_window(struct window *window)
++{
++	window->geometry.width  = 0;
++	window->geometry.height = 0;
++	window->buffer_size = 32;
++	window->transform = WL_OUTPUT_TRANSFORM_NORMAL;
++	window->opaque = 1;
++	window->overlay = 0;
++	window->format = 0;
++	window->drm_card_fd = -1;
++}
++
++static void
++usage(int error_code)
++{
++	fprintf(stderr, "Usage: mtkdraw-dma [OPTIONS]\n\n"
++		"  -f           Run in fullscreen mode(only desktop-shell valid)\n"
++		"  -o           Create an opaque surface\n"
++		"  -s           Use a 16 bpp EGL config\n"
++		"  -t           Set display buffer transform(0~7)\n"
++		"  -F           rawdata message(rawdata size provided is 320x480)\n"
++		"               eg:-F /usr/share/weston/rawdata.nv16:320x480@5\n"
++		"               @14 stand for nv16 format, formats supported as follows\n"
++		"               now only support 8 formats\n"
++		"                   0 --> IMG_FORMAT_RGB565\n"
++		"                   1 --> IMG_FORMAT_XRGB8888\n"
++		"                   2 --> IMG_FORMAT_ARGB8888\n"
++		"                   3 --> IMG_FORMAT_YUYV\n"
++		"                   4 --> IMG_FORMAT_NV12\n"
++		"                   5 --> IMG_FORMAT_NV16\n"
++		"                   6 --> IMG_FORMAT_YUV420\n"
++		"                   7 --> IMG_FORMAT_YVU420\n"
++		"  -d           Enable debug output\n"
++		"  -overlay     Enable overlay switch\n"
++		"  -h           This help text\n\n");
++
++	exit(error_code);
++}
++
++int
++main(int argc, char **argv)
++{
++	struct sigaction sigint;
++	struct display *display;
++	struct window  window  = { 0 };
++	int i, ret = 0;
++	struct file_arg *file;
++
++	init_window(&window);
++
++	for (i = 1; i < argc; i++) {
++		if (strcmp("-f", argv[i]) == 0)
++			window.fullscreen = 1;
++		else if (strcmp("-o", argv[i]) == 0)
++			window.opaque = 0;
++		else if (strcmp("-s", argv[i]) == 0)
++			window.buffer_size = 16;
++		else if (strcmp("-t", argv[i]) == 0)
++			window.transform = atoi(argv[++i]);
++		else if (strcmp("-F", argv[i]) == 0){
++			ret = parse_file(&window.image.fProp, argv[++i]);
++			if (ret < 0)
++				fprintf(stderr, "error: input error, like: -F "
++					"/usr/share/weston/rawdata.nv16:320x480@5\n");
++		}
++		else if (strcmp("-d", argv[i]) == 0)
++			debug = 1;
++		else if (strcmp("-overlay", argv[i]) == 0)
++			window.overlay = 1;
++		else if (strcmp("-h", argv[i]) == 0)
++			usage(EXIT_SUCCESS);
++		else
++			usage(EXIT_FAILURE);
++	}
++
++	file = &window.image.fProp;
++	if((file->width == 0) || (file->height ==0) || (file->filename == 0))
++	{
++		/*default sample*/
++		file->width = 320;
++		file->height = 480;
++		file->format = IMG_FORMAT_NV16;
++		snprintf(file->filename, MAX_LEN, "/usr/share/weston/rawdata.nv16");
++		fprintf(stderr, "debug: You have choose the default example!\n");
++	}
++
++	fprintf(stderr, "debug: The file is %s width/height/format[%d %d %d]\n",
++		file->filename, file->width, file->height, file->format);
++
++	window.geometry.width  = file->width;
++	window.geometry.height = file->height;
++	window.window_size = window.geometry;
++
++	display = create_display(&window);
++	window.display = display;
++	//display->window = &window;
++
++	create_surface(&window);
++
++	ret = init_img_texture(&window);
++	if (ret < 0){
++		fprintf(stderr, "error: init_img_texture failed\n");
++		return -1;
++	}
++
++	window.drm_card_fd = _kms_device_fd();
++	if (window.drm_card_fd < 0) {
++		fprintf(stderr, "error: fail to get drm_card_fd !\n");
++		return -1;
++	}
++	/*
++	  * setting sprite_switch = 0, indicate not walk overlay
++	  * setting sprite_switch = 1, indicate walk overlay
++	*/
++	if(window.overlay)
++		config_switch_set_sprite_switch(window.switch_set, 1);
++	else
++		config_switch_set_sprite_switch(window.switch_set, 0);
++
++	sigint.sa_handler = signal_int;
++	sigemptyset(&sigint.sa_mask);
++	sigint.sa_flags = SA_RESETHAND;
++	sigaction(SIGINT, &sigint, NULL);
++
++	if (!window.wait_for_configure)
++		redraw(&window, NULL, 0);
++
++	while (running && ret != -1)
++		ret = wl_display_dispatch(display->display);
++
++	fprintf(stderr, "debug: simple-configure-mtk exiting\n");
++	destroy_surface(&window);
++	destroy_display(display);
++
++	return 0;
++}
+diff --git a/configure.ac b/configure.ac
+index 96acf75..e91261d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -440,6 +440,7 @@ if ! test "x$enable_simple_dmabuf_v4l_client" = "xno"; then
+   enable_simple_dmabuf_v4l_client="$have_simple_dmabuf_v4l_client"
+ fi
+ AM_CONDITIONAL(BUILD_SIMPLE_DMABUF_V4L_CLIENT, test "x$enable_simple_dmabuf_v4l_client" = "xyes")
++AM_CONDITIONAL(BUILD_SIMPLE_CONFIGURE_MTK_CLIENT, test "x$enable_simple_dmabuf_v4l_client" = "xyes")
+ 
+ AC_ARG_ENABLE(clients, [  --enable-clients],, enable_clients=yes)
+ AM_CONDITIONAL(BUILD_CLIENTS, test x$enable_clients = xyes)
+-- 
+2.6.4
+
diff --git a/debian/patches/0008-PATCH-weston-add-surface-overlay-assignment-interfac.patch b/debian/patches/0008-PATCH-weston-add-surface-overlay-assignment-interfac.patch
new file mode 100644
index 0000000..ad8562c
--- /dev/null
+++ b/debian/patches/0008-PATCH-weston-add-surface-overlay-assignment-interfac.patch
@@ -0,0 +1,276 @@
+From 949565b2683a3a67060698132a52ea26c75d9952 Mon Sep 17 00:00:00 2001
+From: Qian Hu <Qian.Hu@mediatek.com>
+Date: Tue, 24 Sep 2019 15:01:45 +0800
+Subject: [PATCH 8/8] [PATCH] weston: add surface overlay assignment interface
+
+add surface overlay assignment interface
+
+Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
+---
+ Makefile.am                      |   6 +-
+ compositor/main.c                |   1 +
+ libweston/compositor.h           |  11 ++++
+ libweston/weston-configure-mtk.c | 126 +++++++++++++++++++++++++++++++++++++++
+ libweston/weston-configure-mtk.h |  54 +++++++++++++++++
+ 5 files changed, 197 insertions(+), 1 deletion(-)
+ create mode 100644 libweston/weston-configure-mtk.c
+ create mode 100644 libweston/weston-configure-mtk.h
+
+diff --git a/Makefile.am b/Makefile.am
+index 7efa5a0..008bdfe 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -97,6 +97,8 @@ libweston_@LIBWESTON_MAJOR@_la_SOURCES =			\
+ 	libweston/pixel-formats.c			\
+ 	libweston/pixel-formats.h			\
+ 	libweston/weston-screenshooter-mtk.c \
++	libweston/weston-configure-mtk.c	\
++	libweston/weston-configure-mtk.h	\
+ 	shared/helpers.h				\
+ 	shared/matrix.c					\
+ 	shared/matrix.h					\
+@@ -677,7 +679,9 @@ nodist_weston_simple_configure_mtk_SOURCES =               \
+         protocol/fullscreen-shell-unstable-v1-protocol.c        \
+         protocol/fullscreen-shell-unstable-v1-client-protocol.h \
+         protocol/linux-dmabuf-unstable-v1-protocol.c		\
+-        protocol/linux-dmabuf-unstable-v1-client-protocol.h
++        protocol/linux-dmabuf-unstable-v1-client-protocol.h  \
++        protocol/weston-configure-mtk-protocol.c		\
++        protocol/weston-configure-mtk-client-protocol.h
+ weston_simple_configure_mtk_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
+ weston_simple_configure_mtk_LDADD =  $(EGL_LIBS) $(LIBDRM_LIBS) libtoytoolkit.la
+ BUILT_SOURCES += protocol/linux-dmabuf-unstable-v1-client-protocol.h
+diff --git a/compositor/main.c b/compositor/main.c
+index b5b4fc5..21c501c 100644
+--- a/compositor/main.c
++++ b/compositor/main.c
+@@ -52,6 +52,7 @@
+ #include "git-version.h"
+ #include "version.h"
+ #include "weston.h"
++#include "../libweston/weston-configure-mtk.h"
+ 
+ #include "compositor-drm.h"
+ #include "compositor-headless.h"
+diff --git a/libweston/compositor.h b/libweston/compositor.h
+index 8736691..ba577b7 100644
+--- a/libweston/compositor.h
++++ b/libweston/compositor.h
+@@ -1362,6 +1362,16 @@ struct weston_surface_state {
+ 	struct weston_buffer_viewport buffer_viewport;
+ };
+ 
++/*
++ * For setting whether the views on this surface walk
++ * overlay path; on==>1, off==>0
++*/
++struct config_switch{
++	struct wl_resource *resource;
++	void *private;
++	int sprites_switch;
++};
++
+ struct weston_surface_activation_data {
+ 	struct weston_surface *surface;
+ 	struct weston_seat *seat;
+@@ -1483,6 +1493,7 @@ struct weston_surface {
+ 
+ 	/* An list of per seat pointer constraints. */
+ 	struct wl_list pointer_constraints;
++	struct config_switch *config_switch;
+ };
+ 
+ struct weston_subsurface {
+diff --git a/libweston/weston-configure-mtk.c b/libweston/weston-configure-mtk.c
+new file mode 100644
+index 0000000..185f91c
+--- /dev/null
++++ b/libweston/weston-configure-mtk.c
+@@ -0,0 +1,125 @@
++#include "config.h"
++#include <fcntl.h>
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <limits.h>
++#include <stdarg.h>
++#include <assert.h>
++#include <sys/ioctl.h>
++#include <sys/mman.h>
++#include <sys/wait.h>
++#include <sys/socket.h>
++#include <sys/utsname.h>
++#include <sys/stat.h>
++#include <unistd.h>
++#include <math.h>
++#include <linux/input.h>
++#include <dlfcn.h>
++#include <signal.h>
++#include <setjmp.h>
++#include <sys/time.h>
++#include <time.h>
++#include <errno.h>
++
++#include "timeline.h"
++
++#include "compositor.h"
++//#include "scaler-server-protocol.h"
++#include "shared/helpers.h"
++#include "shared/os-compatibility.h"
++#include "shared/timespec-util.h"
++#include "git-version.h"
++#include "version.h"
++
++#include "weston-configure-mtk.h"
++#include "weston-configure-mtk-server-protocol.h"
++
++static void
++config_set_sprite_switch(struct wl_client *client,
++	       struct wl_resource *resource,
++	       int32_t spr_switch)
++{
++	struct config_switch *configure = wl_resource_get_user_data(resource);
++
++	configure->sprites_switch = spr_switch;
++}
++
++static const struct config_switch_set_interface switch_set_interface = {
++	config_set_sprite_switch,
++};
++
++static struct config_switch *
++config_interface_create(struct weston_surface *surface)
++{
++	struct config_switch *config_switch;
++
++	config_switch = zalloc(sizeof *config_switch);
++	if (config_switch == NULL)
++		return NULL;
++
++	config_switch->private = (void *)surface;
++	surface->config_switch = config_switch;
++
++	return config_switch;
++}
++
++static void
++config_switch_connect(struct wl_client *client, struct wl_resource *resource,
++	struct wl_resource *wl_surface, uint32_t id)
++{
++	struct config_switch *config_switch = wl_resource_get_user_data(resource);
++	struct weston_surface *surface = wl_resource_get_user_data(wl_surface);
++
++	config_switch = config_interface_create(surface);
++	if (config_switch == NULL) {
++		wl_resource_post_no_memory(resource);
++		return;
++	}
++
++	config_switch->resource =
++		wl_resource_create(client, &config_switch_set_interface,
++				   wl_resource_get_version(resource), id);
++	if (config_switch->resource == NULL) {
++		wl_resource_post_no_memory(resource);
++		return;
++	}
++	wl_resource_set_implementation(config_switch->resource, &switch_set_interface,
++				       config_switch, NULL);
++}
++
++static const struct config_switch_interface switch_interface = {
++	config_switch_connect,
++};
++
++static void
++bind_config_switch(struct wl_client *client,
++		void *data, uint32_t version, uint32_t id)
++{
++	struct weston_compositor *compositor = data;
++	struct wl_resource *resource;
++
++	resource = wl_resource_create(client, &config_switch_interface,
++				      MIN(version, 1), id);
++	if (resource == NULL) {
++		wl_client_post_no_memory(client);
++		return;
++	}
++
++	wl_resource_set_implementation(resource, &switch_interface,
++				       compositor, NULL);
++}
++
++WL_EXPORT int
++config_switch_global_create(struct weston_compositor *ec)
++{
++	if(!ec)
++		return -1;
++	if (!wl_global_create(ec->wl_display, &config_switch_interface, 1,
++			  ec, bind_config_switch)){
++		fprintf(stderr, "error: failed to config_switch_global_create: %s\n", dlerror());
++		return -1;
++	}
++	return 0;
++}
+diff --git a/libweston/weston-configure-mtk.h b/libweston/weston-configure-mtk.h
+new file mode 100644
+index 0000000..0f093fe
+--- /dev/null
++++ b/libweston/weston-configure-mtk.h
+@@ -0,0 +1,53 @@
++/*
++ * Copyright © 2008-2011 Kristian Høgsberg
++ * Copyright © 2012 Collabora, Ltd.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * "Software"), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial
++ * portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
++ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
++ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
++ * SOFTWARE.
++ */
++
++#ifndef _APP_CONFIGURE_EXTENSION_H_
++#define _APP_CONFIGURE_EXTENSION_H_
++
++#ifdef  __cplusplus
++extern "C" {
++#endif
++
++#include <stdbool.h>
++#include <time.h>
++#include <pixman.h>
++#include <xkbcommon/xkbcommon.h>
++
++#include <wayland-server.h>
++
++#include "version.h"
++#include "matrix.h"
++#include "config-parser.h"
++#include "zalloc.h"
++#include "timeline-object.h"
++
++int config_switch_global_create(struct weston_compositor *ec);
++
++#ifdef  __cplusplus
++}
++#endif
++
++#endif
+-- 
+2.6.4
+
diff --git a/debian/patches/0009-force-weston-to-use-card0.patch b/debian/patches/0009-force-weston-to-use-card0.patch
new file mode 100644
index 0000000..087f29f
--- /dev/null
+++ b/debian/patches/0009-force-weston-to-use-card0.patch
@@ -0,0 +1,21 @@
+diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
+index 38911763..e4d06806 100644
+--- a/libweston/compositor-drm.c
++++ b/libweston/compositor-drm.c
+@@ -6405,7 +6405,7 @@ find_primary_gpu(struct drm_backend *b, const char *seat)
+ 
+ 	e = udev_enumerate_new(b->udev);
+ 	udev_enumerate_add_match_subsystem(e, "drm");
+-	udev_enumerate_add_match_sysname(e, "card[0-9]*");
++	udev_enumerate_add_match_sysname(e, "card0");
+ 
+ 	udev_enumerate_scan_devices(e);
+ 	drm_device = NULL;
+@@ -6786,7 +6786,6 @@ drm_backend_create(struct weston_compositor *compositor,
+ 			    compositor, b->udev, seat_id,
+ 			    config->configure_device) < 0) {
+ 		weston_log("failed to create input devices\n");
+-		goto err_sprite;
+ 	}
+ 
+ 	if (drm_backend_create_heads(b, drm_device) < 0) {
diff --git a/debian/patches/reproducible-build-899358.patch b/debian/patches/reproducible-build-899358.patch
new file mode 100644
index 0000000..642c9df
--- /dev/null
+++ b/debian/patches/reproducible-build-899358.patch
@@ -0,0 +1,14 @@
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=899358
+Index: weston/weston.ini.in
+===================================================================
+--- weston.orig/weston.ini.in	2019-03-28 12:55:11.730324981 +0100
++++ weston/weston.ini.in	2019-03-28 12:58:53.029372855 +0100
+@@ -38,7 +38,7 @@
+ 
+ [launcher]
+ icon=/usr/share/icons/gnome/24x24/apps/arts.png
+-path=@abs_top_builddir@/weston-flower
++path=@libexecdir@/weston-flower
+ 
+ [input-method]
+ path=@libexecdir@/weston-keyboard
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..1bab16b
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,12 @@
+reproducible-build-899358.patch
+0001-mtk-make-error-portable.patch
+0001-PATCH-1-9-hmi-controller-use-output_w-h-instead-of-c.patch
+0002-PATCH-2-9-libinput-fix-issue-for-touch_event-cause-w.patch
+0003-PATCH-3-9-compose-engine-turn-to-pixman-if-gl-init-f.patch
+0004-PATCH-4-9-weston-do-not-check-master-fd-for-DRM-driv.patch
+0005-PATCH-5-9-weston-install-client-protocol-to-sysroot-.patch
+0006-PATCH-7-9-weston-screen-shot-add-screen-shot.patch
+0007-PATCH-weston-add-mtk-test-client.patch
+0008-PATCH-weston-add-surface-overlay-assignment-interfac.patch
+0009-force-weston-to-use-card0.patch
+0001-add-switch_config.patch
