Fix Nokia N9 build and update kernel (#1281)

* Remove unneeded dtb entry from deviceinfo
* Update Nokia N9 to kernel v4.16-rc3
This commit is contained in:
Filip Matijević 2018-03-03 12:01:35 +01:00 committed by Oliver Smith
parent 9b18e344dd
commit ed03333008
16 changed files with 1129 additions and 1655 deletions

View file

@ -1,6 +1,6 @@
pkgname=device-nokia-n9
pkgver=1
pkgrel=2
pkgrel=3
pkgdesc="Nokia N9"
url="https://github.com/postmarketOS"
arch="noarch"
@ -36,6 +36,6 @@ nonfree_firmware() {
mkdir "$subpkgdir"
}
sha512sums="3298afa3312a032836e271d4c6808d304436470545472beb4a4ac1a4b8f93ec25d5b895f5bebf351ffb6e910a155f97a4d96b1d74f1d8ab278c246cb3815bf79 deviceinfo
sha512sums="4d68746c16e0375a9853a94bddf63541d64e290e4e624ae3790fed70bb9c86a02e492bfd3a32179ae5163d371963d763718ac9d3a57140b8e135d322ae9b09ee deviceinfo
61d9e6bf94f3b9cab0ccb2e18c18e5886a08aae5e70fe5e7b7d7cc2a8d655dc11cdec603731c4328dd288f13ba3aa9328f2fc46e7a473be3da31767786978b05 initfs-hook.sh
df0fe900693e5f176076c59f5379e56aaa96c3df16a4120448f15b71f530170730b43e5fe32733c40c118a00ca3581043231a062a8a1eb0a930bfbfbb6c52a47 weston.ini"

View file

@ -8,7 +8,6 @@ deviceinfo_date=""
deviceinfo_keyboard="false"
deviceinfo_keymaps=""
deviceinfo_nonfree="????"
deviceinfo_dtb="omap3-n9"
deviceinfo_modules_initfs=""
deviceinfo_external_disk="false"
deviceinfo_external_disk_install="false"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,652 @@
From 2c62ef61b0361f6850140832b35bc4f400b9ccfe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Sat, 10 Feb 2018 20:33:59 +0100
Subject: [PATCH 01/11] SREv2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Filip Matijević <filip.matijevic.pz@gmail.com>
---
.../bindings/display/panel/panel-common.txt | 12 ++
arch/arm/boot/dts/omap4-droid4-xt894.dts | 3 +
drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c | 13 ++
drivers/gpu/drm/omapdrm/dss/dispc.c | 36 ++++-
drivers/gpu/drm/omapdrm/dss/omapdss.h | 2 +
drivers/gpu/drm/omapdrm/omap_connector.c | 18 ++-
drivers/gpu/drm/omapdrm/omap_connector.h | 1 +
drivers/gpu/drm/omapdrm/omap_crtc.c | 158 +++++++++++++++++++--
drivers/gpu/drm/omapdrm/omap_crtc.h | 2 +
drivers/gpu/drm/omapdrm/omap_fb.c | 20 +++
drivers/gpu/drm/omapdrm/omap_irq.c | 24 ++++
drivers/gpu/drm/omapdrm/omap_irq.h | 1 +
12 files changed, 280 insertions(+), 10 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/panel/panel-common.txt b/Documentation/devicetree/bindings/display/panel/panel-common.txt
index 557fa765adcb..c646b8908458 100644
--- a/Documentation/devicetree/bindings/display/panel/panel-common.txt
+++ b/Documentation/devicetree/bindings/display/panel/panel-common.txt
@@ -18,6 +18,18 @@ Descriptive Properties
physical area where images are displayed. These properties are expressed in
millimeters and rounded to the closest unit.
+- orientation: The orientation property specifies the panel orientation
+ in relation to the device's casing. The following values are possible:
+
+ * 0 = The top side of the panel matches the top side of the device's
+ casing.
+ * 1 = The top side of the panel matches the bottom side of the device's
+ casing. In other words the panel is mounted upside-down.
+ * 2 = The left side of the panel matches the top side of the device's
+ casing.
+ * 3 = The right side of the panel matches the top side of the device's
+ casing.
+
- label: The label property specifies a symbolic name for the panel as a
string suitable for use by humans. It typically contains a name inscribed on
the system (e.g. as an affixed label) or specified in the system's
diff --git a/arch/arm/boot/dts/omap4-droid4-xt894.dts b/arch/arm/boot/dts/omap4-droid4-xt894.dts
index b21084da490b..e11a24397163 100644
--- a/arch/arm/boot/dts/omap4-droid4-xt894.dts
+++ b/arch/arm/boot/dts/omap4-droid4-xt894.dts
@@ -6,6 +6,7 @@
/dts-v1/;
#include <dt-bindings/input/input.h>
+#include <dt-bindings/display/common.h>
#include "omap443x.dtsi"
#include "motorola-cpcap-mapphone.dtsi"
@@ -181,6 +182,8 @@
height-mm = <89>;
backlight = <&lcd_backlight>;
+ orientation = <PANEL_ORIENTATION_RIGHT_UP>;
+
panel-timing {
clock-frequency = <0>; /* Calculated by dsi */
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 15399a1a666b..7a63d6775a27 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -68,6 +68,7 @@ struct panel_drv_data {
int width_mm;
int height_mm;
+ int orientation;
struct omap_dsi_pin_config pin_config;
@@ -1198,6 +1199,14 @@ static void dsicm_get_size(struct omap_dss_device *dssdev,
*height = ddata->height_mm;
}
+static void dsicm_get_orientation(struct omap_dss_device *dssdev,
+ int *orientation)
+{
+ struct panel_drv_data *ddata = to_panel_data(dssdev);
+
+ *orientation = ddata->orientation;
+}
+
static struct omap_dss_driver dsicm_ops = {
.connect = dsicm_connect,
.disconnect = dsicm_disconnect,
@@ -1211,6 +1220,7 @@ static struct omap_dss_driver dsicm_ops = {
.get_timings = dsicm_get_timings,
.check_timings = dsicm_check_timings,
.get_size = dsicm_get_size,
+ .get_orientation = dsicm_get_orientation,
.enable_te = dsicm_enable_te,
.get_te = dsicm_get_te,
@@ -1259,6 +1269,9 @@ static int dsicm_probe_of(struct platform_device *pdev)
ddata->height_mm = 0;
of_property_read_u32(node, "height-mm", &ddata->height_mm);
+ ddata->orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
+ of_property_read_u32(node, "orientation", &ddata->orientation);
+
in = omapdss_of_find_source_for_first_ep(node);
if (IS_ERR(in)) {
dev_err(&pdev->dev, "failed to find video source\n");
diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 4e8f68efd169..0904c3201914 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -157,6 +157,8 @@ struct dispc_features {
bool has_gamma_table:1;
bool has_gamma_i734_bug:1;
+
+ bool has_fifo_stallmode_bug:1;
};
#define DISPC_MAX_NR_FIFOS 5
@@ -1489,6 +1491,18 @@ void dispc_ovl_compute_fifo_thresholds(enum omap_plane_id plane,
}
}
+static void dispc_ovl_set_manual_fifo_threshold(enum omap_plane_id plane)
+{
+ u32 fifo_low, fifo_high;
+ bool use_fifo_merge = false;
+ bool use_manual_update = true;
+
+ dispc_ovl_compute_fifo_thresholds(plane, &fifo_low, &fifo_high,
+ use_fifo_merge, use_manual_update);
+
+ dispc_ovl_set_fifo_threshold(plane, fifo_low, fifo_high);
+}
+
static void dispc_ovl_set_mflag(enum omap_plane_id plane, bool enable)
{
int bit;
@@ -2651,8 +2665,21 @@ static int dispc_ovl_setup(enum omap_plane_id plane,
oi->out_width, oi->out_height, oi->fourcc, oi->rotation,
oi->zorder, oi->pre_mult_alpha, oi->global_alpha,
oi->rotation_type, replication, vm, mem_to_mem);
+ if (r)
+ return r;
- return r;
+ /*
+ * OMAP3 chips have non-working FIFO thresholds for manually updated
+ * displays. The issue is not fully understood, but this workaround
+ * fixes the issue. OMAP4 is known to work with default thresholds.
+ */
+ if (mgr_fld_read(channel, DISPC_MGR_FLD_STALLMODE) &&
+ dispc.feat->has_fifo_stallmode_bug) {
+ DSSDBG("Enable OMAP3 FIFO stallmode bug workaround!\n");
+ dispc_ovl_set_manual_fifo_threshold(plane);
+ }
+
+ return 0;
}
int dispc_wb_setup(const struct omap_dss_writeback_info *wi,
@@ -4067,6 +4094,7 @@ static const struct dispc_features omap24xx_dispc_feats = {
.no_framedone_tv = true,
.set_max_preload = false,
.last_pixel_inc_missing = true,
+ .has_fifo_stallmode_bug = true,
};
static const struct dispc_features omap34xx_rev1_0_dispc_feats = {
@@ -4101,6 +4129,7 @@ static const struct dispc_features omap34xx_rev1_0_dispc_feats = {
.no_framedone_tv = true,
.set_max_preload = false,
.last_pixel_inc_missing = true,
+ .has_fifo_stallmode_bug = true,
};
static const struct dispc_features omap34xx_rev3_0_dispc_feats = {
@@ -4135,6 +4164,7 @@ static const struct dispc_features omap34xx_rev3_0_dispc_feats = {
.no_framedone_tv = true,
.set_max_preload = false,
.last_pixel_inc_missing = true,
+ .has_fifo_stallmode_bug = true,
};
static const struct dispc_features omap36xx_dispc_feats = {
@@ -4169,6 +4199,7 @@ static const struct dispc_features omap36xx_dispc_feats = {
.no_framedone_tv = true,
.set_max_preload = false,
.last_pixel_inc_missing = true,
+ .has_fifo_stallmode_bug = true,
};
static const struct dispc_features am43xx_dispc_feats = {
@@ -4203,6 +4234,7 @@ static const struct dispc_features am43xx_dispc_feats = {
.no_framedone_tv = true,
.set_max_preload = false,
.last_pixel_inc_missing = true,
+ .has_fifo_stallmode_bug = false,
};
static const struct dispc_features omap44xx_dispc_feats = {
@@ -4242,6 +4274,7 @@ static const struct dispc_features omap44xx_dispc_feats = {
.reverse_ilace_field_order = true,
.has_gamma_table = true,
.has_gamma_i734_bug = true,
+ .has_fifo_stallmode_bug = false,
};
static const struct dispc_features omap54xx_dispc_feats = {
@@ -4282,6 +4315,7 @@ static const struct dispc_features omap54xx_dispc_feats = {
.reverse_ilace_field_order = true,
.has_gamma_table = true,
.has_gamma_i734_bug = true,
+ .has_fifo_stallmode_bug = false,
};
static irqreturn_t dispc_irq_handler(int irq, void *arg)
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index f8f83e826a56..72ebd82409d3 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -565,6 +565,8 @@ struct omap_dss_driver {
struct videomode *vm);
void (*get_size)(struct omap_dss_device *dssdev,
unsigned int *width, unsigned int *height);
+ void (*get_orientation)(struct omap_dss_device *dssdev,
+ int *orientation);
int (*set_wss)(struct omap_dss_device *dssdev, u32 wss);
u32 (*get_wss)(struct omap_dss_device *dssdev);
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
index a0d7b1d905e8..2f296d29b74b 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.c
+++ b/drivers/gpu/drm/omapdrm/omap_connector.c
@@ -57,6 +57,14 @@ bool omap_connector_get_hdmi_mode(struct drm_connector *connector)
return omap_connector->hdmi_mode;
}
+bool omap_connector_get_manually_updated(struct drm_connector *connector)
+{
+ struct omap_connector *omap_connector = to_omap_connector(connector);
+
+ return !!(omap_connector->dssdev->caps &
+ OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE);
+}
+
static enum drm_connector_status omap_connector_detect(
struct drm_connector *connector, bool force)
{
@@ -241,6 +249,7 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
struct drm_connector *connector = NULL;
struct omap_connector *omap_connector;
bool hpd_supported = false;
+ int ret;
DBG("%s", dssdev->name);
@@ -259,7 +268,7 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
drm_connector_helper_add(connector, &omap_connector_helper_funcs);
if (dssdev->driver->register_hpd_cb) {
- int ret = dssdev->driver->register_hpd_cb(dssdev,
+ ret = dssdev->driver->register_hpd_cb(dssdev,
omap_connector_hpd_cb,
omap_connector);
if (!ret)
@@ -280,6 +289,13 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
connector->interlace_allowed = 1;
connector->doublescan_allowed = 0;
+ if (dssdev->driver->get_orientation)
+ dssdev->driver->get_orientation(dssdev, &connector->display_info.panel_orientation);
+
+ ret = drm_connector_init_panel_orientation_property(connector, 0, 0);
+ if (ret)
+ DBG("%s: Failed to init orientation property (%d)", dssdev->name, ret);
+
return connector;
fail:
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.h b/drivers/gpu/drm/omapdrm/omap_connector.h
index 98bbc779b302..652136d167f5 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.h
+++ b/drivers/gpu/drm/omapdrm/omap_connector.h
@@ -33,5 +33,6 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
struct drm_encoder *omap_connector_attached_encoder(
struct drm_connector *connector);
bool omap_connector_get_hdmi_mode(struct drm_connector *connector);
+bool omap_connector_get_manually_updated(struct drm_connector *connector);
#endif /* __OMAPDRM_CONNECTOR_H__ */
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 1b8154e58d18..c2defb514b9f 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -51,6 +51,10 @@ struct omap_crtc {
bool pending;
wait_queue_head_t pending_wait;
struct drm_pending_vblank_event *event;
+ struct delayed_work update_work;
+
+ void (*framedone_handler)(void *);
+ void *framedone_handler_data;
};
/* -----------------------------------------------------------------------------
@@ -139,6 +143,28 @@ static void omap_crtc_dss_disconnect(enum omap_channel channel,
static void omap_crtc_dss_start_update(enum omap_channel channel)
{
+ struct omap_crtc *omap_crtc = omap_crtcs[channel];
+ struct omap_drm_private *priv = omap_crtc->base.dev->dev_private;
+
+ priv->dispc_ops->mgr_enable(channel, true);
+}
+
+static bool omap_crtc_is_manually_updated(struct drm_crtc *crtc)
+{
+ struct drm_connector *connector;
+ struct drm_connector_list_iter conn_iter;
+ bool result = false;
+
+ drm_connector_list_iter_begin(crtc->dev, &conn_iter);
+ drm_for_each_connector_iter(connector, &conn_iter) {
+ if (connector->state->crtc != crtc)
+ continue;
+ result = omap_connector_get_manually_updated(connector);
+ break;
+ }
+ drm_connector_list_iter_end(&conn_iter);
+
+ return result;
}
/* Called only from the encoder enable/disable and suspend/resume handlers. */
@@ -150,12 +176,17 @@ static void omap_crtc_set_enabled(struct drm_crtc *crtc, bool enable)
enum omap_channel channel = omap_crtc->channel;
struct omap_irq_wait *wait;
u32 framedone_irq, vsync_irq;
+ bool is_manual = omap_crtc_is_manually_updated(crtc);
+ enum omap_display_type type = omap_crtc_output[channel]->output_type;
int ret;
if (WARN_ON(omap_crtc->enabled == enable))
return;
- if (omap_crtc_output[channel]->output_type == OMAP_DISPLAY_TYPE_HDMI) {
+ if (is_manual)
+ omap_irq_enable_framedone(crtc, enable);
+
+ if (is_manual || type == OMAP_DISPLAY_TYPE_HDMI) {
priv->dispc_ops->mgr_enable(channel, enable);
omap_crtc->enabled = enable;
return;
@@ -206,7 +237,6 @@ static void omap_crtc_set_enabled(struct drm_crtc *crtc, bool enable)
}
}
-
static int omap_crtc_dss_enable(enum omap_channel channel)
{
struct omap_crtc *omap_crtc = omap_crtcs[channel];
@@ -247,6 +277,17 @@ static int omap_crtc_dss_register_framedone(
enum omap_channel channel,
void (*handler)(void *), void *data)
{
+ struct omap_crtc *omap_crtc = omap_crtcs[channel];
+ struct drm_device *dev = omap_crtc->base.dev;
+
+ if (omap_crtc->framedone_handler)
+ return -EBUSY;
+
+ dev_dbg(dev->dev, "register framedone %s", omap_crtc->name);
+
+ omap_crtc->framedone_handler = handler;
+ omap_crtc->framedone_handler_data = data;
+
return 0;
}
@@ -254,6 +295,16 @@ static void omap_crtc_dss_unregister_framedone(
enum omap_channel channel,
void (*handler)(void *), void *data)
{
+ struct omap_crtc *omap_crtc = omap_crtcs[channel];
+ struct drm_device *dev = omap_crtc->base.dev;
+
+ dev_dbg(dev->dev, "unregister framedone %s", omap_crtc->name);
+
+ WARN_ON(omap_crtc->framedone_handler != handler);
+ WARN_ON(omap_crtc->framedone_handler_data != data);
+
+ omap_crtc->framedone_handler = NULL;
+ omap_crtc->framedone_handler_data = NULL;
}
static const struct dss_mgr_ops mgr_ops = {
@@ -321,6 +372,77 @@ void omap_crtc_vblank_irq(struct drm_crtc *crtc)
DBG("%s: apply done", omap_crtc->name);
}
+void omap_crtc_framedone_irq(struct drm_crtc *crtc, uint32_t irqstatus)
+{
+ struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
+
+ if (!omap_crtc->framedone_handler) {
+ dev_warn(omap_crtc->base.dev->dev, "no framedone handler?");
+ return;
+ }
+
+ omap_crtc->framedone_handler(omap_crtc->framedone_handler_data);
+
+ spin_lock(&crtc->dev->event_lock);
+ /* Send the vblank event if one has been requested. */
+ if (omap_crtc->event) {
+ drm_crtc_send_vblank_event(crtc, omap_crtc->event);
+ omap_crtc->event = NULL;
+ }
+ omap_crtc->pending = false;
+ spin_unlock(&crtc->dev->event_lock);
+
+ /* Wake up omap_atomic_complete. */
+ wake_up(&omap_crtc->pending_wait);
+}
+
+void omap_crtc_flush(struct drm_crtc *crtc)
+{
+ struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
+
+ if (!omap_crtc_is_manually_updated(crtc))
+ return;
+
+ if (!delayed_work_pending(&omap_crtc->update_work))
+ schedule_delayed_work(&omap_crtc->update_work, 0);
+}
+
+static void omap_crtc_manual_display_update(struct work_struct *data)
+{
+ struct omap_crtc *omap_crtc =
+ container_of(data, struct omap_crtc, update_work.work);
+ struct omap_dss_device *dssdev = omap_crtc_output[omap_crtc->channel];
+ struct drm_device *dev = omap_crtc->base.dev;
+ struct omap_dss_driver *dssdrv;
+ int ret, width, height;
+
+ if (!dssdev || !dssdev->dst) {
+ dev_err_once(dev->dev, "missing dssdev!");
+ return;
+ }
+
+ dssdev = dssdev->dst;
+ dssdrv = dssdev->driver;
+
+ if (!dssdrv || !dssdrv->update) {
+ dev_err_once(dev->dev, "incorrect dssdrv!");
+ return;
+ }
+
+ if (dssdrv->sync)
+ dssdrv->sync(dssdev);
+
+ width = dssdev->panel.vm.hactive;
+ height = dssdev->panel.vm.vactive;
+ ret = dssdrv->update(dssdev, 0, 0, width, height);
+ if (ret < 0) {
+ spin_lock_irq(&dev->event_lock);
+ omap_crtc->pending = false;
+ spin_unlock_irq(&dev->event_lock);
+ wake_up(&omap_crtc->pending_wait);
+ }
+}
+
static void omap_crtc_write_crtc_properties(struct drm_crtc *crtc)
{
struct omap_drm_private *priv = crtc->dev->dev_private;
@@ -373,6 +495,10 @@ static void omap_crtc_atomic_enable(struct drm_crtc *crtc,
DBG("%s", omap_crtc->name);
+ /* manual updated display will not trigger vsync irq */
+ if (omap_crtc_is_manually_updated(crtc))
+ return;
+
spin_lock_irq(&crtc->dev->event_lock);
drm_crtc_vblank_on(crtc);
ret = drm_crtc_vblank_get(crtc);
@@ -386,6 +512,7 @@ static void omap_crtc_atomic_disable(struct drm_crtc *crtc,
struct drm_crtc_state *old_state)
{
struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
+ struct drm_device *dev = crtc->dev;
DBG("%s", omap_crtc->name);
@@ -396,6 +523,11 @@ static void omap_crtc_atomic_disable(struct drm_crtc *crtc,
}
spin_unlock_irq(&crtc->dev->event_lock);
+ cancel_delayed_work(&omap_crtc->update_work);
+
+ if (!omap_crtc_wait_pending(crtc))
+ dev_warn(dev->dev, "manual display update did not finish!");
+
drm_crtc_vblank_off(crtc);
}
@@ -545,13 +677,20 @@ static void omap_crtc_atomic_flush(struct drm_crtc *crtc,
DBG("%s: GO", omap_crtc->name);
- ret = drm_crtc_vblank_get(crtc);
- WARN_ON(ret != 0);
+ if (!omap_crtc_is_manually_updated(crtc)) {
+ ret = drm_crtc_vblank_get(crtc);
+ WARN_ON(ret != 0);
- spin_lock_irq(&crtc->dev->event_lock);
- priv->dispc_ops->mgr_go(omap_crtc->channel);
- omap_crtc_arm_event(crtc);
- spin_unlock_irq(&crtc->dev->event_lock);
+ spin_lock_irq(&crtc->dev->event_lock);
+ priv->dispc_ops->mgr_go(omap_crtc->channel);
+ omap_crtc_arm_event(crtc);
+ spin_unlock_irq(&crtc->dev->event_lock);
+ } else {
+ spin_lock_irq(&crtc->dev->event_lock);
+ omap_crtc_flush(crtc);
+ omap_crtc_arm_event(crtc);
+ spin_unlock_irq(&crtc->dev->event_lock);
+ }
}
static int omap_crtc_atomic_set_property(struct drm_crtc *crtc,
@@ -713,6 +852,9 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,
omap_crtc->channel = channel;
omap_crtc->name = channel_names[channel];
+ INIT_DELAYED_WORK(&omap_crtc->update_work,
+ omap_crtc_manual_display_update);
+
ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL,
&omap_crtc_funcs, NULL);
if (ret < 0) {
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.h b/drivers/gpu/drm/omapdrm/omap_crtc.h
index ad7b007c6174..b61c94b34f04 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.h
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.h
@@ -39,5 +39,7 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,
int omap_crtc_wait_pending(struct drm_crtc *crtc);
void omap_crtc_error_irq(struct drm_crtc *crtc, uint32_t irqstatus);
void omap_crtc_vblank_irq(struct drm_crtc *crtc);
+void omap_crtc_framedone_irq(struct drm_crtc *crtc, uint32_t irqstatus);
+void omap_crtc_flush(struct drm_crtc *crtc);
#endif /* __OMAPDRM_CRTC_H__ */
diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/drm/omapdrm/omap_fb.c
index b2539a90e1a4..57b1767bef09 100644
--- a/drivers/gpu/drm/omapdrm/omap_fb.c
+++ b/drivers/gpu/drm/omapdrm/omap_fb.c
@@ -95,8 +95,28 @@ static void omap_framebuffer_destroy(struct drm_framebuffer *fb)
kfree(omap_fb);
}
+static int omap_framebuffer_dirty(struct drm_framebuffer *fb,
+ struct drm_file *file_priv,
+ unsigned flags, unsigned color,
+ struct drm_clip_rect *clips,
+ unsigned num_clips)
+{
+ struct drm_connector *connector = NULL;
+
+ drm_modeset_lock_all(fb->dev);
+
+ while ((connector = omap_framebuffer_get_next_connector(fb, connector)))
+ if (connector->encoder && connector->encoder->crtc)
+ omap_crtc_flush(connector->encoder->crtc);
+
+ drm_modeset_unlock_all(fb->dev);
+
+ return 0;
+}
+
static const struct drm_framebuffer_funcs omap_framebuffer_funcs = {
.create_handle = omap_framebuffer_create_handle,
+ .dirty = omap_framebuffer_dirty,
.destroy = omap_framebuffer_destroy,
};
diff --git a/drivers/gpu/drm/omapdrm/omap_irq.c b/drivers/gpu/drm/omapdrm/omap_irq.c
index 53ba424823b2..354df3583229 100644
--- a/drivers/gpu/drm/omapdrm/omap_irq.c
+++ b/drivers/gpu/drm/omapdrm/omap_irq.c
@@ -85,6 +85,27 @@ int omap_irq_wait(struct drm_device *dev, struct omap_irq_wait *wait,
return ret == 0 ? -1 : 0;
}
+int omap_irq_enable_framedone(struct drm_crtc *crtc, bool enable)
+{
+ struct drm_device *dev = crtc->dev;
+ struct omap_drm_private *priv = dev->dev_private;
+ unsigned long flags;
+ enum omap_channel channel = omap_crtc_channel(crtc);
+ int framedone_irq = priv->dispc_ops->mgr_get_framedone_irq(channel);
+
+ DBG("dev=%p, crtc=%u, enable=%d", dev, channel, enable);
+
+ spin_lock_irqsave(&priv->wait_lock, flags);
+ if (enable)
+ priv->irq_mask |= framedone_irq;
+ else
+ priv->irq_mask &= ~framedone_irq;
+ omap_irq_update(dev);
+ spin_unlock_irqrestore(&priv->wait_lock, flags);
+
+ return 0;
+}
+
/**
* enable_vblank - enable vblank interrupt events
* @dev: DRM device
@@ -215,6 +236,9 @@ static irqreturn_t omap_irq_handler(int irq, void *arg)
if (irqstatus & priv->dispc_ops->mgr_get_sync_lost_irq(channel))
omap_crtc_error_irq(crtc, irqstatus);
+
+ if (irqstatus & priv->dispc_ops->mgr_get_framedone_irq(channel))
+ omap_crtc_framedone_irq(crtc, irqstatus);
}
omap_irq_ocp_error_handler(dev, irqstatus);
diff --git a/drivers/gpu/drm/omapdrm/omap_irq.h b/drivers/gpu/drm/omapdrm/omap_irq.h
index 606c09932bc0..69f4ff80a0e4 100644
--- a/drivers/gpu/drm/omapdrm/omap_irq.h
+++ b/drivers/gpu/drm/omapdrm/omap_irq.h
@@ -27,6 +27,7 @@ struct drm_device;
struct omap_irq_wait;
int omap_irq_enable_vblank(struct drm_crtc *crtc);
+int omap_irq_enable_framedone(struct drm_crtc *crtc, bool enable);
void omap_irq_disable_vblank(struct drm_crtc *crtc);
void omap_drm_irq_uninstall(struct drm_device *dev);
int omap_drm_irq_install(struct drm_device *dev);
--
2.14.1

View file

@ -1,7 +1,7 @@
From f68a4284dbd93282df0ceda099cab49aa8ef0ec0 Mon Sep 17 00:00:00 2001
From b6faf8e49d3ce7b8b94d56a88e70926fb35de918 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Sat, 28 Oct 2017 09:18:10 +0200
Subject: [PATCH 02/12] drm: add/rename MIPI_DCS_SET_PARTIAL_XXX
Subject: [PATCH 02/11] drm: add/rename MIPI_DCS_SET_PARTIAL_XXX
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@ -30,3 +30,4 @@ index 19aa65a35546..1d9fdd685ded 100644
MIPI_DCS_SET_TEAR_ON = 0x35,
--
2.14.1

View file

@ -1,7 +1,7 @@
From d1b874e139935761ea4ef21a9e5c7add46241461 Mon Sep 17 00:00:00 2001
From 013999e09d13087a9eb4922df3099f5e71035031 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Sat, 28 Oct 2017 14:39:23 +0200
Subject: [PATCH 03/12] drm/omap: panel-dsi-cm: use defines from mipi_display.h
Subject: [PATCH 03/11] drm/omap: panel-dsi-cm: use defines from mipi_display.h
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@ -12,7 +12,7 @@ Signed-off-by: Filip Matijević <filip.matijevic.pz@gmail.com>
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 996991de674b..29a8b1287531 100644
index 7a63d6775a27..418cf5dd2d69 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -33,8 +33,6 @@
@ -24,7 +24,7 @@ index 996991de674b..29a8b1287531 100644
#define DCS_GET_ID1 0xda
#define DCS_GET_ID2 0xdb
#define DCS_GET_ID3 0xdc
@@ -385,7 +383,8 @@ static int dsicm_bl_update_status(struct backlight_device *dev)
@@ -386,7 +384,8 @@ static int dsicm_bl_update_status(struct backlight_device *dev)
r = dsicm_wake_up(ddata);
if (!r)
@ -34,7 +34,7 @@ index 996991de674b..29a8b1287531 100644
in->ops.dsi->bus_unlock(in);
}
@@ -667,11 +666,11 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
@@ -668,11 +667,11 @@ static int dsicm_power_on(struct panel_drv_data *ddata)
if (r)
goto err;
@ -48,7 +48,7 @@ index 996991de674b..29a8b1287531 100644
(1<<2) | (1<<5)); /* BL | BCTRL */
if (r)
goto err;
@@ -1100,7 +1099,8 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
@@ -1101,7 +1100,8 @@ static int dsicm_memory_read(struct omap_dss_device *dssdev,
goto err2;
while (buf_used < size) {
@ -60,3 +60,4 @@ index 996991de674b..29a8b1287531 100644
r = in->ops.dsi->dcs_read(in, ddata->channel, dcs_cmd,
--
2.14.1

View file

@ -1,7 +1,7 @@
From 9bf187094ccde898c00538e3b23ae4c76dfa11d8 Mon Sep 17 00:00:00 2001
From 3390d6d1009dc6cdd166638be4af242e4469bcd1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Sat, 28 Oct 2017 14:32:54 +0200
Subject: [PATCH 04/12] ARM: dts: n9: add display support
Subject: [PATCH 04/11] ARM: dts: n9: add display support
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@ -14,10 +14,10 @@ Signed-off-by: Filip Matijević <filip.matijevic.pz@gmail.com>
1 file changed, 91 insertions(+)
diff --git a/arch/arm/boot/dts/omap3-n9.dts b/arch/arm/boot/dts/omap3-n9.dts
index 39e35f8b8206..7bf1c0c1f884 100644
index e44d93fc644c..613ada9a982a 100644
--- a/arch/arm/boot/dts/omap3-n9.dts
+++ b/arch/arm/boot/dts/omap3-n9.dts
@@ -17,6 +17,26 @@
@@ -18,6 +18,26 @@
compatible = "nokia,omap3-n9", "ti,omap36xx", "ti,omap3";
};
@ -44,9 +44,9 @@ index 39e35f8b8206..7bf1c0c1f884 100644
&i2c2 {
smia_1: camera@10 {
compatible = "nokia,smia";
@@ -72,3 +92,74 @@
st,max-limit-y = <46>;
st,max-limit-z = <46>;
@@ -79,3 +99,74 @@
MATRIX_KEY(7, 8, KEY_VOLUMEDOWN)
>;
};
+
+&dss {
@ -121,3 +121,4 @@ index 39e35f8b8206..7bf1c0c1f884 100644
+};
--
2.14.1

View file

@ -1,7 +1,7 @@
From faaa1d9e395ea7231534561d5bd2ed6e1d9a760c Mon Sep 17 00:00:00 2001
From 324c0340c85dee1a2ae3eb6c71bcd9e47c9f03f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Thu, 2 Nov 2017 18:46:21 +0100
Subject: [PATCH 05/12] Revert "drm/omap: work-around for omap3 display enable"
Subject: [PATCH 05/11] Revert "drm/omap: work-around for omap3 display enable"
This reverts commit fc5cc9678e130196012c17b37e555d53d3d3476b.
---
@ -9,10 +9,10 @@ This reverts commit fc5cc9678e130196012c17b37e555d53d3d3476b.
1 file changed, 17 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index cdf5b0601eba..9b3c36b48356 100644
index dd68b2556f5b..bc5b68ecd0f7 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -84,36 +84,23 @@ static void omap_atomic_commit_tail(struct drm_atomic_state *old_state)
@@ -74,36 +74,23 @@ static void omap_atomic_commit_tail(struct drm_atomic_state *old_state)
/* Apply the atomic update. */
drm_atomic_helper_commit_modeset_disables(dev, old_state);
@ -68,3 +68,4 @@ index cdf5b0601eba..9b3c36b48356 100644
* Wait for completion of the page flips to ensure that old buffers
--
2.14.1

View file

@ -1,7 +1,7 @@
From 4f521a6bc38b208fb740b2585e1a217893f0f437 Mon Sep 17 00:00:00 2001
From 8087f305187140d20b7903ba7486f243a2d470d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Wed, 1 Nov 2017 18:25:45 +0100
Subject: [PATCH 06/12] HACK: drm/omap: panel-dsi-cm: force 0xff for brigthness
Subject: [PATCH 06/11] HACK: drm/omap: panel-dsi-cm: force 0xff for brigthness
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@ -12,10 +12,10 @@ Signed-off-by: Filip Matijević <filip.matijevic.pz@gmail.com>
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 29a8b1287531..36a05da2f818 100644
index 418cf5dd2d69..069fad8d89b2 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -374,6 +374,8 @@ static int dsicm_bl_update_status(struct backlight_device *dev)
@@ -375,6 +375,8 @@ static int dsicm_bl_update_status(struct backlight_device *dev)
else
level = 0;
@ -26,3 +26,4 @@ index 29a8b1287531..36a05da2f818 100644
mutex_lock(&ddata->lock);
--
2.14.1

View file

@ -1,40 +0,0 @@
From 29c40823eee0bd4d3a40938dfdabd0187e34625f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Thu, 23 Nov 2017 19:58:07 +0100
Subject: [PATCH 07/12] ARM: dts: N9: Add support for volume keys
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Filip Matijević <filip.matijevic.pz@gmail.com>
---
arch/arm/boot/dts/omap3-n9.dts | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm/boot/dts/omap3-n9.dts b/arch/arm/boot/dts/omap3-n9.dts
index 7bf1c0c1f884..9e417ba08deb 100644
--- a/arch/arm/boot/dts/omap3-n9.dts
+++ b/arch/arm/boot/dts/omap3-n9.dts
@@ -11,6 +11,7 @@
/dts-v1/;
#include "omap3-n950-n9.dtsi"
+#include <dt-bindings/input/input.h>
/ {
model = "Nokia N9";
@@ -79,6 +80,12 @@
compatible = "nokia,n9-modem";
};
+&twl_keypad {
+ linux,keymap = < MATRIX_KEY(6, 8, KEY_VOLUMEUP)
+ MATRIX_KEY(7, 8, KEY_VOLUMEDOWN)
+ >;
+};
+
&lis302 {
st,axis-x = <1>; /* LIS3_DEV_X */
st,axis-y = <(-2)>; /* LIS3_INV_DEV_Y */
--
2.14.1

View file

@ -1,7 +1,7 @@
From 09b9ba32a440a95dc1a544198e84107d33a40cf7 Mon Sep 17 00:00:00 2001
From 15b1d44e2e17ace2ac229a062993e5b530208402 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Mon, 13 Nov 2017 17:20:42 +0100
Subject: [PATCH 08/12] ARM: dts: N9/N950: Add touchscreen support
Subject: [PATCH 07/11] ARM: dts: N9/N950: Add touchscreen support
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@ -12,7 +12,7 @@ Signed-off-by: Filip Matijević <filip.matijevic.pz@gmail.com>
1 file changed, 22 insertions(+)
diff --git a/arch/arm/boot/dts/omap3-n950-n9.dtsi b/arch/arm/boot/dts/omap3-n950-n9.dtsi
index 12fbb3da5fce..f615428b9f4d 100644
index 0d9b85317529..219519812050 100644
--- a/arch/arm/boot/dts/omap3-n950-n9.dtsi
+++ b/arch/arm/boot/dts/omap3-n950-n9.dtsi
@@ -141,6 +141,14 @@
@ -67,3 +67,4 @@ index 12fbb3da5fce..f615428b9f4d 100644
&i2c3 {
--
2.14.1

View file

@ -1,7 +1,7 @@
From 260d242959b20570b2a6e5dbc4709c0933ccb722 Mon Sep 17 00:00:00 2001
From aca9cbfc6f2bf8a3dc6b30d6b7e78e9790a9875f Mon Sep 17 00:00:00 2001
From: filippz <filip.matijevic.pz@gmail.com>
Date: Thu, 28 Dec 2017 06:57:45 +0100
Subject: [PATCH 09/12] misc: apds990x: Add device tree support
Subject: [PATCH 08/11] misc: apds990x: Add device tree support
Signed-off-by: filippz <filip.matijevic.pz@gmail.com>
---
@ -58,7 +58,7 @@ index 000000000000..480c0b1c570d
+ avago,ppcount = <5>;
+ };
diff --git a/drivers/misc/apds990x.c b/drivers/misc/apds990x.c
index c9f07032c2fc..77c168d928f8 100644
index ed9412d750b7..7bb9cd76110a 100644
--- a/drivers/misc/apds990x.c
+++ b/drivers/misc/apds990x.c
@@ -33,6 +33,8 @@
@ -81,7 +81,7 @@ index c9f07032c2fc..77c168d928f8 100644
static int apds990x_read_byte(struct apds990x_chip *chip, u8 reg, u8 *data)
{
@@ -1055,11 +1057,71 @@ static const struct attribute_group apds990x_attribute_group[] = {
@@ -1066,11 +1068,71 @@ static const struct attribute_group apds990x_attribute_group[] = {
{.attrs = sysfs_attrs_ctrl },
};
@ -154,7 +154,7 @@ index c9f07032c2fc..77c168d928f8 100644
chip = kzalloc(sizeof *chip, GFP_KERNEL);
if (!chip)
@@ -1072,6 +1134,16 @@ static int apds990x_probe(struct i2c_client *client,
@@ -1083,6 +1145,16 @@ static int apds990x_probe(struct i2c_client *client,
mutex_init(&chip->mutex);
chip->pdata = client->dev.platform_data;
@ -171,7 +171,7 @@ index c9f07032c2fc..77c168d928f8 100644
if (chip->pdata == NULL) {
dev_err(&client->dev, "platform data is mandatory\n");
err = -EINVAL;
@@ -1272,9 +1344,16 @@ static const struct dev_pm_ops apds990x_pm_ops = {
@@ -1283,9 +1355,16 @@ static const struct dev_pm_ops apds990x_pm_ops = {
NULL)
};
@ -190,3 +190,4 @@ index c9f07032c2fc..77c168d928f8 100644
.probe = apds990x_probe,
--
2.14.1

View file

@ -1,15 +1,18 @@
From c73c38789362ca9d4903b7afffdca550d2afb691 Mon Sep 17 00:00:00 2001
From: filippz <filip.matijevic.pz@gmail.com>
Date: Thu, 28 Dec 2017 06:58:40 +0100
Subject: [PATCH 10/12] misc: apds990x: convert to iio
From b8d6cddfec87f35e49d4bc54020e59a4c71dc31e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Sat, 10 Feb 2018 21:28:19 +0100
Subject: [PATCH 09/11] misc: apds990x: convert to iio
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: filippz <filip.matijevic.pz@gmail.com>
Signed-off-by: Filip Matijević <filip.matijevic.pz@gmail.com>
---
drivers/misc/apds990x.c | 956 +++++++++++++++++++++++++-----------------------
1 file changed, 495 insertions(+), 461 deletions(-)
drivers/misc/apds990x.c | 959 +++++++++++++++++++++++++-----------------------
1 file changed, 493 insertions(+), 466 deletions(-)
diff --git a/drivers/misc/apds990x.c b/drivers/misc/apds990x.c
index 77c168d928f8..3e4c664b602d 100644
index 7bb9cd76110a..363a6bf85a6c 100644
--- a/drivers/misc/apds990x.c
+++ b/drivers/misc/apds990x.c
@@ -1,4 +1,5 @@
@ -321,7 +324,7 @@ index 77c168d928f8..3e4c664b602d 100644
static ssize_t apds990x_rate_avail(struct device *dev,
struct device_attribute *attr, char *buf)
@@ -723,12 +662,8 @@ static ssize_t apds990x_rate_avail(struct device *dev,
@@ -724,13 +663,8 @@ static ssize_t apds990x_rate_avail(struct device *dev,
return pos;
}
@ -329,6 +332,7 @@ index 77c168d928f8..3e4c664b602d 100644
- struct device_attribute *attr, char *buf)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
-
- return sprintf(buf, "%d\n", chip->arate);
-}
+static IIO_DEVICE_ATTR(intensity_rate_avail, S_IRUGO,
@ -336,7 +340,7 @@ index 77c168d928f8..3e4c664b602d 100644
static int apds990x_set_arate(struct apds990x_chip *chip, int rate)
{
@@ -755,306 +690,417 @@ static int apds990x_set_arate(struct apds990x_chip *chip, int rate)
@@ -757,315 +691,420 @@ static int apds990x_set_arate(struct apds990x_chip *chip, int rate)
(chip->prox_persistence << APDS990X_PPERS_SHIFT));
}
@ -349,7 +353,7 @@ index 77c168d928f8..3e4c664b602d 100644
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- unsigned long value;
- int ret;
-
- ret = kstrtoul(buf, 0, &value);
- if (ret)
- return ret;
@ -385,6 +389,7 @@ index 77c168d928f8..3e4c664b602d 100644
{
- ssize_t ret;
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- if (pm_runtime_suspended(dev) || !chip->prox_en)
- return -EIO;
+ if ((thresh > APDS_RANGE) || (thresh == 0) ||
@ -396,10 +401,10 @@ index 77c168d928f8..3e4c664b602d 100644
- mutex_unlock(&chip->mutex);
- return ret;
-}
-
-static DEVICE_ATTR(prox0_raw, S_IRUGO, apds990x_prox_show, NULL);
+ chip->prox_thres = thresh;
-static DEVICE_ATTR(prox0_raw, S_IRUGO, apds990x_prox_show, NULL);
-
-static ssize_t apds990x_prox_range_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
@ -416,9 +421,10 @@ index 77c168d928f8..3e4c664b602d 100644
struct device_attribute *attr, char *buf)
{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- return sprintf(buf, "%d\n", chip->prox_en);
+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
+ struct apds990x_chip *chip = iio_priv(indio_dev);
- return sprintf(buf, "%d\n", chip->prox_en);
+ return sprintf(buf, "%s %d\n", chip->chipname, chip->revision);
}
@ -513,11 +519,14 @@ index 77c168d928f8..3e4c664b602d 100644
+static int apds990x_set_power_state(struct apds990x_chip *chip, bool on)
{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
+ struct device *dev = &chip->client->dev;
+ int ret = 0;
- return sprintf(buf, "%s\n",
- reporting_modes[!!chip->prox_continuous_mode]);
-}
+ struct device *dev = &chip->client->dev;
+ int ret = 0;
+ mutex_lock(&chip->mutex);
+ apds990x_set_mode(chip);
-static ssize_t apds990x_prox_reporting_mode_store(struct device *dev,
- struct device_attribute *attr,
@ -525,12 +534,6 @@ index 77c168d928f8..3e4c664b602d 100644
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- int ret;
+ mutex_lock(&chip->mutex);
+ apds990x_set_mode(chip);
- ret = sysfs_match_string(reporting_modes, buf);
- if (ret < 0)
- return ret;
+ if (on) {
+ ret = pm_runtime_get_sync(dev);
+ if (ret < 0)
@ -540,17 +543,20 @@ index 77c168d928f8..3e4c664b602d 100644
+ ret = pm_runtime_put_autosuspend(dev);
+ }
- ret = sysfs_match_string(reporting_modes, buf);
- if (ret < 0)
- return ret;
+ mutex_unlock(&chip->mutex);
- chip->prox_continuous_mode = ret;
- return len;
-}
+ mutex_unlock(&chip->mutex);
+ return ret;
}
-static DEVICE_ATTR(prox0_reporting_mode, S_IRUGO | S_IWUSR,
- apds990x_prox_reporting_mode_show,
- apds990x_prox_reporting_mode_store);
+ return ret;
+}
-
-static ssize_t apds990x_prox_reporting_avail_show(struct device *dev,
- struct device_attribute *attr, char *buf)
+static int apds990x_read_raw(struct iio_dev *indio_dev,
@ -559,13 +565,14 @@ index 77c168d928f8..3e4c664b602d 100644
{
- return sprintf(buf, "%s %s\n", reporting_modes[0], reporting_modes[1]);
-}
-
-static DEVICE_ATTR(prox0_reporting_mode_avail, S_IRUGO | S_IWUSR,
- apds990x_prox_reporting_avail_show, NULL);
+ struct apds990x_chip *chip = iio_priv(indio_dev);
+ long timeout;
+ u32 result;
+ int ret;
-static DEVICE_ATTR(prox0_reporting_mode_avail, S_IRUGO | S_IWUSR,
- apds990x_prox_reporting_avail_show, NULL);
+ switch (mask) {
+ case IIO_CHAN_INFO_PROCESSED:
+ switch (chan->type) {
@ -582,15 +589,15 @@ index 77c168d928f8..3e4c664b602d 100644
+ return -EIO;
+ }
-static ssize_t apds990x_lux_thresh_above_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
+ mutex_lock(&chip->mutex);
+ result = (chip->lux * chip->lux_calib) / APDS_CALIB_SCALER;
+ if (result > (APDS_RANGE * APDS990X_LUX_OUTPUT_SCALE))
+ result = APDS_RANGE * APDS990X_LUX_OUTPUT_SCALE;
-static ssize_t apds990x_lux_thresh_above_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- return sprintf(buf, "%d\n", chip->lux_thres_hi);
-}
+ *val = result;
@ -622,7 +629,6 @@ index 77c168d928f8..3e4c664b602d 100644
- struct device_attribute *attr, char *buf)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- return sprintf(buf, "%d\n", chip->lux_thres_lo);
+ mutex_lock(&chip->mutex);
+ *val = chip->prox_data;
+ mutex_unlock(&chip->mutex);
@ -672,7 +678,8 @@ index 77c168d928f8..3e4c664b602d 100644
+ default:
+ return -EINVAL;
+ }
+
- return sprintf(buf, "%d\n", chip->lux_thres_lo);
+ return ret;
}
@ -689,10 +696,22 @@ index 77c168d928f8..3e4c664b602d 100644
- ret = kstrtoul(buf, 0, &thresh);
- if (ret)
- return ret;
+ mutex_lock(&chip->mutex);
-
- if (thresh > APDS_RANGE)
- return -EINVAL;
-
mutex_lock(&chip->mutex);
- *target = thresh;
- /*
- * Don't update values in HW if we are still waiting for
- * first interrupt to come after device handle open call.
- */
- if (!chip->lux_wait_fresh_res)
- apds990x_refresh_athres(chip);
- mutex_unlock(&chip->mutex);
- return ret;
-}
+ switch (mask) {
+ case IIO_CHAN_INFO_SAMP_FREQ:
+ switch (chan->type) {
@ -727,25 +746,14 @@ index 77c168d928f8..3e4c664b602d 100644
+ break;
+ }
- mutex_lock(&chip->mutex);
- *target = thresh;
- /*
- * Don't update values in HW if we are still waiting for
- * first interrupt to come after device handle open call.
- */
- if (!chip->lux_wait_fresh_res)
- apds990x_refresh_athres(chip);
mutex_unlock(&chip->mutex);
- return ret;
-
-}
-static ssize_t apds990x_lux_thresh_above_store(struct device *dev,
- struct device_attribute *attr,
- const char *buf, size_t len)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- int ret = apds990x_set_lux_thresh(chip, &chip->lux_thres_hi, buf);
+ mutex_unlock(&chip->mutex);
- if (ret < 0)
- return ret;
- return len;
@ -762,19 +770,25 @@ index 77c168d928f8..3e4c664b602d 100644
{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- int ret = apds990x_set_lux_thresh(chip, &chip->lux_thres_lo, buf);
-
- if (ret < 0)
- return ret;
- return len;
-}
-
+ struct apds990x_chip *chip = iio_priv(indio_dev);
-static DEVICE_ATTR(lux0_thresh_above_value, S_IRUGO | S_IWUSR,
- apds990x_lux_thresh_above_show,
- apds990x_lux_thresh_above_store);
+ struct apds990x_chip *chip = iio_priv(indio_dev);
-
-static DEVICE_ATTR(lux0_thresh_below_value, S_IRUGO | S_IWUSR,
- apds990x_lux_thresh_below_show,
- apds990x_lux_thresh_below_store);
-
-static ssize_t apds990x_prox_threshold_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
+ switch (chan->type) {
+ case IIO_INTENSITY:
+ switch (dir) {
@ -794,10 +808,6 @@ index 77c168d928f8..3e4c664b602d 100644
+ return -EINVAL;
+ }
-static ssize_t apds990x_prox_threshold_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- return sprintf(buf, "%d\n", chip->prox_thres);
+ return IIO_VAL_INT;
}
@ -909,13 +919,7 @@ index 77c168d928f8..3e4c664b602d 100644
- if (value) {
- pm_runtime_get_sync(dev);
- mutex_lock(&chip->mutex);
+ switch (chan->type) {
+ case IIO_INTENSITY:
+ if (chip->lux_en == state)
+ return -EINVAL;
+
+ chip->lux_en = state;
chip->lux_wait_fresh_res = true;
- chip->lux_wait_fresh_res = true;
- apds990x_force_a_refresh(chip);
- apds990x_force_p_refresh(chip);
- mutex_unlock(&chip->mutex);
@ -925,15 +929,26 @@ index 77c168d928f8..3e4c664b602d 100644
- }
- return len;
-}
+ switch (chan->type) {
+ case IIO_INTENSITY:
+ if (chip->lux_en == state)
+ return -EINVAL;
-static DEVICE_ATTR(power_state, S_IRUGO | S_IWUSR,
- apds990x_power_state_show,
- apds990x_power_state_store);
+ chip->lux_en = state;
+ chip->lux_wait_fresh_res = true;
+ apds990x_set_mode(chip);
+ break;
+ case IIO_PROXIMITY:
+ if (chip->prox_en == state)
+ return -EINVAL;
-static DEVICE_ATTR(power_state, S_IRUGO | S_IWUSR,
- apds990x_power_state_show,
- apds990x_power_state_store);
-static ssize_t apds990x_chip_id_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
+ chip->prox_en = state;
+ chip->prox_wait_fresh_res = true;
+ apds990x_set_mode(chip);
@ -942,10 +957,6 @@ index 77c168d928f8..3e4c664b602d 100644
+ return -EINVAL;
+ }
-static ssize_t apds990x_chip_id_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct apds990x_chip *chip = dev_get_drvdata(dev);
- return sprintf(buf, "%s %d\n", chip->chipname, chip->revision);
+ return 0;
}
@ -985,7 +996,7 @@ index 77c168d928f8..3e4c664b602d 100644
};
static const int apds990x_parse_dt(struct device *dev,
@@ -1121,16 +1167,27 @@ static int apds990x_probe(struct i2c_client *client,
@@ -1132,16 +1171,27 @@ static int apds990x_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
struct apds990x_chip *chip;
@ -1018,7 +1029,7 @@ index 77c168d928f8..3e4c664b602d 100644
mutex_init(&chip->mutex);
chip->pdata = client->dev.platform_data;
@@ -1146,8 +1203,7 @@ static int apds990x_probe(struct i2c_client *client,
@@ -1157,8 +1207,7 @@ static int apds990x_probe(struct i2c_client *client,
if (chip->pdata == NULL) {
dev_err(&client->dev, "platform data is mandatory\n");
@ -1028,7 +1039,7 @@ index 77c168d928f8..3e4c664b602d 100644
}
if (chip->pdata->cf.ga == 0) {
@@ -1186,22 +1242,23 @@ static int apds990x_probe(struct i2c_client *client,
@@ -1197,22 +1246,23 @@ static int apds990x_probe(struct i2c_client *client,
chip->pgain = APDS_PGAIN_1X;
chip->prox_calib = APDS_PROX_NEUTRAL_CALIB_VALUE;
chip->prox_persistence = APDS_DEFAULT_PROX_PERS;
@ -1056,7 +1067,7 @@ index 77c168d928f8..3e4c664b602d 100644
}
usleep_range(APDS_STARTUP_DELAY, 2 * APDS_STARTUP_DELAY);
@@ -1209,141 +1266,119 @@ static int apds990x_probe(struct i2c_client *client,
@@ -1220,141 +1270,119 @@ static int apds990x_probe(struct i2c_client *client,
err = apds990x_detect(chip);
if (err < 0) {
dev_err(&client->dev, "APDS990X not found\n");
@ -1252,7 +1263,7 @@ index 77c168d928f8..3e4c664b602d 100644
static const struct of_device_id apds990x_of_match[] = {
{.compatible = "avago,apds990x" },
{}
@@ -1352,7 +1387,7 @@ MODULE_DEVICE_TABLE(of, apds990x_of_match);
@@ -1363,7 +1391,7 @@ MODULE_DEVICE_TABLE(of, apds990x_of_match);
static struct i2c_driver apds990x_driver = {
.driver = {
@ -1261,7 +1272,7 @@ index 77c168d928f8..3e4c664b602d 100644
.of_match_table = apds990x_of_match,
.pm = &apds990x_pm_ops,
},
@@ -1360,7 +1395,6 @@ static struct i2c_driver apds990x_driver = {
@@ -1371,7 +1399,6 @@ static struct i2c_driver apds990x_driver = {
.remove = apds990x_remove,
.id_table = apds990x_id,
};
@ -1271,3 +1282,4 @@ index 77c168d928f8..3e4c664b602d 100644
MODULE_DESCRIPTION("APDS990X combined ALS and proximity sensor");
--
2.14.1

View file

@ -1,7 +1,7 @@
From f9b31361e92f0e7e48a4972ecf919443631ff8ff Mon Sep 17 00:00:00 2001
From ad23767da90b149a650ebb38a797056f81728507 Mon Sep 17 00:00:00 2001
From: filippz <filip.matijevic.pz@gmail.com>
Date: Thu, 28 Dec 2017 07:00:11 +0100
Subject: [PATCH 11/12] ARM: dts: N9: Add support for apds990x ALS/PS
Subject: [PATCH 10/11] ARM: dts: N9: Add support for apds990x ALS/PS
Signed-off-by: filippz <filip.matijevic.pz@gmail.com>
---
@ -10,7 +10,7 @@ Signed-off-by: filippz <filip.matijevic.pz@gmail.com>
2 files changed, 38 insertions(+)
diff --git a/arch/arm/boot/dts/omap3-n9.dts b/arch/arm/boot/dts/omap3-n9.dts
index 9e417ba08deb..b0b4a49da016 100644
index 613ada9a982a..1143a6eef736 100644
--- a/arch/arm/boot/dts/omap3-n9.dts
+++ b/arch/arm/boot/dts/omap3-n9.dts
@@ -57,6 +57,30 @@
@ -45,7 +45,7 @@ index 9e417ba08deb..b0b4a49da016 100644
&isp {
diff --git a/arch/arm/boot/dts/omap3-n950-n9.dtsi b/arch/arm/boot/dts/omap3-n950-n9.dtsi
index f615428b9f4d..6192b47b18ca 100644
index 219519812050..7ac45b833d1d 100644
--- a/arch/arm/boot/dts/omap3-n950-n9.dtsi
+++ b/arch/arm/boot/dts/omap3-n950-n9.dtsi
@@ -39,6 +39,14 @@
@ -78,3 +78,4 @@ index f615428b9f4d..6192b47b18ca 100644
&i2c1 {
--
2.14.1

View file

@ -1,7 +1,7 @@
From 2a8dfb35dea840d1759ad8dbae12408c3017f721 Mon Sep 17 00:00:00 2001
From d619104c857f0938801a34acf1ba2d46fd41e521 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Matijevi=C4=87?= <filip.matijevic.pz@gmail.com>
Date: Sat, 16 Dec 2017 07:41:32 +0100
Subject: [PATCH 12/12] HACK: export dma access functions needed by PVR drivers
Subject: [PATCH 11/11] HACK: export dma access functions needed by PVR drivers
---
arch/arm/mm/dma-mapping.c | 7 +++++++
@ -24,3 +24,4 @@ index ada8eb206a90..877f7f96462d 100644
+#endif
--
2.14.1

View file

@ -2,7 +2,7 @@ _flavor=nokia-n9
_config="config-${_flavor}.armhf"
pkgname=linux-${_flavor}
pkgver=4.15_rc6
pkgver=4.16_rc3
_pkgver=${pkgver/_/-}
_kernver=${pkgver%_rc*}
_mainver=${_kernver%.*}
@ -17,23 +17,22 @@ arch="armhf"
pkgdesc="Nokia N9 kernel"
url="https://kernel.org"
depends=""
makedepends="perl sed installkernel bash gmp-dev bc linux-headers openssl-dev"
makedepends="perl sed installkernel bash gmp-dev bc linux-headers openssl-dev flex bison"
options="!strip !check !tracedeps"
source="
https://cdn.kernel.org/pub/linux/kernel/v$_mainver.x/linux-$_basever.tar.xz
linux-v$_basever-v$_pkgver.patch::https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/rawdiff/?id=v$_pkgver&id2=v$_basever
0001-SEB.patch
0001-SREv2.patch
0002-drm-add-rename-MIPI_DCS_SET_PARTIAL_XXX.patch
0003-drm-omap-panel-dsi-cm-use-defines-from-mipi_display..patch
0004-ARM-dts-n9-add-display-support.patch
0005-Revert-drm-omap-work-around-for-omap3-display-enable.patch
0006-HACK-drm-omap-panel-dsi-cm-force-0xff-for-brigthness.patch
0007-ARM-dts-N9-Add-support-for-volume-keys.patch
0008-ARM-dts-N9-N950-Add-touchscreen-support.patch
0009-misc-apds990x-Add-device-tree-support.patch
0010-misc-apds990x-convert-to-iio.patch
0011-ARM-dts-N9-Add-support-for-apds990x-ALS-PS.patch
0012-HACK-export-dma-access-functions-needed-by-PVR-drive.patch
0007-ARM-dts-N9-N950-Add-touchscreen-support.patch
0008-misc-apds990x-Add-device-tree-support.patch
0009-misc-apds990x-convert-to-iio.patch
0010-ARM-dts-N9-Add-support-for-apds990x-ALS-PS.patch
0011-HACK-export-dma-access-functions-needed-by-PVR-drive.patch
$_config
RM-696_Pyrenees_SMD_V1_6.raw
"
@ -51,8 +50,10 @@ prepare() {
local _patch_failed=
cd "$ksrcdir"
source_patches="linux-v$_basever-v$_pkgver.patch
$source"
# first apply patches in specified order
for i in $source; do
for i in $source_patches; do
case $i in
*.patch)
msg "Applying $i..."
@ -115,19 +116,18 @@ package() {
INSTALL_MOD_PATH="$pkgdir" INSTALL_MOD_STRIP=1
}
sha512sums="77e43a02d766c3d73b7e25c4aafb2e931d6b16e870510c22cef0cdb05c3acb7952b8908ebad12b10ef982c6efbe286364b1544586e715cf38390e483927904d8 linux-4.14.tar.xz
5d05754adc696f180405acda79e2678075f99d12252fc1f7e6af46f5ab39076de926db6de900c28b2e05dd3753df60d3515bb805b71d3bff991a5ed040b91167 linux-v4.14-v4.15-rc6.patch
bb34025e9487957b2fd14168bf406d8c96fe1d2e3e025d7468b785c1960acde165a3b3a8fbe0271ef7e6b35ee0bf1c49d9e8e005c2fce1ecdc3915f872bd5aec 0001-SEB.patch
b92039d222e43d372c7ca3d5d117154800b83216b04d972b038accd9fce7c38a9da48e838391808d7ddb436252eab537f2e61d70656a767b933c5131b6b95afe 0002-drm-add-rename-MIPI_DCS_SET_PARTIAL_XXX.patch
afd2f16e058e576c441263554701afce37c3f0ee9cacced55b60add9c3fb258f9dda911ca52997ea3acdc933468ac279851e3d5c3f7862449fc17f638a887b16 0003-drm-omap-panel-dsi-cm-use-defines-from-mipi_display..patch
ef272ab381ceba0f8226017d46b96545971092938d12a3f58444b87b07e273c24c9af0368b5f5bc3db91df5a271cb49dc727b08eaec70687c874ce9f7e2ca75c 0004-ARM-dts-n9-add-display-support.patch
b4b01583d639c75b3667398a917e0db57dee128af7def919ff859568ca812336a9c7b349dc9cb8b6f0e4b69afb806d7d5b761631e328b49d9402e3ed43c09ef0 0005-Revert-drm-omap-work-around-for-omap3-display-enable.patch
5b9e3b550feee69cd93945abb6e07cbd1067078b978617ff375fd6f1aa8f4731ad7abc314a3e15e3830c248da6c79c80654891803b24e3fef46940278827838a 0006-HACK-drm-omap-panel-dsi-cm-force-0xff-for-brigthness.patch
34930e488871e660d55b0174cda7778f45f381cf4bfaccab266f9cbc37858627330bdf0631bb78ebf51249003881ac814a3441c2ae0a96a000c9a5de1e4c945b 0007-ARM-dts-N9-Add-support-for-volume-keys.patch
d1ae4758f669de894b4c612e2d6e4599226e0be5c9e2f61d67a0885c30a8de1e3bf0832a57951c604c9098197fe730e7adb6ddfab7cec60a1af9ef993a4b100b 0008-ARM-dts-N9-N950-Add-touchscreen-support.patch
9006182627f533621b4b272c9a5160c8e530a1b6c7fe63a352da1e2ae42347a2dc9222833fd916f2d61ce178a70ca2a848fdd0c6f40f0832f10440a5ade681e1 0009-misc-apds990x-Add-device-tree-support.patch
4600c0ef918c03c22ce1f280d4c7e329e0e5b8e9fabea4cee29f5e521e521b08ff7f7b0cc0937e92acf16af130218b9eab66e212cc108c0d5163399b4d87a6e1 0010-misc-apds990x-convert-to-iio.patch
acc0399f7f3fda4d8c1e0a0c0ac7c36d27e8704d8aac4f085ad3a0c6460e55ce51dd541d692aa8d79e239d9005e9859d4263a599b058801f4dc43e0e75ae18e9 0011-ARM-dts-N9-Add-support-for-apds990x-ALS-PS.patch
02da1c4538cc16b344745f6b7dab76a42286e9e17e549229273930557b5498f70628aa1a24654dbbdbb504942a8d502037f4e722d6119921a20bb14be21e3784 0012-HACK-export-dma-access-functions-needed-by-PVR-drive.patch
sha512sums="c00d92659df815a53dcac7dde145b742b1f20867d380c07cb09ddb3295d6ff10f8931b21ef0b09d7156923a3957b39d74d87c883300173b2e20690d2b4ec35ea linux-4.15.tar.xz
b5b4bc53a245725806d7f46d53e5715e8b8505536c96465cd8ea9dc506ed7b1c02a518114c3025786d10ab72c1454c03e85380bddd753f48946ca71bc0ed6f17 linux-v4.15-v4.16-rc3.patch
1c2904c09954a88c3e3afe7bc962a460ceb4bb2503a8a69ff6e84786c3a36a86e60b7f6577ba37d57a9e06db65b0ce922d8a9807d6dae6d5fafa3fe54b17e4bd 0001-SREv2.patch
3f3e4608958a0ef65283fe04cd4cb88b8074f9af5626cb27dafa7ab21e62e9069822d0f018fd3636bba830b6f6f44e47911987713f91b3763fe4703e75158065 0002-drm-add-rename-MIPI_DCS_SET_PARTIAL_XXX.patch
b8d627d53e4d32568afa0c2fb5900487616b14c5ce9a14639894bd27aeb8c2a1d5de02435a0af136bd90cbc785c8862f4a9525f1dedd25a901e045c314fbd6d0 0003-drm-omap-panel-dsi-cm-use-defines-from-mipi_display..patch
3b321910172d0699efd756d77c852f32884f95bea518821f1643b6cbef0eaa3934ca778450bdcfe0d0e341b6fc6e7eb9f6677a3f0c6ab953a493e0fca1fcd30e 0004-ARM-dts-n9-add-display-support.patch
0eda9ca295aaa2ee038644eac5227585cd853573b2d8d79def2cf020f6dd9f40238f3957d27d1f55fef55f4c70f3ee76c3b8823231a3f8942bac6532a097ea8a 0005-Revert-drm-omap-work-around-for-omap3-display-enable.patch
98b495c08d5fc4c87688b73aa9cc373a8dfe9303e39c05e22541e09dba688c361a61a8de92f82ded06033106a2a387f9cf0a3099cc89966de73954c063a116dd 0006-HACK-drm-omap-panel-dsi-cm-force-0xff-for-brigthness.patch
09cb6c0527e697d663b08a26ca67541b4116a96d8f3b31b681f4ded14f0d2fd9c7eacab6f7c9d7dfee4d991ca6d2cd24d7ea607bd7f389f87998c56e00dd5d98 0007-ARM-dts-N9-N950-Add-touchscreen-support.patch
f48757a26498da4b3625091f44f3e7a02a3e08bd18bc9b25f7b61bf66add3622c3841c00c689a3bf1fecfae84fe55c577adab974c5ba947a460a0bbe6811bb63 0008-misc-apds990x-Add-device-tree-support.patch
187be299cd742b836b4831da2d12a0e2c6b6b2a815ee25c2d9ef2ba2300e389cb03243d4c862868eee222db2988dbe8c33c27cf5188f49c1d93501f096562609 0009-misc-apds990x-convert-to-iio.patch
73fb2aae3ca58dba512dc2b252affb7fdda8ad33973ab964e73ff40f8f5de0d3192ca6f36c971a07fd5a14a279cab37eaad6bb92b918d1e9a1b8bc5725d758c2 0010-ARM-dts-N9-Add-support-for-apds990x-ALS-PS.patch
74642fffa8d93add2e9aa07e463bfc9989776c29c293aca82015ea86bc52be73a5a4987c48f837988b2df877395b9f3a21be8c4b7ccdfc480a362daa46b7cd0d 0011-HACK-export-dma-access-functions-needed-by-PVR-drive.patch
b666d18e505bdf9f806f133b0930555ab911cd8625f84b6d2a9caa9cffa805c6fc2c9c0485f9e3dea19b29c7c43cd688d4a5f2d3722d33f67b6435944a164ee0 config-nokia-n9.armhf
a9b2eba95ead1226108bf664f49bcad70be99df7284ba807abdbd86a8dc68ebda6fc5d88c15846009f7748f1ae4d6735477d316bb9f298e7728071dad506b35f RM-696_Pyrenees_SMD_V1_6.raw"