@@ -145,6 +145,7 @@ struct ramtron_dev_s
145
145
FAR struct spi_dev_s * dev ; /* Saved SPI interface instance */
146
146
uint8_t sectorshift ;
147
147
uint8_t pageshift ;
148
+ uint16_t devid ; /* SPI device ID to manage CS lines in board */
148
149
uint32_t nsectors ;
149
150
uint32_t npages ;
150
151
uint32_t speed ; /* Overridable via ioctl */
@@ -323,6 +324,18 @@ static const struct ramtron_parts_s g_ramtron_parts[] =
323
324
#ifdef CONFIG_RAMTRON_CHUNKING
324
325
, false, /* chunked */
325
326
RAMTRON_EMULATE_PAGE_SIZE /* chunksize */
327
+ #endif
328
+ },
329
+ {
330
+ "MB85RS64V" , /* name */
331
+ 0x03 , /* id1 */
332
+ 0x02 , /* id2 */
333
+ 8L * 1024L , /* size */
334
+ 2 , /* addr_len */
335
+ 20000000 /* speed */
336
+ #ifdef CONFIG_RAMTRON_CHUNKING
337
+ , false, /* chunked */
338
+ RAMTRON_EMULATE_PAGE_SIZE /* chunksize */
326
339
#endif
327
340
},
328
341
{
@@ -484,7 +497,7 @@ static inline int ramtron_readid(struct ramtron_dev_s *priv)
484
497
/* Lock the SPI bus, configure the bus, and select this FLASH part. */
485
498
486
499
ramtron_lock (priv );
487
- SPI_SELECT (priv -> dev , SPIDEV_FLASH (0 ), true);
500
+ SPI_SELECT (priv -> dev , SPIDEV_FLASH (priv -> devid ), true);
488
501
489
502
/* Send the "Read ID (RDID)" command */
490
503
@@ -514,7 +527,7 @@ static inline int ramtron_readid(struct ramtron_dev_s *priv)
514
527
515
528
/* Deselect the FLASH and unlock the bus */
516
529
517
- SPI_SELECT (priv -> dev , SPIDEV_FLASH (0 ), false);
530
+ SPI_SELECT (priv -> dev , SPIDEV_FLASH (priv -> devid ), false);
518
531
ramtron_unlock (priv -> dev );
519
532
520
533
/* Select part from the part list */
@@ -556,15 +569,15 @@ static void ramtron_writeenable(struct ramtron_dev_s *priv)
556
569
{
557
570
/* Select this FLASH part */
558
571
559
- SPI_SELECT (priv -> dev , SPIDEV_FLASH (0 ), true);
572
+ SPI_SELECT (priv -> dev , SPIDEV_FLASH (priv -> devid ), true);
560
573
561
574
/* Send "Write Enable (WREN)" command */
562
575
563
576
SPI_SEND (priv -> dev , RAMTRON_WREN );
564
577
565
578
/* Deselect the FLASH */
566
579
567
- SPI_SELECT (priv -> dev , SPIDEV_FLASH (0 ), false);
580
+ SPI_SELECT (priv -> dev , SPIDEV_FLASH (priv -> devid ), false);
568
581
finfo ("Enabled\n" );
569
582
}
570
583
@@ -604,7 +617,7 @@ static inline int ramtron_pagewrite(struct ramtron_dev_s *priv,
604
617
605
618
/* Select this FLASH part */
606
619
607
- SPI_SELECT (priv -> dev , SPIDEV_FLASH (0 ), true);
620
+ SPI_SELECT (priv -> dev , SPIDEV_FLASH (priv -> devid ), true);
608
621
609
622
/* Send "Page Program (PP)" command */
610
623
@@ -620,7 +633,7 @@ static inline int ramtron_pagewrite(struct ramtron_dev_s *priv,
620
633
621
634
/* Deselect the FLASH: Chip Select high */
622
635
623
- SPI_SELECT (priv -> dev , SPIDEV_FLASH (0 ), false);
636
+ SPI_SELECT (priv -> dev , SPIDEV_FLASH (priv -> devid ), false);
624
637
finfo ("Written\n" );
625
638
626
639
return OK ;
@@ -808,7 +821,7 @@ static ssize_t ramtron_read(FAR struct mtd_dev_s *dev,
808
821
809
822
/* Select this FLASH part */
810
823
811
- SPI_SELECT (priv -> dev , SPIDEV_FLASH (0 ), true);
824
+ SPI_SELECT (priv -> dev , SPIDEV_FLASH (priv -> devid ), true);
812
825
813
826
/* Send "Read from Memory " instruction */
814
827
@@ -824,7 +837,7 @@ static ssize_t ramtron_read(FAR struct mtd_dev_s *dev,
824
837
825
838
/* Deselect the FLASH and unlock the SPI bus */
826
839
827
- SPI_SELECT (priv -> dev , SPIDEV_FLASH (0 ), false);
840
+ SPI_SELECT (priv -> dev , SPIDEV_FLASH (priv -> devid ), false);
828
841
ramtron_unlock (priv -> dev );
829
842
830
843
finfo ("return nbytes: %d\n" , (int )nbytes );
@@ -932,19 +945,22 @@ static int ramtron_ioctl(FAR struct mtd_dev_s *dev,
932
945
* as instances that can be bound to other functions
933
946
* (such as a block or character driver front end).
934
947
*
948
+ * Note:
949
+ * This implementation can handle multiple FLASH parts per SPI device by
950
+ * using the spi_devid to handle chip select between devices. The spi_devid
951
+ * passed to this function must be handled by the corresponding spi select
952
+ * function in board files.
935
953
****************************************************************************/
936
954
937
- FAR struct mtd_dev_s * ramtron_initialize (FAR struct spi_dev_s * dev )
955
+ FAR struct mtd_dev_s * ramtron_initialize (FAR struct spi_dev_s * dev ,
956
+ uint16_t spi_devid )
938
957
{
939
958
FAR struct ramtron_dev_s * priv ;
940
959
941
960
finfo ("dev: %p\n" , dev );
942
961
943
962
/* Allocate a state structure (we allocate the structure instead of using
944
963
* a fixed, static allocation so that we can handle multiple FLASH devices.
945
- * The current implementation would handle only one FLASH part per SPI
946
- * device (only because of the SPIDEV_FLASH(0) definition) and so would
947
- * have to be extended to handle multiple FLASH parts on the same SPI bus.
948
964
*/
949
965
950
966
priv = (FAR struct ramtron_dev_s * )
@@ -962,10 +978,11 @@ FAR struct mtd_dev_s *ramtron_initialize(FAR struct spi_dev_s *dev)
962
978
priv -> mtd .ioctl = ramtron_ioctl ;
963
979
priv -> mtd .name = "ramtron" ;
964
980
priv -> dev = dev ;
981
+ priv -> devid = spi_devid ;
965
982
966
983
/* Deselect the FLASH */
967
984
968
- SPI_SELECT (dev , SPIDEV_FLASH (0 ), false);
985
+ SPI_SELECT (dev , SPIDEV_FLASH (priv -> devid ), false);
969
986
970
987
/* Identify the FLASH chip and get its capacity */
971
988
0 commit comments