build/patch/kernel/archive/sunxi-6.1/patches.megous/gnss-ubx-Send-soft-powerdown-message-on-suspend.patch

65 lines
1.7 KiB
Diff

From 24febdd07b59057676dba64529084523127a7a70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Jirman?= <megi@xff.cz>
Date: Wed, 23 Oct 2019 05:08:35 +0200
Subject: [PATCH 041/389] gnss: ubx: Send soft powerdown message on suspend
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
drivers/gnss/ubx.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/drivers/gnss/ubx.c b/drivers/gnss/ubx.c
index c951be202ca2..6f09229da095 100644
--- a/drivers/gnss/ubx.c
+++ b/drivers/gnss/ubx.c
@@ -33,11 +33,46 @@ static int ubx_set_active(struct gnss_serial *gserial)
return 0;
}
+// RXM-PMREQ
+static const u8 ubx_suspend_packet[] = {
+ 0xb5, 0x62, // 'ub'
+ 0x02, 0x41, // message class and id
+ 0x08, 0x00, // message length
+ 0x00, 0x00, 0x00, 0x00, // duration (0 == infinite)
+ 0x02, 0x00, 0x00, 0x00, // flags (backup)
+ 0x4d, 0x3b, // checksum
+};
+
static int ubx_set_standby(struct gnss_serial *gserial)
{
struct ubx_data *data = gnss_serial_get_drvdata(gserial);
int ret;
+#if 0
+ struct serdev_device *serdev = gserial->serdev;
+
+ // we can't know what state the device is in, so first make sure
+ // it's woken up by writing a zero byte to it and then suspend it
+ // for sure
+
+ ret = serdev_device_write(serdev, "", 1, MAX_SCHEDULE_TIMEOUT);
+ if (ret < 0)
+ return ret;
+
+ serdev_device_wait_until_sent(serdev, 0);
+
+ // wait for wakeup
+ mdelay(100);
+
+ ret = serdev_device_write(serdev, ubx_suspend_packet,
+ sizeof(ubx_suspend_packet),
+ MAX_SCHEDULE_TIMEOUT);
+ if (ret < 0 || ret < sizeof(ubx_suspend_packet))
+ return ret;
+
+ serdev_device_wait_until_sent(serdev, 0);
+#endif
+
ret = regulator_disable(data->vcc);
if (ret)
return ret;
--
2.35.3