149 lines
4.0 KiB
Bash
Executable File
149 lines
4.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Apply DAHDI driver patch for OpenWRT 24.10.4
|
|
# Fixes MAX macro naming issues in dahdi-linux modules
|
|
# Author: ChatGPT (for Zhe Yuan)
|
|
|
|
set -e
|
|
umask 022
|
|
|
|
PATCH_DIR="package/feeds/telephony/dahdi-linux/patches"
|
|
PATCH_FILE="$PATCH_DIR/300-fix-dahdi-max-attempts.patch"
|
|
|
|
echo "========================================"
|
|
echo " DAHDI Linux Patch Applier for OpenWRT"
|
|
echo "========================================"
|
|
|
|
# --- Check if inside OpenWRT source directory ---
|
|
if [ ! -f "feeds.conf.default" ] || [ ! -d "package" ]; then
|
|
echo "[ERROR] This script must be run inside the OpenWRT root directory."
|
|
echo "Please 'cd' to your OpenWRT source root and run again."
|
|
exit 1
|
|
fi
|
|
|
|
# --- Check if dahdi patch directory exists ---
|
|
if [ ! -d "$PATCH_DIR" ]; then
|
|
echo "[ERROR] Patch directory not found:"
|
|
echo " $PATCH_DIR"
|
|
echo
|
|
echo "Please make sure telephony feed is installed:"
|
|
echo " ./scripts/feeds update telephony"
|
|
echo " ./scripts/feeds install -a"
|
|
exit 1
|
|
fi
|
|
|
|
# --- Create patch file ---
|
|
echo "[INFO] Writing DAHDI patch to: $PATCH_FILE"
|
|
cat > "$PATCH_FILE" <<'EOF'
|
|
--- a/drivers/dahdi/wctdm24xxp/base.c
|
|
+++ b/drivers/dahdi/wctdm24xxp/base.c
|
|
@@ -1516,16 +1516,16 @@ static int wait_access(struct wctdm *wc, struct wctdm_module *const mod)
|
|
{
|
|
unsigned char data = 0;
|
|
int count = 0;
|
|
|
|
- #define MAX 10 /* attempts */
|
|
+ #define MAX_ATTEMPTS 10 /* attempts */
|
|
|
|
/* Wait for indirect access */
|
|
- while (count++ < MAX) {
|
|
+ while (count++ < MAX_ATTEMPTS) {
|
|
data = wctdm_getreg(wc, mod, I_STATUS);
|
|
if (!data)
|
|
return 0;
|
|
}
|
|
|
|
- if (count > (MAX-1)) {
|
|
+ if (count > (MAX_ATTEMPTS-1)) {
|
|
dev_notice(&wc->vb.pdev->dev,
|
|
" ##### Loop error (%02x) #####\n", data);
|
|
}
|
|
|
|
--- a/drivers/dahdi/opvxa1200/base.c
|
|
+++ b/drivers/dahdi/opvxa1200/base.c
|
|
@@ -868,12 +868,12 @@ static int wait_access(struct wctdm *wc, int card)
|
|
long origjiffies;
|
|
int count = 0;
|
|
|
|
- #define MAX 6000 /* attempts */
|
|
+ #define MAX_ATTEMPTS 6000 /* attempts */
|
|
|
|
|
|
origjiffies = jiffies;
|
|
/* Wait for indirect access */
|
|
- while (count++ < MAX)
|
|
+ while (count++ < MAX_ATTEMPTS)
|
|
{
|
|
data = __wctdm_getreg(wc, card, I_STATUS);
|
|
|
|
@@ -882,7 +882,7 @@ static int wait_access(struct wctdm *wc, int card)
|
|
|
|
}
|
|
|
|
- if(count > (MAX-1)) printk(KERN_NOTICE " ##### Loop error (%02x) #####\n", data);
|
|
+ if(count > (MAX_ATTEMPTS-1)) printk(KERN_NOTICE " ##### Loop error (%02x) #####\n", data);
|
|
|
|
return 0;
|
|
}
|
|
|
|
--- a/drivers/dahdi/wcaxx-base.c
|
|
+++ b/drivers/dahdi/wcaxx-base.c
|
|
@@ -1066,16 +1066,16 @@ static int wait_access(struct wcaxx *wc, struct wcaxx_module *const mod)
|
|
unsigned char data = 0;
|
|
int count = 0;
|
|
|
|
- #define MAX 10 /* attempts */
|
|
+ #define MAX_ATTEMPTS 10 /* attempts */
|
|
|
|
/* Wait for indirect access */
|
|
- while (count++ < MAX) {
|
|
+ while (count++ < MAX_ATTEMPTS) {
|
|
data = wcaxx_getreg(wc, mod, I_STATUS);
|
|
if (!data)
|
|
return 0;
|
|
}
|
|
|
|
- if (count > (MAX-1)) {
|
|
+ if (count > (MAX_ATTEMPTS-1)) {
|
|
dev_notice(&wc->xb.pdev->dev,
|
|
" ##### Loop error (%02x) #####\n", data);
|
|
}
|
|
|
|
--- a/drivers/dahdi/wctdm.c
|
|
+++ b/drivers/dahdi/wctdm.c
|
|
@@ -623,11 +623,11 @@ static int wait_access(struct wctdm *wc, int card)
|
|
unsigned char data = 0;
|
|
int count = 0;
|
|
|
|
- #define MAX 6000 /* attempts */
|
|
+ #define MAX_ATTEMPTS 6000 /* attempts */
|
|
|
|
|
|
/* Wait for indirect access */
|
|
- while (count++ < MAX)
|
|
+ while (count++ < MAX_ATTEMPTS)
|
|
{
|
|
data = __wctdm_getreg(wc, card, I_STATUS);
|
|
|
|
@@ -636,7 +636,7 @@ static int wait_access(struct wctdm *wc, int card)
|
|
|
|
}
|
|
|
|
- if(count > (MAX-1)) printk(KERN_NOTICE " ##### Loop error (%02x) #####\n", data);
|
|
+ if(count > (MAX_ATTEMPTS-1)) printk(KERN_NOTICE " ##### Loop error (%02x) #####\n", data);
|
|
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[SUCCESS] Patch written successfully!"
|
|
echo
|
|
echo "========================================"
|
|
echo "✅ DAHDI patch applied successfully!"
|
|
echo " File: $PATCH_FILE"
|
|
echo "========================================"
|
|
echo
|
|
echo "👉 Next step:"
|
|
echo " make package/feeds/telephony/dahdi-linux/{clean,prepare} V=s"
|
|
echo " make package/feeds/telephony/dahdi-linux/compile V=s"
|
|
echo
|