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:
parent
9b18e344dd
commit
ed03333008
16 changed files with 1129 additions and 1655 deletions
|
@ -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"
|
||||
|
|
|
@ -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
652
device/linux-nokia-n9/0001-SREv2.patch
Normal file
652
device/linux-nokia-n9/0001-SREv2.patch
Normal 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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue