mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-25 03:16:26 +00:00
Compare commits
7 Commits
b96492cbe4
...
d0121ff282
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d0121ff282 | ||
![]() |
d2598ed841 | ||
![]() |
d239e28030 | ||
![]() |
e771eba3ab | ||
![]() |
50bae9e48f | ||
![]() |
6e8265c5dd | ||
![]() |
96d5ba5c5e |
@ -169,6 +169,166 @@ eiointc: interrupt-controller@1fe11600 {
|
||||
interrupts = <3>;
|
||||
};
|
||||
|
||||
pwm@1ff5c000 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c000 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c010 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c010 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c020 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c020 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c030 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c030 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c040 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c040 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c050 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c050 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c060 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c060 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c070 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c070 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c080 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c080 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <26 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c090 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c090 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <26 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c0a0 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c0a0 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <26 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c0b0 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c0b0 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <26 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c0c0 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c0c0 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c0d0 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c0d0 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c0e0 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c0e0 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1ff5c0f0 {
|
||||
compatible = "loongson,ls2k0500-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1ff5c0f0 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gmac0: ethernet@1f020000 {
|
||||
compatible = "snps,dwmac-3.70a";
|
||||
reg = <0x0 0x1f020000 0x0 0x10000>;
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "dt-bindings/thermal/thermal.h"
|
||||
#include "loongson-2k1000.dtsi"
|
||||
|
||||
/ {
|
||||
@ -38,6 +39,13 @@ linux,cma {
|
||||
linux,cma-default;
|
||||
};
|
||||
};
|
||||
|
||||
fan0: pwm-fan {
|
||||
compatible = "pwm-fan";
|
||||
cooling-levels = <255 153 85 25>;
|
||||
pwms = <&pwm1 0 100000 0>;
|
||||
#cooling-cells = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
&gmac0 {
|
||||
@ -92,6 +100,22 @@ &spi0 {
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
&pwm1 {
|
||||
status = "okay";
|
||||
|
||||
pinctrl-0 = <&pwm1_pins_default>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&cpu_thermal {
|
||||
cooling-maps {
|
||||
map0 {
|
||||
trip = <&cpu_alert>;
|
||||
cooling-device = <&fan0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&ehci0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -68,7 +68,7 @@ i2c-gpio-1 {
|
||||
};
|
||||
|
||||
thermal-zones {
|
||||
cpu-thermal {
|
||||
cpu_thermal: cpu-thermal {
|
||||
polling-delay-passive = <1000>;
|
||||
polling-delay = <5000>;
|
||||
thermal-sensors = <&tsensor 0>;
|
||||
@ -322,6 +322,46 @@ i2c3: i2c@1fe21800 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1fe22000 {
|
||||
compatible = "loongson,ls2k1000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1fe22000 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm1: pwm@1fe22010 {
|
||||
compatible = "loongson,ls2k1000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1fe22010 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1fe22020 {
|
||||
compatible = "loongson,ls2k1000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1fe22020 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <26 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@1fe22030 {
|
||||
compatible = "loongson,ls2k1000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x1fe22030 0x0 0x10>;
|
||||
interrupt-parent = <&liointc0>;
|
||||
interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_APB_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pmc: power-management@1fe27000 {
|
||||
compatible = "loongson,ls2k1000-pmc", "loongson,ls2k0500-pmc", "syscon";
|
||||
reg = <0x0 0x1fe27000 0x0 0x58>;
|
||||
|
@ -165,6 +165,66 @@ msi: msi-controller@1fe01140 {
|
||||
interrupt-parent = <&eiointc>;
|
||||
};
|
||||
|
||||
pwm@100a0000 {
|
||||
compatible = "loongson,ls2k2000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x100a0000 0x0 0x10>;
|
||||
interrupt-parent = <&pic>;
|
||||
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_MISC_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@100a0100 {
|
||||
compatible = "loongson,ls2k2000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x100a0100 0x0 0x10>;
|
||||
interrupt-parent = <&pic>;
|
||||
interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_MISC_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@100a0200 {
|
||||
compatible = "loongson,ls2k2000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x100a0200 0x0 0x10>;
|
||||
interrupt-parent = <&pic>;
|
||||
interrupts = <26 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_MISC_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@100a0300 {
|
||||
compatible = "loongson,ls2k2000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x100a0300 0x0 0x10>;
|
||||
interrupt-parent = <&pic>;
|
||||
interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_MISC_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@100a0400 {
|
||||
compatible = "loongson,ls2k2000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x100a0400 0x0 0x10>;
|
||||
interrupt-parent = <&pic>;
|
||||
interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_MISC_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm@100a0500 {
|
||||
compatible = "loongson,ls2k2000-pwm", "loongson,ls7a-pwm";
|
||||
reg = <0x0 0x100a0500 0x0 0x10>;
|
||||
interrupt-parent = <&pic>;
|
||||
interrupts = <39 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk LOONGSON2_MISC_CLK>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
rtc0: rtc@100d0100 {
|
||||
compatible = "loongson,ls2k2000-rtc", "loongson,ls7a-rtc";
|
||||
reg = <0x0 0x100d0100 0x0 0x100>;
|
||||
|
@ -20,7 +20,7 @@ static __always_inline ssize_t getrandom_syscall(void *_buffer, size_t _len, uns
|
||||
|
||||
asm volatile(
|
||||
" syscall 0\n"
|
||||
: "+r" (ret)
|
||||
: "=r" (ret)
|
||||
: "r" (nr), "r" (buffer), "r" (len), "r" (flags)
|
||||
: "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8",
|
||||
"memory");
|
||||
|
@ -25,7 +25,7 @@ static __always_inline long gettimeofday_fallback(
|
||||
|
||||
asm volatile(
|
||||
" syscall 0\n"
|
||||
: "+r" (ret)
|
||||
: "=r" (ret)
|
||||
: "r" (nr), "r" (tv), "r" (tz)
|
||||
: "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7",
|
||||
"$t8", "memory");
|
||||
@ -44,7 +44,7 @@ static __always_inline long clock_gettime_fallback(
|
||||
|
||||
asm volatile(
|
||||
" syscall 0\n"
|
||||
: "+r" (ret)
|
||||
: "=r" (ret)
|
||||
: "r" (nr), "r" (clkid), "r" (ts)
|
||||
: "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7",
|
||||
"$t8", "memory");
|
||||
@ -63,7 +63,7 @@ static __always_inline int clock_getres_fallback(
|
||||
|
||||
asm volatile(
|
||||
" syscall 0\n"
|
||||
: "+r" (ret)
|
||||
: "=r" (ret)
|
||||
: "r" (nr), "r" (clkid), "r" (ts)
|
||||
: "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7",
|
||||
"$t8", "memory");
|
||||
|
@ -56,8 +56,7 @@ static struct input_dev *generic_inputdev;
|
||||
static acpi_handle hotkey_handle;
|
||||
static struct key_entry hotkey_keycode_map[GENERIC_HOTKEY_MAP_MAX];
|
||||
|
||||
int loongson_laptop_turn_on_backlight(void);
|
||||
int loongson_laptop_turn_off_backlight(void);
|
||||
static bool bl_powered;
|
||||
static int loongson_laptop_backlight_update(struct backlight_device *bd);
|
||||
|
||||
/* 2. ACPI Helpers and device model */
|
||||
@ -354,16 +353,41 @@ static int ec_backlight_level(u8 level)
|
||||
return level;
|
||||
}
|
||||
|
||||
static int ec_backlight_set_power(bool state)
|
||||
{
|
||||
int status;
|
||||
union acpi_object arg0 = { ACPI_TYPE_INTEGER };
|
||||
struct acpi_object_list args = { 1, &arg0 };
|
||||
|
||||
arg0.integer.value = state;
|
||||
status = acpi_evaluate_object(NULL, "\\BLSW", &args, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
pr_info("Loongson lvds error: 0x%x\n", status);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int loongson_laptop_backlight_update(struct backlight_device *bd)
|
||||
{
|
||||
int lvl = ec_backlight_level(bd->props.brightness);
|
||||
bool target_powered = !backlight_is_blank(bd);
|
||||
int ret = 0, lvl = ec_backlight_level(bd->props.brightness);
|
||||
|
||||
if (lvl < 0)
|
||||
return -EIO;
|
||||
if (ec_set_brightness(lvl))
|
||||
return -EIO;
|
||||
|
||||
return 0;
|
||||
if (target_powered == bl_powered) {
|
||||
ret = ec_set_brightness(lvl);
|
||||
} else {
|
||||
ret = ec_backlight_set_power(target_powered);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
bl_powered = target_powered;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int loongson_laptop_get_brightness(struct backlight_device *bd)
|
||||
@ -384,7 +408,7 @@ static const struct backlight_ops backlight_laptop_ops = {
|
||||
|
||||
static int laptop_backlight_register(void)
|
||||
{
|
||||
int status = 0;
|
||||
int status = 0, ret;
|
||||
struct backlight_properties props;
|
||||
|
||||
memset(&props, 0, sizeof(props));
|
||||
@ -392,44 +416,20 @@ static int laptop_backlight_register(void)
|
||||
if (!acpi_evalf(hotkey_handle, &status, "ECLL", "d"))
|
||||
return -EIO;
|
||||
|
||||
props.brightness = 1;
|
||||
ret = ec_backlight_set_power(true);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
bl_powered = true;
|
||||
|
||||
props.max_brightness = status;
|
||||
props.brightness = ec_get_brightness();
|
||||
props.power = BACKLIGHT_POWER_ON;
|
||||
props.type = BACKLIGHT_PLATFORM;
|
||||
|
||||
backlight_device_register("loongson_laptop",
|
||||
NULL, NULL, &backlight_laptop_ops, &props);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int loongson_laptop_turn_on_backlight(void)
|
||||
{
|
||||
int status;
|
||||
union acpi_object arg0 = { ACPI_TYPE_INTEGER };
|
||||
struct acpi_object_list args = { 1, &arg0 };
|
||||
|
||||
arg0.integer.value = 1;
|
||||
status = acpi_evaluate_object(NULL, "\\BLSW", &args, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
pr_info("Loongson lvds error: 0x%x\n", status);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int loongson_laptop_turn_off_backlight(void)
|
||||
{
|
||||
int status;
|
||||
union acpi_object arg0 = { ACPI_TYPE_INTEGER };
|
||||
struct acpi_object_list args = { 1, &arg0 };
|
||||
|
||||
arg0.integer.value = 0;
|
||||
status = acpi_evaluate_object(NULL, "\\BLSW", &args, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
pr_info("Loongson lvds error: 0x%x\n", status);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -611,11 +611,17 @@ static int __init generic_acpi_laptop_init(void)
|
||||
|
||||
static void __exit generic_acpi_laptop_exit(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (generic_inputdev) {
|
||||
if (input_device_registered)
|
||||
input_unregister_device(generic_inputdev);
|
||||
else
|
||||
if (!input_device_registered) {
|
||||
input_free_device(generic_inputdev);
|
||||
} else {
|
||||
input_unregister_device(generic_inputdev);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(generic_sub_drivers); i++)
|
||||
generic_subdriver_exit(&generic_sub_drivers[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user