deploy: 9952f38afbeabf30de99d21e55e8dff0711eb1f5

This commit is contained in:
jserv 2024-04-20 17:15:14 +00:00
parent a5f3fb8a66
commit 4c6ef1b34a
2 changed files with 136 additions and 132 deletions

View File

@ -5527,74 +5527,76 @@ halves, but using threads.
<a id='x1-60163r79'></a><span class='ecrm-0500'>79</span>
<a id='x1-60165r80'></a><span class='ecrm-0500'>80</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2871'><span class='ectt-0800'>"Successfully requested BUTTON1 IRQ # %d</span></span><span id='textcolor2872'><span class='ectt-0800'>\n</span></span><span id='textcolor2873'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, button_irqs[0]);</span>
<a id='x1-60167r81'></a><span class='ecrm-0500'>81</span>
<a id='x1-60169r82'></a><span class='ecrm-0500'>82</span><span class='ectt-0800'>    ret = request_threaded_irq(</span>
<a id='x1-60171r83'></a><span class='ecrm-0500'>83</span><span class='ectt-0800'>        button_irqs[0], button_top_half, button_bottom_half,</span>
<a id='x1-60173r84'></a><span class='ecrm-0500'>84</span><span class='ectt-0800'>        IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, </span><span id='textcolor2874'><span class='ectt-0800'>"gpiomod#button1"</span></span><span class='ectt-0800'>&amp;buttons[0]);</span>
<a id='x1-60175r85'></a><span class='ecrm-0500'>85</span>
<a id='x1-60177r86'></a><span class='ecrm-0500'>86</span><span class='ectt-0800'>    </span><span id='textcolor2875'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret) {</span>
<a id='x1-60179r87'></a><span class='ecrm-0500'>87</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2876'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2877'><span class='ectt-0800'>\n</span></span><span id='textcolor2878'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60181r88'></a><span class='ecrm-0500'>88</span><span class='ectt-0800'>        </span><span id='textcolor2879'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail2;</span>
<a id='x1-60183r89'></a><span class='ecrm-0500'>89</span><span class='ectt-0800'>    }</span>
<a id='x1-60185r90'></a><span class='ecrm-0500'>90</span>
<a id='x1-60187r91'></a><span class='ecrm-0500'>91</span><span class='ectt-0800'>    ret = gpio_to_irq(buttons[1].gpio);</span>
<a id='x1-60189r92'></a><span class='ecrm-0500'>92</span>
<a id='x1-60191r93'></a><span class='ecrm-0500'>93</span><span class='ectt-0800'>    </span><span id='textcolor2880'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret &lt; 0) {</span>
<a id='x1-60193r94'></a><span class='ecrm-0500'>94</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2881'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2882'><span class='ectt-0800'>\n</span></span><span id='textcolor2883'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60195r95'></a><span class='ecrm-0500'>95</span><span class='ectt-0800'>        </span><span id='textcolor2884'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail2;</span>
<a id='x1-60197r96'></a><span class='ecrm-0500'>96</span><span class='ectt-0800'>    }</span>
<a id='x1-60199r97'></a><span class='ecrm-0500'>97</span>
<a id='x1-60201r98'></a><span class='ecrm-0500'>98</span><span class='ectt-0800'>    button_irqs[1] = ret;</span>
<a id='x1-60203r99'></a><span class='ecrm-0500'>99</span>
<a id='x1-60205r100'></a><span class='ecrm-0500'>100</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2885'><span class='ectt-0800'>"Successfully requested BUTTON2 IRQ # %d</span></span><span id='textcolor2886'><span class='ectt-0800'>\n</span></span><span id='textcolor2887'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, button_irqs[1]);</span>
<a id='x1-60207r101'></a><span class='ecrm-0500'>101</span>
<a id='x1-60209r102'></a><span class='ecrm-0500'>102</span><span class='ectt-0800'>    ret = request_threaded_irq(</span>
<a id='x1-60211r103'></a><span class='ecrm-0500'>103</span><span class='ectt-0800'>        button_irqs[1], button_top_half, button_bottom_half,</span>
<a id='x1-60213r104'></a><span class='ecrm-0500'>104</span><span class='ectt-0800'>        IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, </span><span id='textcolor2888'><span class='ectt-0800'>"gpiomod#button2"</span></span><span class='ectt-0800'>&amp;buttons[1]);</span>
<a id='x1-60215r105'></a><span class='ecrm-0500'>105</span>
<a id='x1-60217r106'></a><span class='ecrm-0500'>106</span><span class='ectt-0800'>    </span><span id='textcolor2889'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret) {</span>
<a id='x1-60219r107'></a><span class='ecrm-0500'>107</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2890'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2891'><span class='ectt-0800'>\n</span></span><span id='textcolor2892'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60221r108'></a><span class='ecrm-0500'>108</span><span class='ectt-0800'>        </span><span id='textcolor2893'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail3;</span>
<a id='x1-60223r109'></a><span class='ecrm-0500'>109</span><span class='ectt-0800'>    }</span>
<a id='x1-60225r110'></a><span class='ecrm-0500'>110</span>
<a id='x1-60227r111'></a><span class='ecrm-0500'>111</span><span class='ectt-0800'>    </span><span id='textcolor2894'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> 0;</span>
<a id='x1-60169r82'></a><span class='ecrm-0500'>82</span><span class='ectt-0800'>    ret = request_threaded_irq(button_irqs[0], button_top_half,</span>
<a id='x1-60171r83'></a><span class='ecrm-0500'>83</span><span class='ectt-0800'>                               button_bottom_half,</span>
<a id='x1-60173r84'></a><span class='ecrm-0500'>84</span><span class='ectt-0800'>                               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,</span>
<a id='x1-60175r85'></a><span class='ecrm-0500'>85</span><span class='ectt-0800'>                               </span><span id='textcolor2874'><span class='ectt-0800'>"gpiomod#button1"</span></span><span class='ectt-0800'>&amp;buttons[0]);</span>
<a id='x1-60177r86'></a><span class='ecrm-0500'>86</span>
<a id='x1-60179r87'></a><span class='ecrm-0500'>87</span><span class='ectt-0800'>    </span><span id='textcolor2875'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret) {</span>
<a id='x1-60181r88'></a><span class='ecrm-0500'>88</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2876'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2877'><span class='ectt-0800'>\n</span></span><span id='textcolor2878'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60183r89'></a><span class='ecrm-0500'>89</span><span class='ectt-0800'>        </span><span id='textcolor2879'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail2;</span>
<a id='x1-60185r90'></a><span class='ecrm-0500'>90</span><span class='ectt-0800'>    }</span>
<a id='x1-60187r91'></a><span class='ecrm-0500'>91</span>
<a id='x1-60189r92'></a><span class='ecrm-0500'>92</span><span class='ectt-0800'>    ret = gpio_to_irq(buttons[1].gpio);</span>
<a id='x1-60191r93'></a><span class='ecrm-0500'>93</span>
<a id='x1-60193r94'></a><span class='ecrm-0500'>94</span><span class='ectt-0800'>    </span><span id='textcolor2880'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret &lt; 0) {</span>
<a id='x1-60195r95'></a><span class='ecrm-0500'>95</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2881'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2882'><span class='ectt-0800'>\n</span></span><span id='textcolor2883'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60197r96'></a><span class='ecrm-0500'>96</span><span class='ectt-0800'>        </span><span id='textcolor2884'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail2;</span>
<a id='x1-60199r97'></a><span class='ecrm-0500'>97</span><span class='ectt-0800'>    }</span>
<a id='x1-60201r98'></a><span class='ecrm-0500'>98</span>
<a id='x1-60203r99'></a><span class='ecrm-0500'>99</span><span class='ectt-0800'>    button_irqs[1] = ret;</span>
<a id='x1-60205r100'></a><span class='ecrm-0500'>100</span>
<a id='x1-60207r101'></a><span class='ecrm-0500'>101</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2885'><span class='ectt-0800'>"Successfully requested BUTTON2 IRQ # %d</span></span><span id='textcolor2886'><span class='ectt-0800'>\n</span></span><span id='textcolor2887'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, button_irqs[1]);</span>
<a id='x1-60209r102'></a><span class='ecrm-0500'>102</span>
<a id='x1-60211r103'></a><span class='ecrm-0500'>103</span><span class='ectt-0800'>    ret = request_threaded_irq(button_irqs[1], button_top_half,</span>
<a id='x1-60213r104'></a><span class='ecrm-0500'>104</span><span class='ectt-0800'>                               button_bottom_half,</span>
<a id='x1-60215r105'></a><span class='ecrm-0500'>105</span><span class='ectt-0800'>                               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,</span>
<a id='x1-60217r106'></a><span class='ecrm-0500'>106</span><span class='ectt-0800'>                               </span><span id='textcolor2888'><span class='ectt-0800'>"gpiomod#button2"</span></span><span class='ectt-0800'>&amp;buttons[1]);</span>
<a id='x1-60219r107'></a><span class='ecrm-0500'>107</span>
<a id='x1-60221r108'></a><span class='ecrm-0500'>108</span><span class='ectt-0800'>    </span><span id='textcolor2889'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret) {</span>
<a id='x1-60223r109'></a><span class='ecrm-0500'>109</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2890'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2891'><span class='ectt-0800'>\n</span></span><span id='textcolor2892'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60225r110'></a><span class='ecrm-0500'>110</span><span class='ectt-0800'>        </span><span id='textcolor2893'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail3;</span>
<a id='x1-60227r111'></a><span class='ecrm-0500'>111</span><span class='ectt-0800'>    }</span>
<a id='x1-60229r112'></a><span class='ecrm-0500'>112</span>
<a id='x1-60231r113'></a><span class='ecrm-0500'>113</span><span id='textcolor2895'><span class='ectt-0800'>/* cleanup what has been setup so far */</span></span>
<a id='x1-60233r114'></a><span class='ecrm-0500'>114</span><span class='ectt-0800'>fail3:</span>
<a id='x1-60235r115'></a><span class='ecrm-0500'>115</span><span class='ectt-0800'>    free_irq(button_irqs[0], NULL);</span>
<a id='x1-60237r116'></a><span class='ecrm-0500'>116</span>
<a id='x1-60239r117'></a><span class='ecrm-0500'>117</span><span class='ectt-0800'>fail2:</span>
<a id='x1-60241r118'></a><span class='ecrm-0500'>118</span><span class='ectt-0800'>    gpio_free_array(buttons, ARRAY_SIZE(leds));</span>
<a id='x1-60243r119'></a><span class='ecrm-0500'>119</span>
<a id='x1-60245r120'></a><span class='ecrm-0500'>120</span><span class='ectt-0800'>fail1:</span>
<a id='x1-60247r121'></a><span class='ecrm-0500'>121</span><span class='ectt-0800'>    gpio_free_array(leds, ARRAY_SIZE(leds));</span>
<a id='x1-60249r122'></a><span class='ecrm-0500'>122</span>
<a id='x1-60251r123'></a><span class='ecrm-0500'>123</span><span class='ectt-0800'>    </span><span id='textcolor2896'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> ret;</span>
<a id='x1-60253r124'></a><span class='ecrm-0500'>124</span><span class='ectt-0800'>}</span>
<a id='x1-60255r125'></a><span class='ecrm-0500'>125</span>
<a id='x1-60257r126'></a><span class='ecrm-0500'>126</span><span id='textcolor2897'><span class='ectt-0800'>static</span></span><span class='ectt-0800'> </span><span id='textcolor2898'><span class='ectt-0800'>void</span></span><span class='ectt-0800'> __exit bottomhalf_exit(</span><span id='textcolor2899'><span class='ectt-0800'>void</span></span><span class='ectt-0800'>)</span>
<a id='x1-60259r127'></a><span class='ecrm-0500'>127</span><span class='ectt-0800'>{</span>
<a id='x1-60261r128'></a><span class='ecrm-0500'>128</span><span class='ectt-0800'>    </span><span id='textcolor2900'><span class='ectt-0800'>int</span></span><span class='ectt-0800'> i;</span>
<a id='x1-60263r129'></a><span class='ecrm-0500'>129</span>
<a id='x1-60265r130'></a><span class='ecrm-0500'>130</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2901'><span class='ectt-0800'>"%s</span></span><span id='textcolor2902'><span class='ectt-0800'>\n</span></span><span id='textcolor2903'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, __func__);</span>
<a id='x1-60231r113'></a><span class='ecrm-0500'>113</span><span class='ectt-0800'>    </span><span id='textcolor2894'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> 0;</span>
<a id='x1-60233r114'></a><span class='ecrm-0500'>114</span>
<a id='x1-60235r115'></a><span class='ecrm-0500'>115</span><span id='textcolor2895'><span class='ectt-0800'>/* cleanup what has been setup so far */</span></span>
<a id='x1-60237r116'></a><span class='ecrm-0500'>116</span><span class='ectt-0800'>fail3:</span>
<a id='x1-60239r117'></a><span class='ecrm-0500'>117</span><span class='ectt-0800'>    free_irq(button_irqs[0], NULL);</span>
<a id='x1-60241r118'></a><span class='ecrm-0500'>118</span>
<a id='x1-60243r119'></a><span class='ecrm-0500'>119</span><span class='ectt-0800'>fail2:</span>
<a id='x1-60245r120'></a><span class='ecrm-0500'>120</span><span class='ectt-0800'>    gpio_free_array(buttons, ARRAY_SIZE(leds));</span>
<a id='x1-60247r121'></a><span class='ecrm-0500'>121</span>
<a id='x1-60249r122'></a><span class='ecrm-0500'>122</span><span class='ectt-0800'>fail1:</span>
<a id='x1-60251r123'></a><span class='ecrm-0500'>123</span><span class='ectt-0800'>    gpio_free_array(leds, ARRAY_SIZE(leds));</span>
<a id='x1-60253r124'></a><span class='ecrm-0500'>124</span>
<a id='x1-60255r125'></a><span class='ecrm-0500'>125</span><span class='ectt-0800'>    </span><span id='textcolor2896'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> ret;</span>
<a id='x1-60257r126'></a><span class='ecrm-0500'>126</span><span class='ectt-0800'>}</span>
<a id='x1-60259r127'></a><span class='ecrm-0500'>127</span>
<a id='x1-60261r128'></a><span class='ecrm-0500'>128</span><span id='textcolor2897'><span class='ectt-0800'>static</span></span><span class='ectt-0800'> </span><span id='textcolor2898'><span class='ectt-0800'>void</span></span><span class='ectt-0800'> __exit bottomhalf_exit(</span><span id='textcolor2899'><span class='ectt-0800'>void</span></span><span class='ectt-0800'>)</span>
<a id='x1-60263r129'></a><span class='ecrm-0500'>129</span><span class='ectt-0800'>{</span>
<a id='x1-60265r130'></a><span class='ecrm-0500'>130</span><span class='ectt-0800'>    </span><span id='textcolor2900'><span class='ectt-0800'>int</span></span><span class='ectt-0800'> i;</span>
<a id='x1-60267r131'></a><span class='ecrm-0500'>131</span>
<a id='x1-60269r132'></a><span class='ecrm-0500'>132</span><span class='ectt-0800'>    </span><span id='textcolor2904'><span class='ectt-0800'>/* free irqs */</span></span>
<a id='x1-60271r133'></a><span class='ecrm-0500'>133</span><span class='ectt-0800'>    free_irq(button_irqs[0], NULL);</span>
<a id='x1-60273r134'></a><span class='ecrm-0500'>134</span><span class='ectt-0800'>    free_irq(button_irqs[1], NULL);</span>
<a id='x1-60275r135'></a><span class='ecrm-0500'>135</span>
<a id='x1-60277r136'></a><span class='ecrm-0500'>136</span><span class='ectt-0800'>    </span><span id='textcolor2905'><span class='ectt-0800'>/* turn all LEDs off */</span></span>
<a id='x1-60279r137'></a><span class='ecrm-0500'>137</span><span class='ectt-0800'>    </span><span id='textcolor2906'><span class='ectt-0800'>for</span></span><span class='ectt-0800'> (i = 0; i &lt; ARRAY_SIZE(leds); i++)</span>
<a id='x1-60281r138'></a><span class='ecrm-0500'>138</span><span class='ectt-0800'>        gpio_set_value(leds[i].gpio, 0);</span>
<a id='x1-60283r139'></a><span class='ecrm-0500'>139</span>
<a id='x1-60285r140'></a><span class='ecrm-0500'>140</span><span class='ectt-0800'>    </span><span id='textcolor2907'><span class='ectt-0800'>/* unregister */</span></span>
<a id='x1-60287r141'></a><span class='ecrm-0500'>141</span><span class='ectt-0800'>    gpio_free_array(leds, ARRAY_SIZE(leds));</span>
<a id='x1-60289r142'></a><span class='ecrm-0500'>142</span><span class='ectt-0800'>    gpio_free_array(buttons, ARRAY_SIZE(buttons));</span>
<a id='x1-60291r143'></a><span class='ecrm-0500'>143</span><span class='ectt-0800'>}</span>
<a id='x1-60293r144'></a><span class='ecrm-0500'>144</span>
<a id='x1-60295r145'></a><span class='ecrm-0500'>145</span><span class='ectt-0800'>module_init(bottomhalf_init);</span>
<a id='x1-60297r146'></a><span class='ecrm-0500'>146</span><span class='ectt-0800'>module_exit(bottomhalf_exit);</span>
<a id='x1-60299r147'></a><span class='ecrm-0500'>147</span>
<a id='x1-60301r148'></a><span class='ecrm-0500'>148</span><span class='ectt-0800'>MODULE_LICENSE(</span><span id='textcolor2908'><span class='ectt-0800'>"GPL"</span></span><span class='ectt-0800'>);</span>
<a id='x1-60303r149'></a><span class='ecrm-0500'>149</span><span class='ectt-0800'>MODULE_DESCRIPTION(</span><span id='textcolor2909'><span class='ectt-0800'>"Interrupt with top and bottom half"</span></span><span class='ectt-0800'>);</span></pre>
<a id='x1-60269r132'></a><span class='ecrm-0500'>132</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2901'><span class='ectt-0800'>"%s</span></span><span id='textcolor2902'><span class='ectt-0800'>\n</span></span><span id='textcolor2903'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, __func__);</span>
<a id='x1-60271r133'></a><span class='ecrm-0500'>133</span>
<a id='x1-60273r134'></a><span class='ecrm-0500'>134</span><span class='ectt-0800'>    </span><span id='textcolor2904'><span class='ectt-0800'>/* free irqs */</span></span>
<a id='x1-60275r135'></a><span class='ecrm-0500'>135</span><span class='ectt-0800'>    free_irq(button_irqs[0], NULL);</span>
<a id='x1-60277r136'></a><span class='ecrm-0500'>136</span><span class='ectt-0800'>    free_irq(button_irqs[1], NULL);</span>
<a id='x1-60279r137'></a><span class='ecrm-0500'>137</span>
<a id='x1-60281r138'></a><span class='ecrm-0500'>138</span><span class='ectt-0800'>    </span><span id='textcolor2905'><span class='ectt-0800'>/* turn all LEDs off */</span></span>
<a id='x1-60283r139'></a><span class='ecrm-0500'>139</span><span class='ectt-0800'>    </span><span id='textcolor2906'><span class='ectt-0800'>for</span></span><span class='ectt-0800'> (i = 0; i &lt; ARRAY_SIZE(leds); i++)</span>
<a id='x1-60285r140'></a><span class='ecrm-0500'>140</span><span class='ectt-0800'>        gpio_set_value(leds[i].gpio, 0);</span>
<a id='x1-60287r141'></a><span class='ecrm-0500'>141</span>
<a id='x1-60289r142'></a><span class='ecrm-0500'>142</span><span class='ectt-0800'>    </span><span id='textcolor2907'><span class='ectt-0800'>/* unregister */</span></span>
<a id='x1-60291r143'></a><span class='ecrm-0500'>143</span><span class='ectt-0800'>    gpio_free_array(leds, ARRAY_SIZE(leds));</span>
<a id='x1-60293r144'></a><span class='ecrm-0500'>144</span><span class='ectt-0800'>    gpio_free_array(buttons, ARRAY_SIZE(buttons));</span>
<a id='x1-60295r145'></a><span class='ecrm-0500'>145</span><span class='ectt-0800'>}</span>
<a id='x1-60297r146'></a><span class='ecrm-0500'>146</span>
<a id='x1-60299r147'></a><span class='ecrm-0500'>147</span><span class='ectt-0800'>module_init(bottomhalf_init);</span>
<a id='x1-60301r148'></a><span class='ecrm-0500'>148</span><span class='ectt-0800'>module_exit(bottomhalf_exit);</span>
<a id='x1-60303r149'></a><span class='ecrm-0500'>149</span>
<a id='x1-60305r150'></a><span class='ecrm-0500'>150</span><span class='ectt-0800'>MODULE_LICENSE(</span><span id='textcolor2908'><span class='ectt-0800'>"GPL"</span></span><span class='ectt-0800'>);</span>
<a id='x1-60307r151'></a><span class='ecrm-0500'>151</span><span class='ectt-0800'>MODULE_DESCRIPTION(</span><span id='textcolor2909'><span class='ectt-0800'>"Interrupt with top and bottom half"</span></span><span class='ectt-0800'>);</span></pre>
<!-- l. 1953 --><p class='indent'> A threaded IRQ is registered using <code> <span class='ectt-1000'>request_threaded_irq()</span>
</code>. This function only takes one additional parameter than the
<code> <span class='ectt-1000'>request_irq()</span>

View File

@ -5527,74 +5527,76 @@ halves, but using threads.
<a id='x1-60163r79'></a><span class='ecrm-0500'>79</span>
<a id='x1-60165r80'></a><span class='ecrm-0500'>80</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2871'><span class='ectt-0800'>"Successfully requested BUTTON1 IRQ # %d</span></span><span id='textcolor2872'><span class='ectt-0800'>\n</span></span><span id='textcolor2873'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, button_irqs[0]);</span>
<a id='x1-60167r81'></a><span class='ecrm-0500'>81</span>
<a id='x1-60169r82'></a><span class='ecrm-0500'>82</span><span class='ectt-0800'>    ret = request_threaded_irq(</span>
<a id='x1-60171r83'></a><span class='ecrm-0500'>83</span><span class='ectt-0800'>        button_irqs[0], button_top_half, button_bottom_half,</span>
<a id='x1-60173r84'></a><span class='ecrm-0500'>84</span><span class='ectt-0800'>        IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, </span><span id='textcolor2874'><span class='ectt-0800'>"gpiomod#button1"</span></span><span class='ectt-0800'>&amp;buttons[0]);</span>
<a id='x1-60175r85'></a><span class='ecrm-0500'>85</span>
<a id='x1-60177r86'></a><span class='ecrm-0500'>86</span><span class='ectt-0800'>    </span><span id='textcolor2875'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret) {</span>
<a id='x1-60179r87'></a><span class='ecrm-0500'>87</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2876'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2877'><span class='ectt-0800'>\n</span></span><span id='textcolor2878'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60181r88'></a><span class='ecrm-0500'>88</span><span class='ectt-0800'>        </span><span id='textcolor2879'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail2;</span>
<a id='x1-60183r89'></a><span class='ecrm-0500'>89</span><span class='ectt-0800'>    }</span>
<a id='x1-60185r90'></a><span class='ecrm-0500'>90</span>
<a id='x1-60187r91'></a><span class='ecrm-0500'>91</span><span class='ectt-0800'>    ret = gpio_to_irq(buttons[1].gpio);</span>
<a id='x1-60189r92'></a><span class='ecrm-0500'>92</span>
<a id='x1-60191r93'></a><span class='ecrm-0500'>93</span><span class='ectt-0800'>    </span><span id='textcolor2880'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret &lt; 0) {</span>
<a id='x1-60193r94'></a><span class='ecrm-0500'>94</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2881'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2882'><span class='ectt-0800'>\n</span></span><span id='textcolor2883'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60195r95'></a><span class='ecrm-0500'>95</span><span class='ectt-0800'>        </span><span id='textcolor2884'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail2;</span>
<a id='x1-60197r96'></a><span class='ecrm-0500'>96</span><span class='ectt-0800'>    }</span>
<a id='x1-60199r97'></a><span class='ecrm-0500'>97</span>
<a id='x1-60201r98'></a><span class='ecrm-0500'>98</span><span class='ectt-0800'>    button_irqs[1] = ret;</span>
<a id='x1-60203r99'></a><span class='ecrm-0500'>99</span>
<a id='x1-60205r100'></a><span class='ecrm-0500'>100</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2885'><span class='ectt-0800'>"Successfully requested BUTTON2 IRQ # %d</span></span><span id='textcolor2886'><span class='ectt-0800'>\n</span></span><span id='textcolor2887'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, button_irqs[1]);</span>
<a id='x1-60207r101'></a><span class='ecrm-0500'>101</span>
<a id='x1-60209r102'></a><span class='ecrm-0500'>102</span><span class='ectt-0800'>    ret = request_threaded_irq(</span>
<a id='x1-60211r103'></a><span class='ecrm-0500'>103</span><span class='ectt-0800'>        button_irqs[1], button_top_half, button_bottom_half,</span>
<a id='x1-60213r104'></a><span class='ecrm-0500'>104</span><span class='ectt-0800'>        IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, </span><span id='textcolor2888'><span class='ectt-0800'>"gpiomod#button2"</span></span><span class='ectt-0800'>&amp;buttons[1]);</span>
<a id='x1-60215r105'></a><span class='ecrm-0500'>105</span>
<a id='x1-60217r106'></a><span class='ecrm-0500'>106</span><span class='ectt-0800'>    </span><span id='textcolor2889'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret) {</span>
<a id='x1-60219r107'></a><span class='ecrm-0500'>107</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2890'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2891'><span class='ectt-0800'>\n</span></span><span id='textcolor2892'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60221r108'></a><span class='ecrm-0500'>108</span><span class='ectt-0800'>        </span><span id='textcolor2893'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail3;</span>
<a id='x1-60223r109'></a><span class='ecrm-0500'>109</span><span class='ectt-0800'>    }</span>
<a id='x1-60225r110'></a><span class='ecrm-0500'>110</span>
<a id='x1-60227r111'></a><span class='ecrm-0500'>111</span><span class='ectt-0800'>    </span><span id='textcolor2894'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> 0;</span>
<a id='x1-60169r82'></a><span class='ecrm-0500'>82</span><span class='ectt-0800'>    ret = request_threaded_irq(button_irqs[0], button_top_half,</span>
<a id='x1-60171r83'></a><span class='ecrm-0500'>83</span><span class='ectt-0800'>                               button_bottom_half,</span>
<a id='x1-60173r84'></a><span class='ecrm-0500'>84</span><span class='ectt-0800'>                               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,</span>
<a id='x1-60175r85'></a><span class='ecrm-0500'>85</span><span class='ectt-0800'>                               </span><span id='textcolor2874'><span class='ectt-0800'>"gpiomod#button1"</span></span><span class='ectt-0800'>&amp;buttons[0]);</span>
<a id='x1-60177r86'></a><span class='ecrm-0500'>86</span>
<a id='x1-60179r87'></a><span class='ecrm-0500'>87</span><span class='ectt-0800'>    </span><span id='textcolor2875'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret) {</span>
<a id='x1-60181r88'></a><span class='ecrm-0500'>88</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2876'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2877'><span class='ectt-0800'>\n</span></span><span id='textcolor2878'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60183r89'></a><span class='ecrm-0500'>89</span><span class='ectt-0800'>        </span><span id='textcolor2879'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail2;</span>
<a id='x1-60185r90'></a><span class='ecrm-0500'>90</span><span class='ectt-0800'>    }</span>
<a id='x1-60187r91'></a><span class='ecrm-0500'>91</span>
<a id='x1-60189r92'></a><span class='ecrm-0500'>92</span><span class='ectt-0800'>    ret = gpio_to_irq(buttons[1].gpio);</span>
<a id='x1-60191r93'></a><span class='ecrm-0500'>93</span>
<a id='x1-60193r94'></a><span class='ecrm-0500'>94</span><span class='ectt-0800'>    </span><span id='textcolor2880'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret &lt; 0) {</span>
<a id='x1-60195r95'></a><span class='ecrm-0500'>95</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2881'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2882'><span class='ectt-0800'>\n</span></span><span id='textcolor2883'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60197r96'></a><span class='ecrm-0500'>96</span><span class='ectt-0800'>        </span><span id='textcolor2884'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail2;</span>
<a id='x1-60199r97'></a><span class='ecrm-0500'>97</span><span class='ectt-0800'>    }</span>
<a id='x1-60201r98'></a><span class='ecrm-0500'>98</span>
<a id='x1-60203r99'></a><span class='ecrm-0500'>99</span><span class='ectt-0800'>    button_irqs[1] = ret;</span>
<a id='x1-60205r100'></a><span class='ecrm-0500'>100</span>
<a id='x1-60207r101'></a><span class='ecrm-0500'>101</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2885'><span class='ectt-0800'>"Successfully requested BUTTON2 IRQ # %d</span></span><span id='textcolor2886'><span class='ectt-0800'>\n</span></span><span id='textcolor2887'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, button_irqs[1]);</span>
<a id='x1-60209r102'></a><span class='ecrm-0500'>102</span>
<a id='x1-60211r103'></a><span class='ecrm-0500'>103</span><span class='ectt-0800'>    ret = request_threaded_irq(button_irqs[1], button_top_half,</span>
<a id='x1-60213r104'></a><span class='ecrm-0500'>104</span><span class='ectt-0800'>                               button_bottom_half,</span>
<a id='x1-60215r105'></a><span class='ecrm-0500'>105</span><span class='ectt-0800'>                               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,</span>
<a id='x1-60217r106'></a><span class='ecrm-0500'>106</span><span class='ectt-0800'>                               </span><span id='textcolor2888'><span class='ectt-0800'>"gpiomod#button2"</span></span><span class='ectt-0800'>&amp;buttons[1]);</span>
<a id='x1-60219r107'></a><span class='ecrm-0500'>107</span>
<a id='x1-60221r108'></a><span class='ecrm-0500'>108</span><span class='ectt-0800'>    </span><span id='textcolor2889'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (ret) {</span>
<a id='x1-60223r109'></a><span class='ecrm-0500'>109</span><span class='ectt-0800'>        pr_err(</span><span id='textcolor2890'><span class='ectt-0800'>"Unable to request IRQ: %d</span></span><span id='textcolor2891'><span class='ectt-0800'>\n</span></span><span id='textcolor2892'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, ret);</span>
<a id='x1-60225r110'></a><span class='ecrm-0500'>110</span><span class='ectt-0800'>        </span><span id='textcolor2893'><span class='ectt-0800'>goto</span></span><span class='ectt-0800'> fail3;</span>
<a id='x1-60227r111'></a><span class='ecrm-0500'>111</span><span class='ectt-0800'>    }</span>
<a id='x1-60229r112'></a><span class='ecrm-0500'>112</span>
<a id='x1-60231r113'></a><span class='ecrm-0500'>113</span><span id='textcolor2895'><span class='ectt-0800'>/* cleanup what has been setup so far */</span></span>
<a id='x1-60233r114'></a><span class='ecrm-0500'>114</span><span class='ectt-0800'>fail3:</span>
<a id='x1-60235r115'></a><span class='ecrm-0500'>115</span><span class='ectt-0800'>    free_irq(button_irqs[0], NULL);</span>
<a id='x1-60237r116'></a><span class='ecrm-0500'>116</span>
<a id='x1-60239r117'></a><span class='ecrm-0500'>117</span><span class='ectt-0800'>fail2:</span>
<a id='x1-60241r118'></a><span class='ecrm-0500'>118</span><span class='ectt-0800'>    gpio_free_array(buttons, ARRAY_SIZE(leds));</span>
<a id='x1-60243r119'></a><span class='ecrm-0500'>119</span>
<a id='x1-60245r120'></a><span class='ecrm-0500'>120</span><span class='ectt-0800'>fail1:</span>
<a id='x1-60247r121'></a><span class='ecrm-0500'>121</span><span class='ectt-0800'>    gpio_free_array(leds, ARRAY_SIZE(leds));</span>
<a id='x1-60249r122'></a><span class='ecrm-0500'>122</span>
<a id='x1-60251r123'></a><span class='ecrm-0500'>123</span><span class='ectt-0800'>    </span><span id='textcolor2896'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> ret;</span>
<a id='x1-60253r124'></a><span class='ecrm-0500'>124</span><span class='ectt-0800'>}</span>
<a id='x1-60255r125'></a><span class='ecrm-0500'>125</span>
<a id='x1-60257r126'></a><span class='ecrm-0500'>126</span><span id='textcolor2897'><span class='ectt-0800'>static</span></span><span class='ectt-0800'> </span><span id='textcolor2898'><span class='ectt-0800'>void</span></span><span class='ectt-0800'> __exit bottomhalf_exit(</span><span id='textcolor2899'><span class='ectt-0800'>void</span></span><span class='ectt-0800'>)</span>
<a id='x1-60259r127'></a><span class='ecrm-0500'>127</span><span class='ectt-0800'>{</span>
<a id='x1-60261r128'></a><span class='ecrm-0500'>128</span><span class='ectt-0800'>    </span><span id='textcolor2900'><span class='ectt-0800'>int</span></span><span class='ectt-0800'> i;</span>
<a id='x1-60263r129'></a><span class='ecrm-0500'>129</span>
<a id='x1-60265r130'></a><span class='ecrm-0500'>130</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2901'><span class='ectt-0800'>"%s</span></span><span id='textcolor2902'><span class='ectt-0800'>\n</span></span><span id='textcolor2903'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, __func__);</span>
<a id='x1-60231r113'></a><span class='ecrm-0500'>113</span><span class='ectt-0800'>    </span><span id='textcolor2894'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> 0;</span>
<a id='x1-60233r114'></a><span class='ecrm-0500'>114</span>
<a id='x1-60235r115'></a><span class='ecrm-0500'>115</span><span id='textcolor2895'><span class='ectt-0800'>/* cleanup what has been setup so far */</span></span>
<a id='x1-60237r116'></a><span class='ecrm-0500'>116</span><span class='ectt-0800'>fail3:</span>
<a id='x1-60239r117'></a><span class='ecrm-0500'>117</span><span class='ectt-0800'>    free_irq(button_irqs[0], NULL);</span>
<a id='x1-60241r118'></a><span class='ecrm-0500'>118</span>
<a id='x1-60243r119'></a><span class='ecrm-0500'>119</span><span class='ectt-0800'>fail2:</span>
<a id='x1-60245r120'></a><span class='ecrm-0500'>120</span><span class='ectt-0800'>    gpio_free_array(buttons, ARRAY_SIZE(leds));</span>
<a id='x1-60247r121'></a><span class='ecrm-0500'>121</span>
<a id='x1-60249r122'></a><span class='ecrm-0500'>122</span><span class='ectt-0800'>fail1:</span>
<a id='x1-60251r123'></a><span class='ecrm-0500'>123</span><span class='ectt-0800'>    gpio_free_array(leds, ARRAY_SIZE(leds));</span>
<a id='x1-60253r124'></a><span class='ecrm-0500'>124</span>
<a id='x1-60255r125'></a><span class='ecrm-0500'>125</span><span class='ectt-0800'>    </span><span id='textcolor2896'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> ret;</span>
<a id='x1-60257r126'></a><span class='ecrm-0500'>126</span><span class='ectt-0800'>}</span>
<a id='x1-60259r127'></a><span class='ecrm-0500'>127</span>
<a id='x1-60261r128'></a><span class='ecrm-0500'>128</span><span id='textcolor2897'><span class='ectt-0800'>static</span></span><span class='ectt-0800'> </span><span id='textcolor2898'><span class='ectt-0800'>void</span></span><span class='ectt-0800'> __exit bottomhalf_exit(</span><span id='textcolor2899'><span class='ectt-0800'>void</span></span><span class='ectt-0800'>)</span>
<a id='x1-60263r129'></a><span class='ecrm-0500'>129</span><span class='ectt-0800'>{</span>
<a id='x1-60265r130'></a><span class='ecrm-0500'>130</span><span class='ectt-0800'>    </span><span id='textcolor2900'><span class='ectt-0800'>int</span></span><span class='ectt-0800'> i;</span>
<a id='x1-60267r131'></a><span class='ecrm-0500'>131</span>
<a id='x1-60269r132'></a><span class='ecrm-0500'>132</span><span class='ectt-0800'>    </span><span id='textcolor2904'><span class='ectt-0800'>/* free irqs */</span></span>
<a id='x1-60271r133'></a><span class='ecrm-0500'>133</span><span class='ectt-0800'>    free_irq(button_irqs[0], NULL);</span>
<a id='x1-60273r134'></a><span class='ecrm-0500'>134</span><span class='ectt-0800'>    free_irq(button_irqs[1], NULL);</span>
<a id='x1-60275r135'></a><span class='ecrm-0500'>135</span>
<a id='x1-60277r136'></a><span class='ecrm-0500'>136</span><span class='ectt-0800'>    </span><span id='textcolor2905'><span class='ectt-0800'>/* turn all LEDs off */</span></span>
<a id='x1-60279r137'></a><span class='ecrm-0500'>137</span><span class='ectt-0800'>    </span><span id='textcolor2906'><span class='ectt-0800'>for</span></span><span class='ectt-0800'> (i = 0; i &lt; ARRAY_SIZE(leds); i++)</span>
<a id='x1-60281r138'></a><span class='ecrm-0500'>138</span><span class='ectt-0800'>        gpio_set_value(leds[i].gpio, 0);</span>
<a id='x1-60283r139'></a><span class='ecrm-0500'>139</span>
<a id='x1-60285r140'></a><span class='ecrm-0500'>140</span><span class='ectt-0800'>    </span><span id='textcolor2907'><span class='ectt-0800'>/* unregister */</span></span>
<a id='x1-60287r141'></a><span class='ecrm-0500'>141</span><span class='ectt-0800'>    gpio_free_array(leds, ARRAY_SIZE(leds));</span>
<a id='x1-60289r142'></a><span class='ecrm-0500'>142</span><span class='ectt-0800'>    gpio_free_array(buttons, ARRAY_SIZE(buttons));</span>
<a id='x1-60291r143'></a><span class='ecrm-0500'>143</span><span class='ectt-0800'>}</span>
<a id='x1-60293r144'></a><span class='ecrm-0500'>144</span>
<a id='x1-60295r145'></a><span class='ecrm-0500'>145</span><span class='ectt-0800'>module_init(bottomhalf_init);</span>
<a id='x1-60297r146'></a><span class='ecrm-0500'>146</span><span class='ectt-0800'>module_exit(bottomhalf_exit);</span>
<a id='x1-60299r147'></a><span class='ecrm-0500'>147</span>
<a id='x1-60301r148'></a><span class='ecrm-0500'>148</span><span class='ectt-0800'>MODULE_LICENSE(</span><span id='textcolor2908'><span class='ectt-0800'>"GPL"</span></span><span class='ectt-0800'>);</span>
<a id='x1-60303r149'></a><span class='ecrm-0500'>149</span><span class='ectt-0800'>MODULE_DESCRIPTION(</span><span id='textcolor2909'><span class='ectt-0800'>"Interrupt with top and bottom half"</span></span><span class='ectt-0800'>);</span></pre>
<a id='x1-60269r132'></a><span class='ecrm-0500'>132</span><span class='ectt-0800'>    pr_info(</span><span id='textcolor2901'><span class='ectt-0800'>"%s</span></span><span id='textcolor2902'><span class='ectt-0800'>\n</span></span><span id='textcolor2903'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>, __func__);</span>
<a id='x1-60271r133'></a><span class='ecrm-0500'>133</span>
<a id='x1-60273r134'></a><span class='ecrm-0500'>134</span><span class='ectt-0800'>    </span><span id='textcolor2904'><span class='ectt-0800'>/* free irqs */</span></span>
<a id='x1-60275r135'></a><span class='ecrm-0500'>135</span><span class='ectt-0800'>    free_irq(button_irqs[0], NULL);</span>
<a id='x1-60277r136'></a><span class='ecrm-0500'>136</span><span class='ectt-0800'>    free_irq(button_irqs[1], NULL);</span>
<a id='x1-60279r137'></a><span class='ecrm-0500'>137</span>
<a id='x1-60281r138'></a><span class='ecrm-0500'>138</span><span class='ectt-0800'>    </span><span id='textcolor2905'><span class='ectt-0800'>/* turn all LEDs off */</span></span>
<a id='x1-60283r139'></a><span class='ecrm-0500'>139</span><span class='ectt-0800'>    </span><span id='textcolor2906'><span class='ectt-0800'>for</span></span><span class='ectt-0800'> (i = 0; i &lt; ARRAY_SIZE(leds); i++)</span>
<a id='x1-60285r140'></a><span class='ecrm-0500'>140</span><span class='ectt-0800'>        gpio_set_value(leds[i].gpio, 0);</span>
<a id='x1-60287r141'></a><span class='ecrm-0500'>141</span>
<a id='x1-60289r142'></a><span class='ecrm-0500'>142</span><span class='ectt-0800'>    </span><span id='textcolor2907'><span class='ectt-0800'>/* unregister */</span></span>
<a id='x1-60291r143'></a><span class='ecrm-0500'>143</span><span class='ectt-0800'>    gpio_free_array(leds, ARRAY_SIZE(leds));</span>
<a id='x1-60293r144'></a><span class='ecrm-0500'>144</span><span class='ectt-0800'>    gpio_free_array(buttons, ARRAY_SIZE(buttons));</span>
<a id='x1-60295r145'></a><span class='ecrm-0500'>145</span><span class='ectt-0800'>}</span>
<a id='x1-60297r146'></a><span class='ecrm-0500'>146</span>
<a id='x1-60299r147'></a><span class='ecrm-0500'>147</span><span class='ectt-0800'>module_init(bottomhalf_init);</span>
<a id='x1-60301r148'></a><span class='ecrm-0500'>148</span><span class='ectt-0800'>module_exit(bottomhalf_exit);</span>
<a id='x1-60303r149'></a><span class='ecrm-0500'>149</span>
<a id='x1-60305r150'></a><span class='ecrm-0500'>150</span><span class='ectt-0800'>MODULE_LICENSE(</span><span id='textcolor2908'><span class='ectt-0800'>"GPL"</span></span><span class='ectt-0800'>);</span>
<a id='x1-60307r151'></a><span class='ecrm-0500'>151</span><span class='ectt-0800'>MODULE_DESCRIPTION(</span><span id='textcolor2909'><span class='ectt-0800'>"Interrupt with top and bottom half"</span></span><span class='ectt-0800'>);</span></pre>
<!-- l. 1953 --><p class='indent'> A threaded IRQ is registered using <code> <span class='ectt-1000'>request_threaded_irq()</span>
</code>. This function only takes one additional parameter than the
<code> <span class='ectt-1000'>request_irq()</span>