@@ -447,6 +447,32 @@ static int sdw_ntransfer_no_pm(struct sdw_slave *slave, u32 addr, u8 flags,
447447 return 0 ;
448448}
449449
450+ static int sdw_ntransfer_no_pm_bpt (struct sdw_slave * slave , u32 addr , u8 flags ,
451+ size_t count , u8 * val )
452+ {
453+ struct sdw_bpt_section sec ;
454+ struct sdw_bpt_msg msg ;
455+ int retry = 5 ;
456+ int ret ;
457+
458+ sec .addr = addr ;
459+ sec .len = count ;
460+ sec .buf = val ;
461+
462+ msg .sections = 1 ;
463+ msg .dev_num = slave -> dev_num ;
464+ msg .flags = flags ;
465+ msg .sec = & sec ;
466+
467+ do {
468+ ret = sdw_bpt_send_sync (slave -> bus , slave , & msg );
469+ msleep (10 );
470+ retry -- ;
471+ } while (ret == - EAGAIN && retry > 0 );
472+
473+ return ret ;
474+ }
475+
450476/**
451477 * sdw_nread_no_pm() - Read "n" contiguous SDW Slave registers with no PM
452478 * @slave: SDW Slave
@@ -459,6 +485,15 @@ static int sdw_ntransfer_no_pm(struct sdw_slave *slave, u32 addr, u8 flags,
459485 */
460486int sdw_nread_no_pm (struct sdw_slave * slave , u32 addr , size_t count , u8 * val )
461487{
488+ int ret ;
489+
490+ if (count < slave -> bus -> bra_r_threshold )
491+ goto fallback ;
492+
493+ ret = sdw_ntransfer_no_pm_bpt (slave , addr , SDW_MSG_FLAG_READ , count , val );
494+ if (!ret )
495+ return 0 ;
496+ fallback :
462497 return sdw_ntransfer_no_pm (slave , addr , SDW_MSG_FLAG_READ , count , val );
463498}
464499EXPORT_SYMBOL (sdw_nread_no_pm );
@@ -475,6 +510,15 @@ EXPORT_SYMBOL(sdw_nread_no_pm);
475510 */
476511int sdw_nwrite_no_pm (struct sdw_slave * slave , u32 addr , size_t count , const u8 * val )
477512{
513+ int ret ;
514+
515+ if (count < slave -> bus -> bra_w_threshold )
516+ goto fallback ;
517+
518+ ret = sdw_ntransfer_no_pm_bpt (slave , addr , SDW_MSG_FLAG_WRITE , count , (u8 * )val );
519+ if (!ret )
520+ return 0 ;
521+ fallback :
478522 return sdw_ntransfer_no_pm (slave , addr , SDW_MSG_FLAG_WRITE , count , (u8 * )val );
479523}
480524EXPORT_SYMBOL (sdw_nwrite_no_pm );
0 commit comments