Adams hit two home runs off Garland and the Toronto Blue Jays beat Chicago 7-3 Tuesday night.
"I've been seeing the ball real well and making good contact," Adams said. "I don't think of myself as a home run hitter."
Adams, who was batting leadoff, has three homers off Garland this season.
"I'm not sure why I've been so successful (against Garland)."
Paul Konerko hit a two-run homer for the White Sox, who had a four-game winning streak snapped. Despite holding the best record in baseball at 69-36, Chicago has lost eight of their last 11 at home.
Garland (15-5) had his worst outing of the season. He gave up seven runs and 13 hits in six innings. He was touched for three homers, which matched his season high.
"If I can't move past this then I'm going to get pummeled the rest of the way out," Garland said.
Adams extended his hitting streak to 11 games for Toronto, who have won nine of their last 13 games.
Towers (8-8) pitched 7 2/3 innings, allowing three runs and eight hits. He tied his season high with seven strikeouts and didn't allow a walk.
"He's pitched good lately, although he doesn't have a lot to show for it," Toronto manager John Gibbons said.
Garland gave up five runs in the second on seven straight hits, four for extra bases. The Blue Jays batted around in the inning, which was highlighted by consecutive homers from Hudson and Adams.
The Blue Jays scored all five runs with two outs. Corey Koskie got the first hit of the inning, but was thrown out by right fielder Jermaine Dye at second trying to stretch the hit into a double. Garland then gave up a single to Gregg Zaun and a double to Hinske. Reed Johnson drove in two with a triple to right-center. Then Hudson and Adams followed with their homers to make it 5-2.
In the fourth, White Sox manager Ozzie Guillen was ejected for arguing balls and strikes from the dugout. Guillen yelled at home plate umpire Jeff Nelson after he called the first pitch a strike on Dye's at-bat. After being ejected by Nelson, Guillen came out of the dugout and had an animated argument that lasted several minutes.
Garland was also upset how the game was called.
"I hate to say it, but he had a pretty big zone for him (Towers). As a pitcher, when your hitters are coming back and they are that mad you like to ask him what is he calling. 'Is it away, is it in, what's going on?"' Garland said. "When I was done, I came in, watched some of his pitches, watched some of my pitches, it's a tough toss up. You go out there and battle, things go your way sometimes and sometimes they don't."
Adams had a leadoff homer off Garland in the fifth, making it 6-2. It was his second career multihomer game; his first was May 7 against the White Sox. He tagged Garland for one of his two homers in that game.
Despite getting the win in his last outing against Toronto, Garland allowed six runs and nine hits in 5 2/3 innings in his last start against Toronto.
Hudson added a sacrifice fly in the sixth.
After a shaky first inning, Towers settled down and retired 10 straight between the second and fifth innings. He had five strikeouts in that span.
"Every pitch that I throw, I'm throwing to a certain spot for a reason. I'm trying to stay out of the middle of the plate. That's what I think about the whole time, throwing quality strikes to the corners and maybe trying to get the ball to break off the plate," Towers said.
Towers gave up a double to Tadahito Iguchi in the first. Then with two outs, Konerko hit a two-run homer, deep in the left field stands. It was his 24th of the season and his 187th with the White Sox, tying him with Magglio Ordonez for fourth on the franchise's career list.
- Chicago INF Geoff Blum, acquired in a trade from San Diego on Sunday, made a good impression in his first start. He made a diving stop on Vernon Wells' grounder in the first and easily threw him out, and singled in his first at-bat. Blum started in place of 3B Joe Crede, who had the night off.
- Hinske broke out of an 0-for-10 slump.