diff --git a/keywords.txt b/keywords.txt
index a2a656bc..55262f3f 100644
--- a/keywords.txt
+++ b/keywords.txt
@@ -182,6 +182,8 @@ startReceiveDutyCycleAuto	KEYWORD2
 setRegulatorLDO	KEYWORD2
 setRegulatorDCDC	KEYWORD2
 getCurrentLimit	KEYWORD2
+getIrqStatus	KEYWORD2
+
 # nRF24
 setIrqAction	KEYWORD2
 setAddressWidth	KEYWORD2
diff --git a/src/modules/SX126x/SX126x.cpp b/src/modules/SX126x/SX126x.cpp
index 56eb61b6..5d4f2736 100644
--- a/src/modules/SX126x/SX126x.cpp
+++ b/src/modules/SX126x/SX126x.cpp
@@ -441,7 +441,7 @@ int16_t SX126x::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
 }
 
 int16_t SX126x::startReceive(uint32_t timeout) {
-  int16_t state = startReceiveCommon();
+  int16_t state = startReceiveCommon(timeout);
   RADIOLIB_ASSERT(state);
 
   // set RF switch (if present)
@@ -520,9 +520,13 @@ int16_t SX126x::startReceiveDutyCycleAuto(uint16_t senderPreambleLength, uint16_
   return(startReceiveDutyCycle(wakePeriod, sleepPeriod));
 }
 
-int16_t SX126x::startReceiveCommon() {
+int16_t SX126x::startReceiveCommon(uint32_t timeout) {
   // set DIO mapping
-  int16_t state = setDioIrqParams(RADIOLIB_SX126X_IRQ_RX_DONE | RADIOLIB_SX126X_IRQ_TIMEOUT | RADIOLIB_SX126X_IRQ_CRC_ERR | RADIOLIB_SX126X_IRQ_HEADER_ERR, RADIOLIB_SX126X_IRQ_RX_DONE);
+  uint16_t mask = RADIOLIB_SX126X_IRQ_RX_DONE;
+  if(timeout != RADIOLIB_SX126X_RX_TIMEOUT_INF) {
+    mask |= RADIOLIB_SX126X_IRQ_TIMEOUT;
+  }
+  int16_t state = setDioIrqParams(RADIOLIB_SX126X_IRQ_RX_DONE | RADIOLIB_SX126X_IRQ_TIMEOUT | RADIOLIB_SX126X_IRQ_CRC_ERR | RADIOLIB_SX126X_IRQ_HEADER_ERR, mask);
   RADIOLIB_ASSERT(state);
 
   // set buffer pointers
diff --git a/src/modules/SX126x/SX126x.h b/src/modules/SX126x/SX126x.h
index 507fb127..57f3df66 100644
--- a/src/modules/SX126x/SX126x.h
+++ b/src/modules/SX126x/SX126x.h
@@ -511,6 +511,7 @@ class SX126x: public PhysicalLayer {
       \brief Interrupt-driven receive method. DIO1 will be activated when full packet is received.
 
       \param timeout Raw timeout value, expressed as multiples of 15.625 us. Defaults to RADIOLIB_SX126X_RX_TIMEOUT_INF for infinite timeout (Rx continuous mode), set to RADIOLIB_SX126X_RX_TIMEOUT_NONE for no timeout (Rx single mode).
+      If timeout other than infinite is set, signal will be generated on DIO1.
 
       \returns \ref status_codes
     */
@@ -541,6 +542,13 @@ class SX126x: public PhysicalLayer {
     */
     int16_t startReceiveDutyCycleAuto(uint16_t senderPreambleLength = 0, uint16_t minSymbols = 8);
 
+    /*!
+      \brief Reads the current IRQ status.
+
+      \returns IRQ status bits
+    */
+    uint16_t getIrqStatus();
+
     /*!
       \brief Reads data received after calling startReceive method.
 
@@ -927,7 +935,6 @@ class SX126x: public PhysicalLayer {
     int16_t writeBuffer(uint8_t* data, uint8_t numBytes, uint8_t offset = 0x00);
     int16_t readBuffer(uint8_t* data, uint8_t numBytes);
     int16_t setDioIrqParams(uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask = RADIOLIB_SX126X_IRQ_NONE, uint16_t dio3Mask = RADIOLIB_SX126X_IRQ_NONE);
-    uint16_t getIrqStatus();
     int16_t clearIrqStatus(uint16_t clearIrqParams = RADIOLIB_SX126X_IRQ_ALL);
     int16_t setRfFrequency(uint32_t frf);
     int16_t calibrateImage(uint8_t* data);
@@ -944,7 +951,7 @@ class SX126x: public PhysicalLayer {
     uint16_t getDeviceErrors();
     int16_t clearDeviceErrors();
 
-    int16_t startReceiveCommon();
+    int16_t startReceiveCommon(uint32_t timeout = RADIOLIB_SX126X_RX_TIMEOUT_INF);
     int16_t setFrequencyRaw(float freq);
     int16_t setPacketMode(uint8_t mode, uint8_t len);
     int16_t setHeaderType(uint8_t headerType, size_t len = 0xFF);