linux-postmarketos-allwinner: upgrade to 5.9.3 (MR 1678)
Co-Authored-By: Oliver Smith <ollieparanoid@postmarketos.org>
This commit is contained in:
parent
4d4bca4f8b
commit
8e5c217d4a
5 changed files with 5 additions and 511 deletions
|
@ -1,35 +0,0 @@
|
|||
From 3ed430f6b94479c7b4d26323b5fe6381ca11c0e4 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Lindgren <tony@atomide.com>
|
||||
Date: Tue, 27 Oct 2020 13:18:57 +0530
|
||||
Subject: [PATCH] usb: musb: avoid the hang in musb_pm_runtime_check_session
|
||||
|
||||
See thread at: https://lore.kernel.org/linux-usb/20201027045519.GA947883@aquila.localdomain/
|
||||
---
|
||||
drivers/usb/musb/musb_core.c | 11 +++++++----
|
||||
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
|
||||
index 384a8039a7fd5..fe87046d8b28a 100644
|
||||
--- a/drivers/usb/musb/musb_core.c
|
||||
+++ b/drivers/usb/musb/musb_core.c
|
||||
@@ -2005,10 +2005,13 @@ static void musb_pm_runtime_check_session(struct musb *musb)
|
||||
MUSB_DEVCTL_HR;
|
||||
switch (devctl & ~s) {
|
||||
case MUSB_QUIRK_B_DISCONNECT_99:
|
||||
- musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n");
|
||||
- schedule_delayed_work(&musb->irq_work,
|
||||
- msecs_to_jiffies(1000));
|
||||
- break;
|
||||
+ if (musb->quirk_retries && !musb->flush_irq_work) {
|
||||
+ musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n");
|
||||
+ schedule_delayed_work(&musb->irq_work,
|
||||
+ msecs_to_jiffies(1000));
|
||||
+ musb->quirk_retries--;
|
||||
+ break;
|
||||
+ }
|
||||
case MUSB_QUIRK_B_INVALID_VBUS_91:
|
||||
if (musb->quirk_retries && !musb->flush_irq_work) {
|
||||
musb_dbg(musb,
|
||||
--
|
||||
2.29.1
|
||||
|
|
@ -1,390 +0,0 @@
|
|||
From efe1edc1f5ddbdfd06f57c812874cb43b99ba79d Mon Sep 17 00:00:00 2001
|
||||
From: Martijn Braam <martijn@brixit.nl>
|
||||
Date: Mon, 28 Sep 2020 14:26:11 +0200
|
||||
Subject: [PATCH] media: ov5640: Implement autofocus
|
||||
|
||||
The autofocus functionality needs a firmware blob loaded into the
|
||||
internal microcontroller.
|
||||
|
||||
V4L2 doesn't have an api to control all autofocus functionality, but
|
||||
this at least makes it possible to focus on the center of the sensor.
|
||||
|
||||
Signed-off-by: Martijn Braam <martijn@brixit.nl>
|
||||
---
|
||||
drivers/media/i2c/ov5640.c | 254 +++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 254 insertions(+)
|
||||
|
||||
diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
|
||||
index 16ecde24a192..74cdaa977551 100644
|
||||
--- a/drivers/media/i2c/ov5640.c
|
||||
+++ b/drivers/media/i2c/ov5640.c
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/delay.h>
|
||||
+#include <linux/firmware.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/i2c.h>
|
||||
@@ -31,7 +32,11 @@
|
||||
|
||||
#define OV5640_DEFAULT_SLAVE_ID 0x3c
|
||||
|
||||
+#define OV5640_REG_SYS_RESET00 0x3000
|
||||
+#define OV5640_REG_SYS_RESET01 0x3001
|
||||
#define OV5640_REG_SYS_RESET02 0x3002
|
||||
+#define OV5640_REG_SYS_CLOCK_ENABLE00 0x3004
|
||||
+#define OV5640_REG_SYS_CLOCK_ENABLE01 0x3005
|
||||
#define OV5640_REG_SYS_CLOCK_ENABLE02 0x3006
|
||||
#define OV5640_REG_SYS_CTRL0 0x3008
|
||||
#define OV5640_REG_CHIP_ID 0x300a
|
||||
@@ -39,6 +44,14 @@
|
||||
#define OV5640_REG_PAD_OUTPUT_ENABLE01 0x3017
|
||||
#define OV5640_REG_PAD_OUTPUT_ENABLE02 0x3018
|
||||
#define OV5640_REG_PAD_OUTPUT00 0x3019
|
||||
+#define OV5640_REG_FW_CMD_MAIN 0x3022
|
||||
+#define OV5640_REG_FW_CMD_ACK 0x3023
|
||||
+#define OV5640_REG_FW_CMD_PARA0 0x3024
|
||||
+#define OV5640_REG_FW_CMD_PARA1 0x3025
|
||||
+#define OV5640_REG_FW_CMD_PARA2 0x3026
|
||||
+#define OV5640_REG_FW_CMD_PARA3 0x3027
|
||||
+#define OV5640_REG_FW_CMD_PARA4 0x3028
|
||||
+#define OV5640_REG_FW_STATUS 0x3029
|
||||
#define OV5640_REG_SYSTEM_CONTROL1 0x302e
|
||||
#define OV5640_REG_SC_PLL_CTRL0 0x3034
|
||||
#define OV5640_REG_SC_PLL_CTRL1 0x3035
|
||||
@@ -57,6 +70,7 @@
|
||||
#define OV5640_REG_AEC_PK_MANUAL 0x3503
|
||||
#define OV5640_REG_AEC_PK_REAL_GAIN 0x350a
|
||||
#define OV5640_REG_AEC_PK_VTS 0x350c
|
||||
+#define OV5640_REG_VCM_CONTROL4 0x3606
|
||||
#define OV5640_REG_TIMING_DVPHO 0x3808
|
||||
#define OV5640_REG_TIMING_DVPVO 0x380a
|
||||
#define OV5640_REG_TIMING_HTS 0x380c
|
||||
@@ -93,6 +107,20 @@
|
||||
#define OV5640_REG_SDE_CTRL4 0x5584
|
||||
#define OV5640_REG_SDE_CTRL5 0x5585
|
||||
#define OV5640_REG_AVG_READOUT 0x56a1
|
||||
+#define OV5640_REG_FIRMWARE_BASE 0x8000
|
||||
+
|
||||
+#define OV5640_FW_STATUS_S_FIRMWARE 0x7f
|
||||
+#define OV5640_FW_STATUS_S_STARTUP 0x7e
|
||||
+#define OV5640_FW_STATUS_S_IDLE 0x70
|
||||
+#define OV5640_FW_STATUS_S_FOCUSING 0x00
|
||||
+#define OV5640_FW_STATUS_S_FOCUSED 0x10
|
||||
+
|
||||
+#define OV5640_FW_CMD_TRIGGER_FOCUS 0x03
|
||||
+#define OV5640_FW_CMD_CONTINUOUS_FOCUS 0x04
|
||||
+#define OV5640_FW_CMD_GET_FOCUS_RESULT 0x07
|
||||
+#define OV5640_FW_CMD_RELEASE_FOCUS 0x08
|
||||
+#define OV5640_FW_CMD_ZONE_CONFIG 0x12
|
||||
+#define OV5640_FW_CMD_DEFAULT_ZONES 0x80
|
||||
|
||||
enum ov5640_mode_id {
|
||||
OV5640_MODE_QCIF_176_144 = 0,
|
||||
@@ -216,6 +244,12 @@ struct ov5640_ctrls {
|
||||
struct v4l2_ctrl *auto_gain;
|
||||
struct v4l2_ctrl *gain;
|
||||
};
|
||||
+ struct {
|
||||
+ struct v4l2_ctrl *focus_auto;
|
||||
+ struct v4l2_ctrl *af_start;
|
||||
+ struct v4l2_ctrl *af_stop;
|
||||
+ struct v4l2_ctrl *af_status;
|
||||
+ };
|
||||
struct v4l2_ctrl *brightness;
|
||||
struct v4l2_ctrl *light_freq;
|
||||
struct v4l2_ctrl *saturation;
|
||||
@@ -259,6 +293,8 @@ struct ov5640_dev {
|
||||
|
||||
bool pending_mode_change;
|
||||
bool streaming;
|
||||
+
|
||||
+ bool af_initialized;
|
||||
};
|
||||
|
||||
static inline struct ov5640_dev *to_ov5640_dev(struct v4l2_subdev *sd)
|
||||
@@ -1982,6 +2018,99 @@ static void ov5640_reset(struct ov5640_dev *sensor)
|
||||
usleep_range(20000, 25000);
|
||||
}
|
||||
|
||||
+static int ov5640_copy_fw_to_device(struct ov5640_dev *sensor,
|
||||
+ const struct firmware *fw)
|
||||
+{
|
||||
+ struct i2c_client *client = sensor->i2c_client;
|
||||
+ const u8 *data = (const u8 *)fw->data;
|
||||
+ u8 fw_status;
|
||||
+ int i;
|
||||
+ int ret;
|
||||
+
|
||||
+ // Putting MCU in reset state
|
||||
+ ret = ov5640_write_reg(sensor, OV5640_REG_SYS_RESET00, 0x20);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ // Write firmware
|
||||
+ for (i = 0; i < fw->size / sizeof(u8); i++)
|
||||
+ ov5640_write_reg(sensor,
|
||||
+ OV5640_REG_FIRMWARE_BASE + i,
|
||||
+ data[i]);
|
||||
+
|
||||
+ // Reset MCU state
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_FW_CMD_MAIN, 0x00);
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_FW_CMD_ACK, 0x00);
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_FW_CMD_PARA0, 0x00);
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_FW_CMD_PARA1, 0x00);
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_FW_CMD_PARA2, 0x00);
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_FW_CMD_PARA3, 0x00);
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_FW_CMD_PARA4, 0x00);
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_FW_STATUS, 0x7f);
|
||||
+
|
||||
+ // Start AF MCU
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_SYS_RESET00, 0x00);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ dev_info(&client->dev, "firmware upload success\n");
|
||||
+
|
||||
+ // Wait for firmware to be ready
|
||||
+ for (i = 0; i < 100; i++) {
|
||||
+ ret = ov5640_read_reg(sensor, OV5640_REG_FW_STATUS, &fw_status);
|
||||
+ if (fw_status == OV5640_FW_STATUS_S_IDLE) {
|
||||
+ dev_info(&client->dev, "fw started after %d ms\n", i * 50);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ msleep(50);
|
||||
+ }
|
||||
+ dev_err(&client->dev, "uploaded firmware didn't start, got to 0x%x\n", fw_status);
|
||||
+ return -ETIMEDOUT;
|
||||
+}
|
||||
+
|
||||
+static int ov5640_af_init(struct ov5640_dev *sensor)
|
||||
+{
|
||||
+ struct i2c_client *client = sensor->i2c_client;
|
||||
+ const char* fwname = "ov5640_af.bin";
|
||||
+ const struct firmware *fw;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (sensor->af_initialized) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (firmware_request_nowarn(&fw, fwname, &client->dev) == 0) {
|
||||
+ ret = ov5640_copy_fw_to_device(sensor, fw);
|
||||
+ if (ret == 0)
|
||||
+ sensor->af_initialized = 1;
|
||||
+ } else {
|
||||
+ dev_warn(&client->dev, "%s: no autofocus firmware available (%s)\n",
|
||||
+ __func__, fwname);
|
||||
+ ret = -1;
|
||||
+ }
|
||||
+ release_firmware(fw);
|
||||
+
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ // Enable AF systems
|
||||
+ ret = ov5640_mod_reg(sensor, OV5640_REG_SYS_CLOCK_ENABLE00,
|
||||
+ (BIT(6) | BIT(5)), (BIT(6) | BIT(5)));
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ ret = ov5640_mod_reg(sensor, OV5640_REG_SYS_CLOCK_ENABLE01,
|
||||
+ BIT(6), BIT(6));
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ // Set lens focus driver on
|
||||
+ ov5640_write_reg(sensor, OV5640_REG_VCM_CONTROL4, 0x3f);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int ov5640_set_power_on(struct ov5640_dev *sensor)
|
||||
{
|
||||
struct i2c_client *client = sensor->i2c_client;
|
||||
@@ -2003,6 +2132,8 @@ static int ov5640_set_power_on(struct ov5640_dev *sensor)
|
||||
goto xclk_off;
|
||||
}
|
||||
|
||||
+ sensor->af_initialized = 0;
|
||||
+
|
||||
ov5640_reset(sensor);
|
||||
ov5640_power(sensor, true);
|
||||
|
||||
@@ -2392,6 +2523,35 @@ static int ov5640_set_framefmt(struct ov5640_dev *sensor,
|
||||
is_jpeg ? (BIT(5) | BIT(3)) : 0);
|
||||
}
|
||||
|
||||
+static int ov5640_fw_command(struct ov5640_dev *sensor, int command)
|
||||
+{
|
||||
+ u8 fw_ack;
|
||||
+ int i;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = ov5640_write_reg(sensor, OV5640_REG_FW_CMD_ACK, 0x01);
|
||||
+ if(ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = ov5640_write_reg(sensor, OV5640_REG_FW_CMD_MAIN, command);
|
||||
+ if(ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ for (i = 0; i < 100; i++) {
|
||||
+ ret = ov5640_read_reg(sensor, OV5640_REG_FW_CMD_ACK, &fw_ack);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (fw_ack == 0){
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ msleep(50);
|
||||
+ }
|
||||
+ return -ETIMEDOUT;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/*
|
||||
* Sensor Controls.
|
||||
*/
|
||||
@@ -2508,6 +2668,41 @@ static int ov5640_set_ctrl_exposure(struct ov5640_dev *sensor,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int ov5640_set_ctrl_focus(struct ov5640_dev *sensor, int command)
|
||||
+{
|
||||
+ struct i2c_client *client = sensor->i2c_client;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = ov5640_af_init(sensor);
|
||||
+ if (ret) {
|
||||
+ dev_err(&client->dev, "%s: no autofocus firmware loaded\n",
|
||||
+ __func__);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (command == OV5640_FW_CMD_RELEASE_FOCUS) {
|
||||
+ dev_dbg(&client->dev, "%s: Releasing autofocus\n",
|
||||
+ __func__);
|
||||
+ return ov5640_fw_command(sensor, OV5640_FW_CMD_RELEASE_FOCUS);
|
||||
+ }
|
||||
+
|
||||
+ // Restart zone config
|
||||
+ ret = ov5640_fw_command(sensor, OV5640_FW_CMD_ZONE_CONFIG);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ // Set default focus zones
|
||||
+ ret = ov5640_fw_command(sensor, OV5640_FW_CMD_DEFAULT_ZONES);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ dev_dbg(&client->dev, "%s: Triggering autofocus\n",
|
||||
+ __func__);
|
||||
+
|
||||
+ // Start focussing
|
||||
+ return ov5640_fw_command(sensor, command);
|
||||
+}
|
||||
+
|
||||
static int ov5640_set_ctrl_gain(struct ov5640_dev *sensor, bool auto_gain)
|
||||
{
|
||||
struct ov5640_ctrls *ctrls = &sensor->ctrls;
|
||||
@@ -2614,6 +2809,32 @@ static int ov5640_set_ctrl_vflip(struct ov5640_dev *sensor, int value)
|
||||
(BIT(2) | BIT(1)) : 0);
|
||||
}
|
||||
|
||||
+static int ov5640_get_af_status(struct ov5640_dev *sensor)
|
||||
+{
|
||||
+ u8 fw_status;
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = ov5640_read_reg(sensor, OV5640_REG_FW_STATUS, &fw_status);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ switch (fw_status) {
|
||||
+ case OV5640_FW_STATUS_S_FIRMWARE:
|
||||
+ case OV5640_FW_STATUS_S_STARTUP:
|
||||
+ return V4L2_AUTO_FOCUS_STATUS_FAILED;
|
||||
+ break;
|
||||
+ case OV5640_FW_STATUS_S_IDLE:
|
||||
+ return V4L2_AUTO_FOCUS_STATUS_IDLE;
|
||||
+ break;
|
||||
+ case OV5640_FW_STATUS_S_FOCUSED:
|
||||
+ return V4L2_AUTO_FOCUS_STATUS_REACHED;
|
||||
+ break;
|
||||
+ default:
|
||||
+ return V4L2_AUTO_FOCUS_STATUS_BUSY;
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int ov5640_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct v4l2_subdev *sd = ctrl_to_sd(ctrl);
|
||||
@@ -2635,6 +2856,12 @@ static int ov5640_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
|
||||
return val;
|
||||
sensor->ctrls.exposure->val = val;
|
||||
break;
|
||||
+ case V4L2_CID_FOCUS_AUTO:
|
||||
+ val = ov5640_get_af_status(sensor);
|
||||
+ if (val < 0)
|
||||
+ return val;
|
||||
+ sensor->ctrls.af_status->val = val;
|
||||
+ break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -2666,6 +2893,18 @@ static int ov5640_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
case V4L2_CID_AUTO_WHITE_BALANCE:
|
||||
ret = ov5640_set_ctrl_white_balance(sensor, ctrl->val);
|
||||
break;
|
||||
+ case V4L2_CID_FOCUS_AUTO:
|
||||
+ if (ctrl->val)
|
||||
+ ret = ov5640_set_ctrl_focus(sensor, OV5640_FW_CMD_CONTINUOUS_FOCUS);
|
||||
+ else
|
||||
+ ret = ov5640_set_ctrl_focus(sensor, OV5640_FW_CMD_RELEASE_FOCUS);
|
||||
+ break;
|
||||
+ case V4L2_CID_AUTO_FOCUS_START:
|
||||
+ ret = ov5640_set_ctrl_focus(sensor, OV5640_FW_CMD_TRIGGER_FOCUS);
|
||||
+ break;
|
||||
+ case V4L2_CID_AUTO_FOCUS_STOP:
|
||||
+ ret = ov5640_set_ctrl_focus(sensor, OV5640_FW_CMD_RELEASE_FOCUS);
|
||||
+ break;
|
||||
case V4L2_CID_HUE:
|
||||
ret = ov5640_set_ctrl_hue(sensor, ctrl->val);
|
||||
break;
|
||||
@@ -2738,6 +2977,20 @@ static int ov5640_init_controls(struct ov5640_dev *sensor)
|
||||
ctrls->gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_GAIN,
|
||||
0, 1023, 1, 0);
|
||||
|
||||
+ /* Autofocus */
|
||||
+ ctrls->focus_auto = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FOCUS_AUTO,
|
||||
+ 0, 1, 1, 0);
|
||||
+ ctrls->af_start = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_AUTO_FOCUS_START,
|
||||
+ 0, 1, 1, 0);
|
||||
+ ctrls->af_stop = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_AUTO_FOCUS_STOP,
|
||||
+ 0, 1, 1, 0);
|
||||
+ ctrls->af_status = v4l2_ctrl_new_std(hdl, ops,
|
||||
+ V4L2_CID_AUTO_FOCUS_STATUS, 0,
|
||||
+ (V4L2_AUTO_FOCUS_STATUS_BUSY |
|
||||
+ V4L2_AUTO_FOCUS_STATUS_REACHED |
|
||||
+ V4L2_AUTO_FOCUS_STATUS_FAILED),
|
||||
+ 0, V4L2_AUTO_FOCUS_STATUS_IDLE);
|
||||
+
|
||||
ctrls->saturation = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_SATURATION,
|
||||
0, 255, 1, 64);
|
||||
ctrls->hue = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_HUE,
|
||||
@@ -2771,6 +3024,7 @@ static int ov5640_init_controls(struct ov5640_dev *sensor)
|
||||
v4l2_ctrl_auto_cluster(3, &ctrls->auto_wb, 0, false);
|
||||
v4l2_ctrl_auto_cluster(2, &ctrls->auto_gain, 0, true);
|
||||
v4l2_ctrl_auto_cluster(2, &ctrls->auto_exp, 1, true);
|
||||
+ v4l2_ctrl_cluster(4, &ctrls->focus_auto);
|
||||
|
||||
sensor->sd.ctrl_handler = hdl;
|
||||
return 0;
|
||||
--
|
||||
GitLab
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
From 29533cb13f24e26e7ddbc044597a3020437352e2 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Thu, 29 Oct 2020 01:13:49 +0100
|
||||
Subject: [PATCH 1/2] drm/sun4i: Fix mipi-dsi panel framerate being 2/3 of the
|
||||
expected value
|
||||
|
||||
This happens on Pinephone and on Pinetab. Both use MIPI-DSI panels.
|
||||
|
||||
On Pinephone framerate is 36.6 instead of expected 55.
|
||||
On Pinetab the similar 2/3 ratio holds.
|
||||
|
||||
Myabe there's a bug in BSP and dclk_div should really be 6 instead of 4.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/gpu/drm/sun4i/sun4i_tcon.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
|
||||
index ab06f5e1fc952..1c56b4fb9ac89 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
|
||||
@@ -398,8 +398,8 @@ static void sun4i_tcon0_mode_set_cpu(struct sun4i_tcon *tcon,
|
||||
u32 block_space, start_delay;
|
||||
u32 tcon_div;
|
||||
|
||||
- tcon->dclk_min_div = SUN6I_DSI_TCON_DIV;
|
||||
- tcon->dclk_max_div = SUN6I_DSI_TCON_DIV;
|
||||
+ tcon->dclk_min_div = 6;
|
||||
+ tcon->dclk_max_div = 6;
|
||||
|
||||
sun4i_tcon0_mode_set_common(tcon, mode);
|
||||
|
||||
--
|
||||
2.29.1
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From e8be2e4affb906af7137437ac62fb3912609c11e Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Thu, 29 Oct 2020 04:55:40 +0100
|
||||
Subject: [PATCH 2/2] drm: panel: st7703: Fix xbd599 timings to make refresh
|
||||
rate exactly 60.006Hz
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
drivers/gpu/drm/panel/panel-sitronix-st7703.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7703.c b/drivers/gpu/drm/panel/panel-sitronix-st7703.c
|
||||
index 4287aabb9007a..070ef2baef6f2 100644
|
||||
--- a/drivers/gpu/drm/panel/panel-sitronix-st7703.c
|
||||
+++ b/drivers/gpu/drm/panel/panel-sitronix-st7703.c
|
||||
@@ -334,14 +334,14 @@ static int xbd599_init_sequence(struct st7703 *ctx)
|
||||
|
||||
static const struct drm_display_mode xbd599_mode = {
|
||||
.hdisplay = 720,
|
||||
- .hsync_start = 720 + 40,
|
||||
- .hsync_end = 720 + 40 + 40,
|
||||
- .htotal = 720 + 40 + 40 + 40,
|
||||
+ .hsync_start = 720 + 30,
|
||||
+ .hsync_end = 720 + 30 + 28,
|
||||
+ .htotal = 720 + 30 + 28 + 30,
|
||||
.vdisplay = 1440,
|
||||
.vsync_start = 1440 + 18,
|
||||
.vsync_end = 1440 + 18 + 10,
|
||||
.vtotal = 1440 + 18 + 10 + 17,
|
||||
- .clock = 69000,
|
||||
+ .clock = 72000,
|
||||
.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
|
||||
.width_mm = 68,
|
||||
.height_mm = 136,
|
||||
--
|
||||
2.29.1
|
||||
|
|
@ -5,9 +5,9 @@
|
|||
_flavor=postmarketos-allwinner
|
||||
_config="config-$_flavor.$CARCH"
|
||||
pkgname=linux-$_flavor
|
||||
pkgver=5.9.1_git20201019
|
||||
pkgrel=4
|
||||
_tag="orange-pi-5.9-20201019-1553"
|
||||
pkgver=5.9.3_git20201101
|
||||
pkgrel=0
|
||||
_tag="orange-pi-5.9-20201101-2057"
|
||||
pkgdesc="Kernel fork with Pine64 patches (megi's tree, slightly patched)"
|
||||
arch="aarch64"
|
||||
_carch="arm64"
|
||||
|
@ -35,10 +35,6 @@ source="$pkgname-$_tag.tar.gz::https://github.com/megous/linux/archive/$_tag.tar
|
|||
0007-dts-pinetab-make-audio-routing-consistent-with-pinep.patch
|
||||
0008-pinetab-bluetooth.patch
|
||||
0009-dts-pinephone-remove-bt-firmware-suffix.patch
|
||||
0010-usb-musb-avoid-the-hang-in-musb_pm_runtime_check_ses.patch
|
||||
0011-media-i2c-ov5640-implement-autofocus.patch
|
||||
0012-drm-sun4i-Fix-mipi-dsi-panel-framerate-being-2-3-of-.patch
|
||||
0013-drm-panel-st7703-Fix-xbd599-timings-to-make-refresh-.patch
|
||||
"
|
||||
subpackages="$pkgname-dev"
|
||||
builddir="$srcdir/linux-$_tag"
|
||||
|
@ -79,7 +75,7 @@ dev() {
|
|||
INSTALL_HDR_PATH="$subpkgdir"/usr
|
||||
}
|
||||
|
||||
sha512sums="fd08e2c580ca2e89513d5d78e09af2c782dc8b06165fa5125ee0ebdafc002f0748c631aaba54415d0dbc520b8b7388f39076de4ce0c6510878089877478dacf0 linux-postmarketos-allwinner-orange-pi-5.9-20201019-1553.tar.gz
|
||||
sha512sums="4b082e90284b8febf2d8379ef0212d899cdbe5ae36e0885446412bc5d7a49e7c970f140d939e54bb10ddb43a5bdfe970a83fbc45749c6dae37e079a6a56e0955 linux-postmarketos-allwinner-orange-pi-5.9-20201101-2057.tar.gz
|
||||
5a145385f31e64518abc760c7012c96a69074ebb87af7640bc6056ce2f7b46aecbfeb4d1f1516e70dceb8934e3f4a25b36b864f7d95d020d5cf8a16e10e006ff config-postmarketos-allwinner.aarch64
|
||||
bfeb383784e495a5d7c58fdd7abf44fa0d3460b48ddae09d69997791bb58beb55da8d04f05f30d12f4bdadbe81d0d5f8781c37a4904c1d7a283da3f7ecbadeda 0001-dts-add-dontbeevil-pinephone-devkit.patch
|
||||
c157e2495a02417c2ef54c9e1788db7b32a111dd412146c4c925f2f489d0b5a94be4b484d71285abe83c4523f1ae1d4ec6f4af0acad922cb676e8a8f07611698 0002-dts-add-pinetab-dev-old-display-panel.patch
|
||||
|
@ -89,8 +85,4 @@ ab72dffc08e56c7ee96f87b30454f38eed6c4deb041f4cc562bdbf358a66821a698517ba9b095e32
|
|||
60322820a6048c95f7a62180f3aa872f929c8c0aa6bc5cecff882cf671c132666ef803c6754e6d6f4b3d4342362ba9901c21cb23e5186601327ea17ac3d97573 0006-dts-pinetab-add-missing-bma223-ohci1.patch
|
||||
36c310b00520650aec1e4ece3e995ab649d79315e5057f85587f3a6b1b5546549599c7db14bbf9b6cba76d87512116e132d0064f14aed0a6b7bbe66856e322d9 0007-dts-pinetab-make-audio-routing-consistent-with-pinep.patch
|
||||
5bb1352b0bf35ff72eb9729248162faa37b0f1fe28c5cf9bd39b54148ff7750ca53d5934d6a128002a7a190180ef8e626733f260db722831ac35e3a5c1b25661 0008-pinetab-bluetooth.patch
|
||||
a392e7b04dc411986b90adf8774ce8f4b77617993e7ca068ea202aa3c925d0ec3bdbd4c395505696816dce6284955bf96901d75833a9b6ca9df544386b07ff65 0009-dts-pinephone-remove-bt-firmware-suffix.patch
|
||||
f222b41c7900609210795c062b6d9f2fd79c9989f9a604d1d67f10e915b3fc18fcfc712f364b343b506461ff717ac9de2b5ec0edd5d69b2c73f9a5461ab4a919 0010-usb-musb-avoid-the-hang-in-musb_pm_runtime_check_ses.patch
|
||||
69d7f6e2123d78910930302a4628c8af5c9baeee4e88873f15334c13dc8ed53425f1aa47c16b1a0ad8525ac396576d0dd5cdd962d645f1273837229ad817f3f3 0011-media-i2c-ov5640-implement-autofocus.patch
|
||||
65210b347455e91cf85fce043ca031ee139500da89bcef05a7c97326705b14a1c59ef1277282fee5507998a6408e4c3b945126cbbf648a3ce69d3c68a995aae2 0012-drm-sun4i-Fix-mipi-dsi-panel-framerate-being-2-3-of-.patch
|
||||
669cf3aaf1c101a924808185bda51f735fadad9e6f5c0485e368347312a36427f7b53430bb08798b8ceb1a661a3ca4a36dd1787cb074a3b40bbb6af02dd32618 0013-drm-panel-st7703-Fix-xbd599-timings-to-make-refresh-.patch"
|
||||
a392e7b04dc411986b90adf8774ce8f4b77617993e7ca068ea202aa3c925d0ec3bdbd4c395505696816dce6284955bf96901d75833a9b6ca9df544386b07ff65 0009-dts-pinephone-remove-bt-firmware-suffix.patch"
|
||||
|
|
Loading…
Reference in a new issue