@@ -78,6 +78,12 @@ enum {
78
78
AXIS_MAX ,
79
79
};
80
80
81
+ enum {
82
+ FAN_PRINT ,
83
+ FAN_HBR ,
84
+ FAN_MAX
85
+ };
86
+
81
87
enum {
82
88
T_NOZ ,
83
89
T_BED ,
@@ -109,6 +115,9 @@ typedef struct mk4_cfg_t {
109
115
stm_pin enc_b ;
110
116
stm_pin enc_btn ;
111
117
stm_pin z_min ;
118
+ uint16_t f_rpms [FAN_MAX ];
119
+ stm_pin f_tach [FAN_MAX ];
120
+ bool f_inverted ;
112
121
bool has_at21 ;
113
122
bool has_loadcell ;
114
123
temp_cfg_t temps ;
@@ -167,6 +176,9 @@ static const mk4_cfg_t mk4_027c_cfg = {
167
176
.enc_b = STM_PIN (GPIOD ,12 ),
168
177
.enc_btn = STM_PIN (GPIOG ,3 ),
169
178
.z_min = STM_PIN (GPIOB , 8 ),
179
+ .f_rpms = { 6600 , 7000 },
180
+ .f_tach = {STM_PIN (GPIOE ,10 ), STM_PIN (GPIOE ,14 )},
181
+ .f_inverted = true,
170
182
.has_at21 = true,
171
183
.has_loadcell = true,
172
184
.temps =
@@ -209,6 +221,9 @@ static const mk4_cfg_t mk4_034_cfg = {
209
221
.enc_b = STM_PIN (GPIOD ,12 ),
210
222
.enc_btn = STM_PIN (GPIOG ,3 ),
211
223
.z_min = STM_PIN (GPIOB , 8 ),
224
+ .f_rpms = { 6600 , 7000 },
225
+ .f_tach = {STM_PIN (GPIOE ,10 ), STM_PIN (GPIOE ,14 )},
226
+ .f_inverted = true,
212
227
.has_at21 = true,
213
228
.has_loadcell = true,
214
229
.temps =
@@ -250,6 +265,9 @@ static const mk4_cfg_t mk3v5_cfg = {
250
265
.enc_b = STM_PIN (GPIOD ,12 ),
251
266
.enc_btn = STM_PIN (GPIOG ,3 ),
252
267
.z_min = STM_PIN (GPIOB , 8 ),
268
+ .f_rpms = { 4500 , 7500 },
269
+ .f_tach = {STM_PIN (GPIOA ,10 ), STM_PIN (GPIOE ,10 )},
270
+ .f_inverted = false,
253
271
.has_at21 = false,
254
272
.temps =
255
273
{
@@ -267,7 +285,7 @@ static const mk4_cfg_t mk3v5_cfg = {
267
285
.m_en = { STM_PIN (GPIOB ,9 ), STM_PIN (GPIOB ,9 ), STM_PIN (GPIOB ,8 ), STM_PIN (GPIOD ,10 )},
268
286
.m_diag = { STM_PIN (GPIOG ,9 ), STM_PIN (GPIOE ,13 ), STM_PIN (GPIOB ,4 ), STM_PIN (GPIOD ,14 )},
269
287
.m_select = {STM_PIN (GPIOG ,15 ), STM_PIN (GPIOB ,5 ), STM_PIN (GPIOF ,15 ), STM_PIN (GPIOF ,12 )},
270
- .m_inverted = {0 , 1 ,0 ,1 },
288
+ .m_inverted = {1 ,0 , 1 ,1 },
271
289
.m_spi = STM32_P_SPI3 ,
272
290
.is_400step = false,
273
291
.dm_ver = 34 ,
@@ -291,6 +309,9 @@ static const mk4_cfg_t mk3v9_cfg = {
291
309
.enc_b = STM_PIN (GPIOD ,12 ),
292
310
.enc_btn = STM_PIN (GPIOG ,3 ),
293
311
.z_min = STM_PIN (GPIOB , 8 ),
312
+ .f_rpms = { 6600 , 7000 },
313
+ .f_tach = {STM_PIN (GPIOE ,10 ), STM_PIN (GPIOE ,14 )},
314
+ .f_inverted = true,
294
315
.has_at21 = true,
295
316
.has_loadcell = true,
296
317
.temps =
@@ -762,25 +783,23 @@ static void mk4_init(MachineState *machine)
762
783
763
784
// hotend = fan1
764
785
// print fan = fan0
765
- uint16_t fan_max_rpms [] = { 6600 , 7000 };
766
786
uint8_t fan_pwm_pins [] = { 11 , 9 };
767
- uint8_t fan_tach_pins [] = { 10 , 14 };
768
787
uint8_t fan_labels [] = {'P' ,'E' };
769
788
DeviceState * fanpwm = qdev_new ("software-pwm" );
770
- qdev_prop_set_bit (fanpwm , "is_inverted" , true );
789
+ qdev_prop_set_bit (fanpwm , "is_inverted" , cfg . f_inverted );
771
790
sysbus_realize_and_unref (SYS_BUS_DEVICE (fanpwm ),& error_fatal );
772
791
qdev_connect_gpio_out_named (stm32_soc_get_periph (dev_soc , STM32_P_TIM14 ), "timer" , 0 , qdev_get_gpio_in_named (fanpwm , "tick-in" , 0 ));
773
- for (int i = 0 ; i < 2 ; i ++ )
792
+ for (int i = 0 ; i < FAN_MAX ; i ++ )
774
793
{
775
794
qdev_connect_gpio_out (stm32_soc_get_periph (dev_soc , STM32_P_GPIOE ), fan_pwm_pins [i ],
776
795
qdev_get_gpio_in_named (fanpwm , "gpio-in" ,i )
777
796
);
778
797
dev = qdev_new ("fan" );
779
798
qdev_prop_set_uint8 (dev ,"label" ,fan_labels [i ]);
780
- qdev_prop_set_uint32 (dev , "max_rpm" ,fan_max_rpms [i ]);
799
+ qdev_prop_set_uint32 (dev , "max_rpm" ,cfg . f_rpms [i ]);
781
800
//qdev_prop_set_bit(dev, "is_nonlinear", i); // E is nonlinear.
782
801
sysbus_realize (SYS_BUS_DEVICE (dev ), & error_fatal );
783
- qdev_connect_gpio_out_named (dev , "tach-out" ,0 ,qdev_get_gpio_in (stm32_soc_get_periph (dev_soc , STM32_P_GPIOE ), fan_tach_pins [i ]));
802
+ qdev_connect_gpio_out_named (dev , "tach-out" ,0 ,qdev_get_gpio_in (stm32_soc_get_periph (dev_soc , BANK ( cfg . f_tach [ i ])), PIN ( cfg . f_tach [i ]) ));
784
803
qemu_irq split_fan = qemu_irq_split ( qdev_get_gpio_in_named (dev , "pwm-in" ,0 ), qdev_get_gpio_in_named (db2 , "fan-pwm" ,i ));
785
804
qdev_connect_gpio_out_named (dev , "rpm-out" , 0 , qdev_get_gpio_in_named (db2 ,"fan-rpm" ,i ));
786
805
qdev_connect_gpio_out (fanpwm ,i ,split_fan );
0 commit comments