@@ -78,6 +78,12 @@ enum {
7878 AXIS_MAX ,
7979};
8080
81+ enum {
82+ FAN_PRINT ,
83+ FAN_HBR ,
84+ FAN_MAX
85+ };
86+
8187enum {
8288 T_NOZ ,
8389 T_BED ,
@@ -109,6 +115,9 @@ typedef struct mk4_cfg_t {
109115 stm_pin enc_b ;
110116 stm_pin enc_btn ;
111117 stm_pin z_min ;
118+ uint16_t f_rpms [FAN_MAX ];
119+ stm_pin f_tach [FAN_MAX ];
120+ bool f_inverted ;
112121 bool has_at21 ;
113122 bool has_loadcell ;
114123 temp_cfg_t temps ;
@@ -167,6 +176,9 @@ static const mk4_cfg_t mk4_027c_cfg = {
167176 .enc_b = STM_PIN (GPIOD ,12 ),
168177 .enc_btn = STM_PIN (GPIOG ,3 ),
169178 .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,
170182 .has_at21 = true,
171183 .has_loadcell = true,
172184 .temps =
@@ -209,6 +221,9 @@ static const mk4_cfg_t mk4_034_cfg = {
209221 .enc_b = STM_PIN (GPIOD ,12 ),
210222 .enc_btn = STM_PIN (GPIOG ,3 ),
211223 .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,
212227 .has_at21 = true,
213228 .has_loadcell = true,
214229 .temps =
@@ -250,6 +265,9 @@ static const mk4_cfg_t mk3v5_cfg = {
250265 .enc_b = STM_PIN (GPIOD ,12 ),
251266 .enc_btn = STM_PIN (GPIOG ,3 ),
252267 .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,
253271 .has_at21 = false,
254272 .temps =
255273 {
@@ -267,7 +285,7 @@ static const mk4_cfg_t mk3v5_cfg = {
267285 .m_en = { STM_PIN (GPIOB ,9 ), STM_PIN (GPIOB ,9 ), STM_PIN (GPIOB ,8 ), STM_PIN (GPIOD ,10 )},
268286 .m_diag = { STM_PIN (GPIOG ,9 ), STM_PIN (GPIOE ,13 ), STM_PIN (GPIOB ,4 ), STM_PIN (GPIOD ,14 )},
269287 .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 },
271289 .m_spi = STM32_P_SPI3 ,
272290 .is_400step = false,
273291 .dm_ver = 34 ,
@@ -291,6 +309,9 @@ static const mk4_cfg_t mk3v9_cfg = {
291309 .enc_b = STM_PIN (GPIOD ,12 ),
292310 .enc_btn = STM_PIN (GPIOG ,3 ),
293311 .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,
294315 .has_at21 = true,
295316 .has_loadcell = true,
296317 .temps =
@@ -762,25 +783,23 @@ static void mk4_init(MachineState *machine)
762783
763784 // hotend = fan1
764785 // print fan = fan0
765- uint16_t fan_max_rpms [] = { 6600 , 7000 };
766786 uint8_t fan_pwm_pins [] = { 11 , 9 };
767- uint8_t fan_tach_pins [] = { 10 , 14 };
768787 uint8_t fan_labels [] = {'P' ,'E' };
769788 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 );
771790 sysbus_realize_and_unref (SYS_BUS_DEVICE (fanpwm ),& error_fatal );
772791 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 ++ )
774793 {
775794 qdev_connect_gpio_out (stm32_soc_get_periph (dev_soc , STM32_P_GPIOE ), fan_pwm_pins [i ],
776795 qdev_get_gpio_in_named (fanpwm , "gpio-in" ,i )
777796 );
778797 dev = qdev_new ("fan" );
779798 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 ]);
781800 //qdev_prop_set_bit(dev, "is_nonlinear", i); // E is nonlinear.
782801 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 ]) ));
784803 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 ));
785804 qdev_connect_gpio_out_named (dev , "rpm-out" , 0 , qdev_get_gpio_in_named (db2 ,"fan-rpm" ,i ));
786805 qdev_connect_gpio_out (fanpwm ,i ,split_fan );
0 commit comments