@@ -131,7 +131,7 @@ static void mcp2515_convert_zcanframe_to_mcp2515frame(const struct zcan_frame
131131}
132132
133133static  void  mcp2515_convert_mcp2515frame_to_zcanframe (const  u8_t  * source ,
134- 						     struct  zcan_frame  * target )
134+ 						       struct  zcan_frame  * target )
135135{
136136	u8_t  data_idx  =  0U ;
137137
@@ -220,6 +220,10 @@ static int mcp2515_configure(struct device *dev, enum can_mode mode,
220220	/* CNF3, CNF2, CNF1, CANINTE */ 
221221	u8_t  config_buf [4 ];
222222
223+ 	if  (bitrate  ==  0 ) {
224+ 		bitrate  =  dev_cfg -> bus_speed ;
225+ 	}
226+ 
223227	const  u8_t  bit_length  =  1  +  dev_cfg -> tq_prop  +  dev_cfg -> tq_bs1  + 
224228				dev_cfg -> tq_bs2 ;
225229
@@ -257,13 +261,17 @@ static int mcp2515_configure(struct device *dev, enum can_mode mode,
257261	const  u8_t  rx0_ctrl  =  BIT (6 ) | BIT (5 ) | BIT (2 );
258262	const  u8_t  rx1_ctrl  =  BIT (6 ) | BIT (5 );
259263
260- 	__ASSERT ((cfg -> tq_sjw  >= 1 ) &&  (cfg -> tq_sjw  <= 4 ), "1 <= SJW <= 4" );
261- 	__ASSERT ((cfg -> tq_prop  >= 1 ) &&  (cfg -> tq_prop  <= 8 ), "1 <= PROP <= 8" );
262- 	__ASSERT ((cfg -> tq_bs1  >= 1 ) &&  (cfg -> tq_bs1  <= 8 ), "1 <= BS1 <= 8" );
263- 	__ASSERT ((cfg -> tq_bs2  >= 2 ) &&  (cfg -> tq_bs2  <= 8 ), "2 <= BS2 <= 8" );
264- 	__ASSERT (cfg -> tq_prop  +  cfg -> tq_bs1  >= cfg -> tq_bs2 ,
264+ 	__ASSERT ((dev_cfg -> tq_sjw  >= 1 ) &&  (dev_cfg -> tq_sjw  <= 4 ),
265+ 		 "1 <= SJW <= 4" );
266+ 	__ASSERT ((dev_cfg -> tq_prop  >= 1 ) &&  (dev_cfg -> tq_prop  <= 8 ),
267+ 		 "1 <= PROP <= 8" );
268+ 	__ASSERT ((dev_cfg -> tq_bs1  >= 1 ) &&  (dev_cfg -> tq_bs1  <= 8 ),
269+ 		 "1 <= BS1 <= 8" );
270+ 	__ASSERT ((dev_cfg -> tq_bs2  >= 2 ) &&  (dev_cfg -> tq_bs2  <= 8 ),
271+ 		 "2 <= BS2 <= 8" );
272+ 	__ASSERT (dev_cfg -> tq_prop  +  dev_cfg -> tq_bs1  >= dev_cfg -> tq_bs2 ,
265273		 "PROP + BS1 >= BS2" );
266- 	__ASSERT (cfg -> tq_bs2  >  cfg -> tq_sjw , "BS2 > SJW" );
274+ 	__ASSERT (dev_cfg -> tq_bs2  >  dev_cfg -> tq_sjw , "BS2 > SJW" );
267275
268276	if  (CONFIG_CAN_MCP2515_OSC_FREQ  % (bit_length  *  bitrate  *  2 )) {
269277		LOG_ERR ("Prescaler is not a natural number! " 
@@ -292,8 +300,8 @@ static int mcp2515_configure(struct device *dev, enum can_mode mode,
292300				mcp2515_convert_canmode_to_mcp2515mode (mode ));
293301}
294302
295- int  mcp2515_send (struct  device  * dev , struct  zcan_frame  * msg ,  s32_t   timeout ,
296- 		 can_tx_callback_t  callback )
303+ int  mcp2515_send (struct  device  * dev , const   struct  zcan_frame  * msg ,
304+ 		 s32_t   timeout ,  can_tx_callback_t  callback )
297305{
298306	struct  mcp2515_data  * dev_data  =  DEV_DATA (dev );
299307	u8_t  tx_idx  =  0U ;
@@ -519,6 +527,7 @@ static int mcp2515_init(struct device *dev)
519527{
520528	const  struct  mcp2515_config  * dev_cfg  =  DEV_CFG (dev );
521529	struct  mcp2515_data  * dev_data  =  DEV_DATA (dev );
530+ 	int  ret ;
522531
523532	k_sem_init (& dev_data -> int_sem , 0 , UINT_MAX );
524533	k_mutex_init (& dev_data -> tx_mutex );
@@ -539,7 +548,7 @@ static int mcp2515_init(struct device *dev)
539548		return  - EINVAL ;
540549	}
541550
542- #ifdef  CONFIG_CAN_MCP2515_GPIO_SPI_CS 
551+ #ifdef  DT_MICROCHIP_MCP2515_0_CS_GPIO_PIN 
543552	dev_data -> spi_cs_ctrl .gpio_dev  = 
544553		device_get_binding (dev_cfg -> spi_cs_port );
545554	if  (!dev_data -> spi_cs_ctrl .gpio_dev ) {
@@ -553,7 +562,7 @@ static int mcp2515_init(struct device *dev)
553562	dev_data -> spi_cfg .cs  =  & dev_data -> spi_cs_ctrl ;
554563#else 
555564	dev_data -> spi_cfg .cs  =  NULL ;
556- #endif   /* CAN_MCP2515_GPIO_SPI_CS  */ 
565+ #endif   /* DT_MICROCHIP_MCP2515_0_CS_GPIO_PIN  */ 
557566
558567	/* Reset MCP2515 */ 
559568	if  (mcp2515_cmd_soft_reset (dev )) {
@@ -596,7 +605,9 @@ static int mcp2515_init(struct device *dev)
596605		     sizeof (dev_data -> filter_response ));
597606	(void )memset (dev_data -> filter , 0 , sizeof (dev_data -> filter ));
598607
599- 	return  0 ;
608+ 	ret  =  mcp2515_configure (dev , CAN_NORMAL_MODE , dev_cfg -> bus_speed );
609+ 
610+ 	return  ret ;
600611}
601612
602613#ifdef  CONFIG_CAN_1 
@@ -622,14 +633,15 @@ static const struct mcp2515_config mcp2515_config_1 = {
622633	.int_port  =  DT_MICROCHIP_MCP2515_0_INT_GPIOS_CONTROLLER ,
623634	.int_thread_stack_size  =  CONFIG_CAN_MCP2515_INT_THREAD_STACK_SIZE ,
624635	.int_thread_priority  =  CONFIG_CAN_MCP2515_INT_THREAD_PRIO ,
625- #ifdef  CONFIG_CAN_MCP2515_GPIO_SPI_CS 
626- 	.spi_cs_pin  =  DT_MICROCHIP_MCP2515_0_CS_GPIOS_PIN ,
627- 	.spi_cs_port  =  DT_MICROCHIP_MCP2515_0_CS_GPIOS_CONTROLLER ,
628- #endif   /* CAN_MCP2515_GPIO_SPI_CS  */ 
636+ #ifdef  DT_MICROCHIP_MCP2515_0_CS_GPIO_PIN 
637+ 	.spi_cs_pin  =  DT_MICROCHIP_MCP2515_0_CS_GPIO_PIN ,
638+ 	.spi_cs_port  =  DT_MICROCHIP_MCP2515_0_CS_GPIO_CONTROLLER ,
639+ #endif   /* DT_MICROCHIP_MCP2515_0_CS_GPIO_PIN  */ 
629640	.tq_sjw  =  CONFIG_CAN_SJW ,
630641	.tq_prop  =  CONFIG_CAN_PROP_SEG ,
631642	.tq_bs1  =  CONFIG_CAN_PHASE_SEG1 ,
632643	.tq_bs2  =  CONFIG_CAN_PHASE_SEG2 ,
644+ 	.bus_speed  =  DT_MICROCHIP_MCP2515_0_BUS_SPEED ,
633645};
634646
635647DEVICE_AND_API_INIT (can_mcp2515_1 , DT_MICROCHIP_MCP2515_0_LABEL , & mcp2515_init ,
0 commit comments